WvStreams
wvargs.h
00001 /* -*- Mode: C++ -*-
00002  *   Copyright (C) 2004-2005 Net Integration Technologies, Inc.
00003  *
00004  * WvStreams interface for command-line argument processing
00005  */
00006 #ifndef __WVARGS_H
00007 #define __WVARGS_H
00008 
00009 #include "wvstring.h"
00010 #include "wvstringlist.h"
00011 #include "wvtr1.h"
00012 
00013 class WvArgsOption;
00014 class WvArgsData;
00015 
00061 class WvArgs
00062 {
00063 public:
00064 
00069     typedef wv::function<bool(void*)> NoArgCallback;
00074     typedef wv::function<bool(WvStringParm, void*)> ArgCallback;
00075 
00076 private:
00077 
00078     WvArgsData *data;
00079     WvString args_doc;
00080     WvString version;
00081     WvString email;
00082     WvString header;
00083     WvString footer;
00084 
00085 public:
00086 
00087     WvArgs();
00088     ~WvArgs();
00089 
00096     bool process(int argc, char **argv,
00097                  WvStringList *remaining_args = NULL);
00098 
00100     void set_version(WvStringParm version);
00101 
00103     void set_email(WvStringParm email);
00104 
00106     void set_help_header(WvStringParm header);
00107 
00109     void set_help_footer(WvStringParm footer);
00110 
00115     void print_usage(int argc, char **argv);
00119     void print_help(int argc, char **argv);
00120 
00134     void add_set_bool_option(char short_option, WvStringParm long_option,
00135                              WvStringParm desc, bool &val);
00149     void add_reset_bool_option(char short_option, WvStringParm long_option,
00150                                WvStringParm desc, bool &val);
00164     void add_flip_bool_option(char short_option, WvStringParm long_option,
00165                               WvStringParm desc, bool &val);
00166 
00180     void add_option(char short_option, WvStringParm long_option,
00181                     WvStringParm desc, WvStringParm arg_desc, int &val);
00195     void add_option(char short_option, WvStringParm long_option,
00196                     WvStringParm desc, WvStringParm arg_desc, long &val);
00210     void add_option(char short_option, WvStringParm long_option,
00211                     WvStringParm desc, WvStringParm arg_desc, float &val);
00225     void add_option(char short_option, WvStringParm long_option,
00226                     WvStringParm desc, WvStringParm arg_desc, double &val);
00240     void add_option(char short_option, WvStringParm long_option,
00241                     WvStringParm desc, WvStringParm arg_desc, WvString &val);
00256     void add_option(char short_option, WvStringParm long_option,
00257                     WvStringParm desc, WvStringParm arg_desc,
00258                     WvStringList &val);
00273     void add_option(char short_option, WvStringParm long_option,
00274                     WvStringParm desc, NoArgCallback cb, void *ud = NULL);
00291     void add_option(char short_option, WvStringParm long_option,
00292                     WvStringParm desc, WvStringParm arg_desc,
00293                     ArgCallback cb, void *ud = NULL);
00294 
00301     void add_required_arg(WvStringParm desc, bool multiple = false);
00307     void add_optional_arg(WvStringParm desc, bool multiple = false);
00308 
00315     void remove_option(char short_option);
00322     void remove_option(WvStringParm long_option);
00323 
00327     void remove_all_options();
00331     void zap()
00332     {
00333         remove_all_options();
00334     }
00335 
00338     enum flags_t
00339     {
00340         NO_EXIT_ON_ERRORS,      // Do not exit when an error is encountered
00341         FLAGS_SIZE              // Number of flags that exist
00342     };
00343 
00347     bool get_flag(const flags_t flag) const;
00348     void set_flag(const flags_t flag, const bool value);
00349 
00350 };
00351 
00352 #endif // __WVARGS_H