casa  5.7.0-16
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Static Public Member Functions | List of all members
option::Arg Struct Reference

Functions for checking the validity of option arguments. More...

#include <optionparser.h>

Inheritance diagram for option::Arg:
alma::AlmaArg

Static Public Member Functions

static ArgStatus None (const Option &, bool)
 ! More...
 
static ArgStatus Optional (const Option &option, bool)
 ! More...
 

Detailed Description

Functions for checking the validity of option arguments.

Every Option has such a function assigned in its Descriptor.

* Descriptor usage[] = { {UNKNOWN, 0, "", "", Arg::None, ""}, ... };
*

A CheckArg function has the following signature:

ArgStatus CheckArg(const Option& option, bool msg);

It is used to check if a potential argument would be acceptable for the option. It will even be called if there is no argument. In that case option.arg will be NULL.

If msg is true and the function determines that an argument is not acceptable and that this is a fatal error, it should output a message to the user before returning ARG_ILLEGAL. If msg is false the function should remain silent (or you will get duplicate messages).

See ArgStatus for the meaning of the return values.

While you can provide your own functions, often the following pre-defined checks (which never return ARG_ILLEGAL) will suffice:

The following example code can serve as starting place for writing your own more complex CheckArg functions:

* struct Arg: public option::Arg
* {
* static void printError(const char* msg1, const option::Option& opt, const char* msg2)
* {
* fprintf(stderr, "ERROR: %s", msg1);
* fwrite(opt.name, opt.namelen, 1, stderr);
* fprintf(stderr, "%s", msg2);
* }
*
* static option::ArgStatus Unknown(const option::Option& option, bool msg)
* {
* if (msg) printError("Unknown option '", option, "'\n");
* }
*
* static option::ArgStatus Required(const option::Option& option, bool msg)
* {
* if (option.arg != 0)
* return option::ARG_OK;
*
* if (msg) printError("Option '", option, "' requires an argument\n");
* }
*
* static option::ArgStatus NonEmpty(const option::Option& option, bool msg)
* {
* if (option.arg != 0 && option.arg[0] != 0)
* return option::ARG_OK;
*
* if (msg) printError("Option '", option, "' requires a non-empty argument\n");
* }
*
* static option::ArgStatus Numeric(const option::Option& option, bool msg)
* {
* char* endptr = 0;
* if (option.arg != 0 && strtol(option.arg, &endptr, 10)){};
* if (endptr != option.arg && *endptr == 0)
* return option::ARG_OK;
*
* if (msg) printError("Option '", option, "' requires a numeric argument\n");
* }
* };
*

Definition at line 923 of file optionparser.h.

Member Function Documentation

static ArgStatus option::Arg::None ( const Option ,
bool   
)
inlinestatic

!

For options that don't take an argument: Returns ARG_NONE.

Definition at line 926 of file optionparser.h.

References option::ARG_NONE.

static ArgStatus option::Arg::Optional ( const Option option,
bool   
)
inlinestatic

!

Returns ARG_OK if the argument is attached and ARG_IGNORE otherwise.

Definition at line 932 of file optionparser.h.

References option::Option::arg, option::ARG_IGNORE, option::ARG_OK, option::Option::name, and option::Option::namelen.


The documentation for this struct was generated from the following file: