// -*- C++ -*-
//
// This file was generated by CLI, a command line interface
// compiler for C++.
//

// Begin prologue.
//
//
// End prologue.

#include <cassert>

namespace butl
{
  namespace cli
  {
    // unknown_mode
    //
    inline unknown_mode::
    unknown_mode (value v)
    : v_ (v)
    {
    }

    // exception
    //
    inline ::std::ostream&
    operator<< (::std::ostream& os, const exception& e)
    {
      e.print (os);
      return os;
    }

    // unknown_option
    //
    inline unknown_option::
    unknown_option (const std::string& option)
    : option_ (option)
    {
    }

    inline const std::string& unknown_option::
    option () const
    {
      return option_;
    }

    // unknown_argument
    //
    inline unknown_argument::
    unknown_argument (const std::string& argument)
    : argument_ (argument)
    {
    }

    inline const std::string& unknown_argument::
    argument () const
    {
      return argument_;
    }

    // missing_value
    //
    inline missing_value::
    missing_value (const std::string& option)
    : option_ (option)
    {
    }

    inline const std::string& missing_value::
    option () const
    {
      return option_;
    }

    // invalid_value
    //
    inline invalid_value::
    invalid_value (const std::string& option,
                   const std::string& value,
                   const std::string& message)
    : option_ (option),
      value_ (value),
      message_ (message)
    {
    }

    inline const std::string& invalid_value::
    option () const
    {
      return option_;
    }

    inline const std::string& invalid_value::
    value () const
    {
      return value_;
    }

    inline const std::string& invalid_value::
    message () const
    {
      return message_;
    }

    // argv_scanner
    //
    inline argv_scanner::
    argv_scanner (int& argc,
                  char** argv,
                  bool erase,
                  std::size_t sp)
    : start_position_ (sp + 1),
      i_ (1),
      argc_ (argc),
      argv_ (argv),
      erase_ (erase)
    {
    }

    inline argv_scanner::
    argv_scanner (int start,
                  int& argc,
                  char** argv,
                  bool erase,
                  std::size_t sp)
    : start_position_ (sp + static_cast<std::size_t> (start)),
      i_ (start),
      argc_ (argc),
      argv_ (argv),
      erase_ (erase)
    {
    }

    inline int argv_scanner::
    end () const
    {
      return i_;
    }

    // vector_scanner
    //
    inline vector_scanner::
    vector_scanner (const std::vector<std::string>& v,
                    std::size_t i,
                    std::size_t sp)
    : start_position_ (sp), v_ (v), i_ (i)
    {
    }

    inline std::size_t vector_scanner::
    end () const
    {
      return i_;
    }

    inline void vector_scanner::
    reset (std::size_t i, std::size_t sp)
    {
      i_ = i;
      start_position_ = sp;
    }
  }
}

namespace butl
{
  // cat_options
  //

  // cp_options
  //

  inline const bool& cp_options::
  recursive () const
  {
    return this->recursive_;
  }

  inline const bool& cp_options::
  preserve () const
  {
    return this->preserve_;
  }

  // date_options
  //

  inline const bool& date_options::
  utc () const
  {
    return this->utc_;
  }

  // find_options
  //

  // ln_options
  //

  inline const bool& ln_options::
  symbolic () const
  {
    return this->symbolic_;
  }

  // mkdir_options
  //

  inline const bool& mkdir_options::
  parents () const
  {
    return this->parents_;
  }

  // mv_options
  //

  inline const bool& mv_options::
  force () const
  {
    return this->force_;
  }

  // rm_options
  //

  inline const bool& rm_options::
  recursive () const
  {
    return this->recursive_;
  }

  inline const bool& rm_options::
  force () const
  {
    return this->force_;
  }

  // rmdir_options
  //

  inline const bool& rmdir_options::
  force () const
  {
    return this->force_;
  }

  // sed_options
  //

  inline const bool& sed_options::
  quiet () const
  {
    return this->quiet_;
  }

  inline const bool& sed_options::
  in_place () const
  {
    return this->in_place_;
  }

  inline const std::vector<std::string>& sed_options::
  expression () const
  {
    return this->expression_;
  }

  inline bool sed_options::
  expression_specified () const
  {
    return this->expression_specified_;
  }

  // sleep_options
  //

  // test_options
  //

  inline const bool& test_options::
  file () const
  {
    return this->file_;
  }

  inline const bool& test_options::
  directory () const
  {
    return this->directory_;
  }

  // touch_options
  //

  inline const std::string& touch_options::
  after () const
  {
    return this->after_;
  }

  inline bool touch_options::
  after_specified () const
  {
    return this->after_specified_;
  }
}

// Begin epilogue.
//
//
// End epilogue.
