Provided by: libbobcat-dev_6.04.00-1ubuntu3_amd64 bug

NAME

       FBB::ArgConfig - A singleton class processing program arguments

SYNOPSIS

       #include <bobcat/argconfig>
       Linking option: -lbobcat

DESCRIPTION

       Singleton class (see Gamma et al., 1995) built around getopt_long()(3). The class handles short- and long
       command-line options, as well as configuration files.

       In  addition  to the standard command-line options the various option members also recognize long options
       as keys, optionally followed by a colon and an option value are also recognized. E.g., an option  --input
       filename can be specified in the configuration file like

           input: filename

       or

           input filename

       Options  without arguments should probably not use the colon, although it is accepted by ConfigArg. E.g.,
       for the option --verbose both forms are accepted:

       verbose
       verbose:

NAMESPACE

       FBB
       All constructors, members, operators and manipulators, mentioned in this man-page,  are  defined  in  the
       namespace FBB.

INHERITS FROM

       FBB::Arg,
       FBB::ConfigFile

ENUMERATION

       The  FBB::ArgConfig::Type enumeration is inherited from the FBB::Arg class. It is used to specify whether
       or not long options require arguments. It defines the following values: None, Required, Optional.

       o      None: the long option does not use an argument;

       o      Required: the long option requires an argument value;

       o      Optional: the long option may optionally be provided with  an argument value;

       These values are used when defining long options (like --version), which are defined as  objects  of  the
       (nested  inherited)  class  FBB::Arg::LongOption  (in  the  context  of  ArgConfig  this  is identical to
       FBB::ArgConfig::LongOption.

THE NESTED INHERITED CLASS FBB::Arg::LongOption

       Long options are defined using objects of the nested class FBB::Arg::LongOption. This class provides  the
       following constructors:

       o      FBB::Arg::LongOption(char const *name, FBB::Arg::Type type = FBB::Arg::None):
              This  constructor  is  used  to  define  a  long option for which no corresponding short option is
              defined. The parameter name is the name of the long option (without specifying the  --  characters
              which are only required when specifying a long option when calling a program).

       o      FBB::Arg::LongOption(char const *name, int optionChar):
              This  constructor  is  used  to  define  a  long  option for which a corresponding short option is
              defined. The parameter name is the name of the long option (without specifying the  --  characters
              which are only required when specifying a long option when calling a program).

       To define long options use the following procedure:

       o      First, construct an array

                  FBB::Arg::LongOption longOptions[] = { c1, c2, ..., cn };

              Where c1, c2, ..., cn are n constructor invocations of FBB::Arg::LongOption() constructors

       o      Next,  pass  longOptions,  LongOptions + n as arguments to an Arg::initialize member that supports
              long options.

       Objects of the class LongOptions are normally used internally by the ArgConfig object, but they can  also
       be used outside of the ArgConfig object. For that situation the following members are available:

       o      std::string const &longName() const:
              returns the LongOption’s long option name;

       o      int optionChar() const:
              returns  the LongOption’s option character (or one of the Arg::Type enumeration values if there is
              no option character associated with the LongOption).

CONSTRUCTORS

       Since the class is a Singleton, no public constructors are available. Instead, static members are offered
       to initialize and access the single ArgConfig object.

STATIC MEMBERS

       All initialize members initialize the FBB::ArgConfig singleton, and can only be called once. An exception
       is thrown when called multiple times. All initialize  members  return  a  reference  to  the  initialized
       ArgConfig singleton object.

       All  initialize members define the parameters argc and argv which are interpreted as main’s argc and argv
       parameters.  When an argv element points to two consecutive dashes (--) then that element is ignored, and
       all of argv’s subsequent elements are considered arguments instead of options.

       o      FBB::ArgConfig &ArgConfig::initialize(char const *optstring, int argc, char  **argv,  [std::string
              const  &fname,]  Comment  cType  =  KeepComment, SearchCasing sType = SearchCaseSensitive, Indices
              iType = IgnoreIndices):
              The parameter optstring is a null-terminated byte string  (NTBS)  optionally  starting  with  a  +
              character,  but  otherwise  containing  option  characters.  One or two colons may be postfixed to
              option characters:

              o      a single colon (:) indicates that the option requires an option value.

              o      a double colon (::) indicates that the option has an optional argument. With short  options
                     the  option  value  is  considered  absent unless it is attached to the short option (e.g.,
                     -tvalue). Long options optionally accepting arguments should always immediately be followed
                     by an assignment character (=), immediately followed by  the  option’s  value  (which  must
                     start  with  a  non-blank  character).  E.g.,  --value=  indicates  an absent option value,
                     --value=text indicates the option’s value equals text.  If an option value itself  contains
                     blanks,  it  must  be  surrounded  by  single  or  double  quotes (e.g., -t’this value’, or
                     --text=’this value’). The surrounding quotes are not part of the option’s value.

              When optstring’s first character is + then all non-specified  options  are  considered  arguments,
              appearing in the final arguments list at their current argument positions. E.g., when optstring is
              +ab and no long options are defined, then calling

                  prog -a -z -b -yvalue --long arg1 arg2

              results  in  the member argv returning a vector containing the elements -z, -yvalue, --long, arg1,
              and arg2. If optstring’s first character isn’t + and an undefined option is  encountered  then  an
              exception is thrown.

              The  fname argument is optional. If provided, a configuration file by the specified name is opened
              (and must exist); if omitted the ArgConfig is created without using a configuration file.  In  the
              latter  case  a  configuration  file  may  be specified later using the open member inherited from
              ConfigFile.

              The final three parameters are ConfigFile parameters, receiving the  shown  default  values.  This
              constructor  returns  a reference to the singleton object, allowing code initializing ArgConfig to
              use the initialized object immediately.

       o      FBB::ArgConfig &ArgConfig::initialize(int accept. char const *optstring, int  argc,  char  **argv,
              [std::string const &fname,] Comment cType = KeepComment, SearchCasing sType = SearchCaseSensitive,
              Indices iType = IgnoreIndices):
              Acts  like  the previous member, but in addition defines the parameter accept specifying an option
              character from where all subsequent arguments and options  are  considered  arguments.  To  ignore
              accept  the  value 0 (not the character ’0’) can be specified or an initialize members can be used
              that does not define an accept parameter.

              When arguments contain both an accept option and two consecutive dashes  then  the  first  one  is
              interpreted,  resulting  in  all  remaining argv elements being interpreted as mere arguments. For
              example, when specifying initialize(’t’, ...) and calling

                  prog one -ttwo -c -- three

              then the member argv returns a vector containing the elements one, -tttwo, -c, --, and three  (see
              also the member beyondDashes below).

       o      FBB::ArgConfig  &ArgConfig::initialize(char  const  *optstring, ArgConfig::LongOption const *const
              begin, ArgConfig::LongOption const *const end, int argc, char **argv, [std::string const  &fname,]
              Comment   cType   =  KeepComment,  SearchCasing  sType  =  SearchCaseSensitive,  Indices  iType  =
              IgnoreIndices):
              Acts like  the  first  ArgConfig::initialize  member,  but  in  addition  defines  two  parameters
              specifying  the  range  of  elements  of an array of ArgConfig::LongOption objects specifying long
              options. The parameter begin points to the first element of the range, the  parameter  end  points
              just beyond the last element of the range. E.g., after defining

                  FBB::ArgConfig::LongOption longOptions[] = { c1, c2, ..., cn };

              the arguments passed to begin and end could be specified as

                  initialize(..., longOptions, longOptions + size(longOptions), ...);

       o      FBB::ArgConfig  &ArgConfig::initialize(char accept, char const *optstring, LongOption const *const
              begin, LongOption const *const end, int argc, char **argv,  [std::string  const  &fname,]  Comment
              cType = KeepComment, SearchCasing sType = SearchCaseSensitive, Indices iType = IgnoreIndices):

              Acts  like  the previous ArgConfig::initialize member, but in addition defines an accept parameter
              as defined by the second ArgConfig::initialize member.

       o      FBB::ArgConfig &ArgConfig::instance():
              Once an ArgConfig::initialize member has been called this member can be called  from  anywhere  in
              the  program  (and  it  can  be  called  multiple times), returning a reference to the initialized
              ArgConfig object.

              If it is called before an ArgConfig::initialize member has been called an exception is thrown.

       o      FBB::ArgConfig &instance():
              Returns  the  instance  of  the  ArgConfig  object,   available   after   calling   one   of   the
              ArgConfig::initialize  members.   If  called before initialization, an FBB::Exception exception is
              thrown.  )

