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

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

#include <cassert>

namespace build2
{
  namespace build
  {
    namespace cli
    {
      // usage_para
      //
      inline usage_para::
      usage_para (value v)
      : v_ (v)
      {
      }

      // 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_;
      }

      // file_io_failure
      //
      inline file_io_failure::
      file_io_failure (const std::string& file)
      : file_ (file)
      {
      }

      inline const std::string& file_io_failure::
      file () const
      {
        return file_;
      }

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

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

      // 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;
      }

      // argv_file_scanner
      //
      inline argv_file_scanner::
      argv_file_scanner (int& argc,
                         char** argv,
                         const std::string& option,
                         bool erase,
                         std::size_t sp)
      : argv_scanner (argc, argv, erase, sp),
        option_ (option),
        options_ (&option_info_),
        options_count_ (1),
        i_ (1),
        skip_ (false)
      {
        option_info_.option = option_.c_str ();
        option_info_.search_func = 0;
      }

      inline argv_file_scanner::
      argv_file_scanner (int start,
                         int& argc,
                         char** argv,
                         const std::string& option,
                         bool erase,
                         std::size_t sp)
      : argv_scanner (start, argc, argv, erase, sp),
        option_ (option),
        options_ (&option_info_),
        options_count_ (1),
        i_ (1),
        skip_ (false)
      {
        option_info_.option = option_.c_str ();
        option_info_.search_func = 0;
      }

      inline argv_file_scanner::
      argv_file_scanner (const std::string& file,
                         const std::string& option,
                         std::size_t sp)
      : argv_scanner (0, zero_argc_, 0, sp),
        option_ (option),
        options_ (&option_info_),
        options_count_ (1),
        i_ (1),
        skip_ (false)
      {
        option_info_.option = option_.c_str ();
        option_info_.search_func = 0;

        load (file);
      }

      inline argv_file_scanner::
      argv_file_scanner (int& argc,
                         char** argv,
                         const option_info* options,
                         std::size_t options_count,
                         bool erase,
                         std::size_t sp)
      : argv_scanner (argc, argv, erase, sp),
        options_ (options),
        options_count_ (options_count),
        i_ (1),
        skip_ (false)
      {
      }

      inline argv_file_scanner::
      argv_file_scanner (int start,
                         int& argc,
                         char** argv,
                         const option_info* options,
                         std::size_t options_count,
                         bool erase,
                         std::size_t sp)
      : argv_scanner (start, argc, argv, erase, sp),
        options_ (options),
        options_count_ (options_count),
        i_ (1),
        skip_ (false)
      {
      }

      inline argv_file_scanner::
      argv_file_scanner (const std::string& file,
                         const option_info* options,
                         std::size_t options_count,
                         std::size_t sp)
      : argv_scanner (0, zero_argc_, 0, sp),
        options_ (options),
        options_count_ (options_count),
        i_ (1),
        skip_ (false)
      {
        load (file);
      }
    }
  }
}

namespace build2
{
}

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