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

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

#include <cassert>

namespace build2
{
  namespace script
  {
    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)
      : i_ (1), argc_ (argc), argv_ (argv), erase_ (erase)
      {
      }

      inline argv_scanner::
      argv_scanner (int start, int& argc, char** argv, bool erase)
      : 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)
      : v_ (v), i_ (i)
      {
      }

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

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

namespace build2
{
  namespace script
  {
    // set_options
    //

    inline const bool& set_options::
    exact () const
    {
      return this->exact_;
    }

    inline const bool& set_options::
    newline () const
    {
      return this->newline_;
    }

    inline const bool& set_options::
    whitespace () const
    {
      return this->whitespace_;
    }
  }
}

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