#include <ace/Arg_Shifter.h>
class ACE_Arg_Shifter {
public:
ACE_Arg_Shifter (int& argc, char** argv, char** temp = 0);
~ACE_Arg_Shifter (void);
char* get_current (void) const;
char* get_the_parameter (const char* flag);
int cur_arg_strncasecmp (const char* flag);
int consume_arg (int number = 1);
int ignore_arg (int number = 1);
int is_anything_left (void) const;
int is_option_next (void) const;
int is_parameter_next (void) const;
int num_ignored_args (void) const;
private:
int& argc_;
int total_size_;
char** temp_;
char** argv_;
int current_index_;
int back_;
int front_;
};
ACE_Arg_Shifter
copies the pointers of the argv vector
into a temporary array. As the ACE_Arg_Shifter
iterates over
the temp, is places known arguments in the rear of the argv
and unknown ones in the beginning. So, after having visited
all the arguments in the temp vector, ACE_Arg_Shifter
has
placed all the unknown arguments in their original order at
the front of argv.
ACE_Arg_Shifter (int& argc, char** argv, char** temp = 0);
ACE_Arg_Shifter
to the vector over which to
iterate, also providing the temporary array if the client doesn't
want the arg_shifter to dynamically allocate its own. If internal
dynamic allocation fails, the ACE_Arg_Shifter
will set all the
indices to the end of the vector, forbidding iteration. Following
iteration over argv, the argc value will contain the number of
unconsumed arguments.
~ACE_Arg_Shifter (void);
char* get_current (void) const;
char* get_the_parameter (const char* flag);
flag
matches the current_arg of arg shifter
this method will attempt to return the associated
parameter value
Safe to call without checking that a current arg exists
In the following examples, a pointer to the char* "value" is ret
eg: main -foobar value, main -FooBar value main -FOOBARvalue
all of the above will all match the flag
== -FooBar
and will return a char* to "value"
main -foobar 4 would succeed and return a char* to "4" main -foobar -4 does not succeed (-4 is not a parameter) but instead, would return 0
0 is returned: If the current argument does not match flag If there is no parameter found after a 'matched' flag
If the flag is matched and the flag and paramter DO NOT RUN together, the flag is consumed, the parameter is returned, and the new current argument is the parameter value. ie '-foobarflag VALUE' leaves the new cur arg == "VALUE"
If the flag is matched and the flag and parameter RUN together '-foobarflagVALUE', the flag is NOT consumed and the cur arg is left pointing to the entire flag/value pair
int cur_arg_strncasecmp (const char* flag);
flag
------------------------------------------------------------
Case A: Perfect Match (case insensitive) 0 is returned.
ie: when current_arg = "-foobar" or "-FOOBAR" or "-fooBAR" this-cur_arg_strncasecmp ("-FooBar); will return 0
------------------------------------------------------------
Case B: Perfect Match (case insensitive) but the current_arg is longer than the flag. Returns a number equal to the index in the char* indicating the start of the extra characters
ie: when current_arg = "-foobar98023" this-cur_arg_strncasecmp ("-FooBar); will return 7
Notice: this number will always be 0
------------------------------------------------------------
Case C: If neither of Case A or B is met (no match) then -1 is returned
int consume_arg (int number = 1);
number
argument(s) by sticking them/it on the end of
the vector.
int ignore_arg (int number = 1);
number
arguments in the same relative order ahead of the
known arguemnts in the vector.
int is_anything_left (void) const;
int is_option_next (void) const;
int is_parameter_next (void) const;
int num_ignored_args (void) const;