NON-STATIC MEMBER FUNCTIONS

       All public members of the Arg and ConfigFile classes are  also  supported  by  the  ArgConfig  class.  As
       several  Arg::option  members were reimplemented by ArgConfig all option members are discussed below. All
       other members inherit straight from the classes Arg and ConfigFile. Consult their man pages for details.

       o      size_t option(int option) const:
              Returns the number of times `option’ (or its long option synonym, if  defined)  was  specified  as
              command line option or as as a configuration file option.

       o      size_t option(std::string const &options) const:
              Returns  the  total  number  of  times any of the characters specified in the `options’ string (or
              their long option synonyms) was specified as command line option or as  as  a  configuration  file
              option.

       o      size_t option(string *value, int option) const:
              Returns the number of times the provided option (or its long option synonym) was present as either
              a  command line option or as a configuration file option. If the return value is non-zero then the
              value of the first occurrence of this option  (first  checking  the  command  line  options;  then
              checking  the configuration file) is stored in *value, which is left untouched if `option’ was not
              present. 0 may be specified for value if the option does not have a value or if the  value  should
              not be stored.

       o      size_t option(size_t idx, string *value, int option) const:
              This member acts identically to the Arg::option member having the identical prototype. It does not
              consider  the  configuration  file  but merely considers the command line arguments, returning the
              number of times the provided option (or its long option synonym) was present. If the return  value
              is  non-zero  then  the value of the idxth occurrence (0-based offset) of this option is stored in
              *value, which is left untouched if `option’ was not present or if idx is or exceeds the number  of
              specifications  of the provided option. 0 may be specified for value if the option does not have a
              value or if the value should not be stored.

       o      size_t option(size_t *idx, string *value, int option) const:
              This member acts identically to the Arg::option member having the identical prototype. It does not
              consider the configuration file, but merely considers the command line  arguments,  returning  the
              number  of times the provided option (or its long option synonym) was present. If the return value
              is non-zero then the offset (within the series of  option  specifications)  of  the  first  option
              having  a  non-empty option value is returned in *idx, while its option value is stored in *value.
              Both *value and *idx are left untouched if `option’ was not present. 0 may be specified for  value
              if the option does not have a value or if the value should not be stored.

       o      size_t option(string *value, char const *longOption) const:
              Returns  the number of times the specified long option (not having a single-character synonym) was
              present as either a command line option or in the configuration file. If  found,  then  the  value
              found  at the first occurrence of the option (first considering the command line options, then the
              configuration file) is stored in *value. The string pointed to by value is left untouched  if  the
              long  option  was not present. 0 may be specified for value if the option does not have a value or
              if the value should not be stored.

       o      size_t option(size_t idx, string *value, char const * longOption) const:
              This member acts identically to the Arg::option member having the identical prototype. It does not
              consider the configuration file, but merely considers the command line  arguments,  returning  the
              number  of  times the provided long option (not having a single-character synonym) was present. If
              the return value is non-zero then the value of the idxth occurrence (0-based offset) of this  long
              option  is  stored in *value, which is left untouched if the long option was not present or if idx
              is or exceeds the number of specifications of the provided long option. 0  may  be  specified  for
              value if the long option does not have a value or if the value should not be stored.

       o      size_t option(size_t *idx, string *value, int longOption) const:
              This member acts identically to the Arg::option member having the identical prototype. It does not
              consider  the  configuration  file, but merely considers the command line arguments, returning the
              number of times the provided long option (not having a single-character synonym) was  present.  If
              the   return  value  is  non-zero  then  the  offset  (within  the  series  of  this  long  option
              specifications) of the first long option having a non-empty option  value  is  returned  in  *idx,
              while its option value is stored in *value. Both *value and *idx are left untouched if long option
              was  not  present. 0 may be specified for value if the long option does not have a value or if the
              value should not be stored.

       When using the option members that don’t consider configuration files  use  the  beginEndRE  member  (cf.
       configfile(3obcat)) to retrieve long options that are specified in configuration files.

EXAMPLE

       #include <iostream>
       #include <string>

       #include <bobcat/argconfig>
       #include <bobcat/exception>

       using namespace std;
       using namespace FBB;

       ArgConfig::LongOption lo[] =
       {
           ArgConfig::LongOption{"option", ’o’},
           ArgConfig::LongOption{"value-option", ’v’}
       };

       class X
       {
           ArgConfig &d_arg;

           public:
               X();
               void function();
       };

       X::X()
       :
           d_arg(ArgConfig::instance())
       {}

       void X::function()
       {
           if (d_arg.nArgs() == 0)
               throw Exception() << "Provide the name of a config file as 1st arg";

           cout << "Counting " << d_arg.option(’o’) << " instances of -o or "
                                                                   "--option\n";

           d_arg.open(d_arg[0]);       // Now open the config file explicitly
                                   // (alternatively: use a constructor expecting
                                   // a file name)

           cout << "Counting " << d_arg.option(’o’) << " instances of -o or "
                                                                   "--option\n";

           string optval;
           size_t count = d_arg.option(&optval, ’v’);

           cout << "Counting " << count <<
                               " instances of -v or --value-option\n";
           if (count)
               cout << "Option value = " << optval << endl;
       }

       int main(int argc, char **argv)
       try
       {
           ArgConfig::initialize("ov:", lo, lo + 2, argc, argv);

           X x;
           x.function();
       }
       catch (Exception const &err)
       {
           cout << "Terminating " << err.what() << endl;
           return 1;
       }

FILES

       bobcat/argconfig - defines the class interface

SEE ALSO

       arg(3bobcat), configfile(3obcat), bobcat(7)

BUGS

       None Reported.

BOBCAT PROJECT FILES

       o      https://fbb-git.gitlab.io/bobcat/: gitlab project page;

       o      bobcat_6.04.00-x.dsc: detached signature;

       o      bobcat_6.04.00-x.tar.gz: source archive;

       o      bobcat_6.04.00-x_i386.changes: change log;

       o      libbobcat1_6.04.00-x_*.deb: debian package containing the libraries;

       o      libbobcat1-dev_6.04.00-x_*.deb: debian package containing the libraries, headers and manual pages;

BOBCAT

       Bobcat is an acronym of `Brokken’s Own Base Classes And Templates’.

COPYRIGHT

       This is free software, distributed under the terms of the GNU General Public License (GPL).

AUTHOR

       Frank B. Brokken (f.b.brokken@rug.nl).

libbobcat-dev_6.04.00                               2005-2023                            FBB::ArgConfig(3bobcat)