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

#ifndef LIBBUILD2_SCRIPT_BUILTIN_OPTIONS_HXX
#define LIBBUILD2_SCRIPT_BUILTIN_OPTIONS_HXX

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

#include <libbuild2/common-options.hxx>

namespace build2
{
  namespace script
  {
    class set_options
    {
      public:
      set_options ();

      set_options (int& argc,
                   char** argv,
                   bool erase = false,
                   ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                   ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      set_options (int start,
                   int& argc,
                   char** argv,
                   bool erase = false,
                   ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                   ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      set_options (int& argc,
                   char** argv,
                   int& end,
                   bool erase = false,
                   ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                   ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      set_options (int start,
                   int& argc,
                   char** argv,
                   int& end,
                   bool erase = false,
                   ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                   ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      set_options (::build2::build::cli::scanner&,
                   ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                   ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      // Option accessors and modifiers.
      //
      const bool&
      exact () const;

      bool&
      exact ();

      void
      exact (const bool&);

      const bool&
      newline () const;

      bool&
      newline ();

      void
      newline (const bool&);

      const bool&
      whitespace () const;

      bool&
      whitespace ();

      void
      whitespace (const bool&);

      // Implementation details.
      //
      protected:
      bool
      _parse (const char*, ::build2::build::cli::scanner&);

      private:
      bool
      _parse (::build2::build::cli::scanner&,
              ::build2::build::cli::unknown_mode option,
              ::build2::build::cli::unknown_mode argument);

      public:
      bool exact_;
      bool newline_;
      bool whitespace_;
    };

    class timeout_options
    {
      public:
      timeout_options ();

      timeout_options (int& argc,
                       char** argv,
                       bool erase = false,
                       ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                       ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      timeout_options (int start,
                       int& argc,
                       char** argv,
                       bool erase = false,
                       ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                       ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      timeout_options (int& argc,
                       char** argv,
                       int& end,
                       bool erase = false,
                       ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                       ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      timeout_options (int start,
                       int& argc,
                       char** argv,
                       int& end,
                       bool erase = false,
                       ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                       ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      timeout_options (::build2::build::cli::scanner&,
                       ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                       ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      // Option accessors and modifiers.
      //
      const bool&
      success () const;

      bool&
      success ();

      void
      success (const bool&);

      // Implementation details.
      //
      protected:
      bool
      _parse (const char*, ::build2::build::cli::scanner&);

      private:
      bool
      _parse (::build2::build::cli::scanner&,
              ::build2::build::cli::unknown_mode option,
              ::build2::build::cli::unknown_mode argument);

      public:
      bool success_;
    };

    class export_options
    {
      public:
      export_options ();

      export_options (int& argc,
                      char** argv,
                      bool erase = false,
                      ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                      ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      export_options (int start,
                      int& argc,
                      char** argv,
                      bool erase = false,
                      ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                      ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      export_options (int& argc,
                      char** argv,
                      int& end,
                      bool erase = false,
                      ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                      ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      export_options (int start,
                      int& argc,
                      char** argv,
                      int& end,
                      bool erase = false,
                      ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                      ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      export_options (::build2::build::cli::scanner&,
                      ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                      ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      // Option accessors and modifiers.
      //
      const vector<string>&
      unset () const;

      vector<string>&
      unset ();

      void
      unset (const vector<string>&);

      bool
      unset_specified () const;

      void
      unset_specified (bool);

      const vector<string>&
      clear () const;

      vector<string>&
      clear ();

      void
      clear (const vector<string>&);

      bool
      clear_specified () const;

      void
      clear_specified (bool);

      // Implementation details.
      //
      protected:
      bool
      _parse (const char*, ::build2::build::cli::scanner&);

      private:
      bool
      _parse (::build2::build::cli::scanner&,
              ::build2::build::cli::unknown_mode option,
              ::build2::build::cli::unknown_mode argument);

      public:
      vector<string> unset_;
      bool unset_specified_;
      vector<string> clear_;
      bool clear_specified_;
    };

    class for_options
    {
      public:
      for_options ();

      for_options (int& argc,
                   char** argv,
                   bool erase = false,
                   ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                   ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      for_options (int start,
                   int& argc,
                   char** argv,
                   bool erase = false,
                   ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                   ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      for_options (int& argc,
                   char** argv,
                   int& end,
                   bool erase = false,
                   ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                   ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      for_options (int start,
                   int& argc,
                   char** argv,
                   int& end,
                   bool erase = false,
                   ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                   ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      for_options (::build2::build::cli::scanner&,
                   ::build2::build::cli::unknown_mode option = ::build2::build::cli::unknown_mode::fail,
                   ::build2::build::cli::unknown_mode argument = ::build2::build::cli::unknown_mode::stop);

      // Option accessors and modifiers.
      //
      const bool&
      exact () const;

      bool&
      exact ();

      void
      exact (const bool&);

      const bool&
      newline () const;

      bool&
      newline ();

      void
      newline (const bool&);

      const bool&
      whitespace () const;

      bool&
      whitespace ();

      void
      whitespace (const bool&);

      // Implementation details.
      //
      protected:
      bool
      _parse (const char*, ::build2::build::cli::scanner&);

      private:
      bool
      _parse (::build2::build::cli::scanner&,
              ::build2::build::cli::unknown_mode option,
              ::build2::build::cli::unknown_mode argument);

      public:
      bool exact_;
      bool newline_;
      bool whitespace_;
    };
  }
}

#include <libbuild2/script/builtin-options.ixx>

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

#endif // LIBBUILD2_SCRIPT_BUILTIN_OPTIONS_HXX
