00001
00002
00003
00004
00005
00006 #ifndef __WVARGS_H
00007 #define __WVARGS_H
00008
00009 #include "wvstring.h"
00010 #include "wvstringlist.h"
00011 #include "wvcallback.h"
00012 #include "wvvector.h"
00013
00014 class WvArgsOption;
00015 class WvArgsData;
00016
00062 class WvArgs
00063 {
00064 public:
00065
00070 typedef WvCallback<bool, void *> NoArgCallback;
00075 typedef WvCallback<bool, WvStringParm, void *> ArgCallback;
00076
00077 private:
00078
00079 WvArgsData *data;
00080 WvString args_doc;
00081 WvString version;
00082 WvString email;
00083 WvString header;
00084 WvString footer;
00085
00086 public:
00087
00088 WvArgs();
00089 ~WvArgs();
00090
00097 bool process(int argc, char **argv,
00098 WvStringList *remaining_args = NULL);
00099
00101 void set_version(WvStringParm version);
00102
00104 void set_email(WvStringParm email);
00105
00107 void set_help_header(WvStringParm header);
00108
00110 void set_help_footer(WvStringParm footer);
00111
00116 void print_usage(int argc, char **argv);
00120 void print_help(int argc, char **argv);
00121
00135 void add_set_bool_option(char short_option, WvStringParm long_option,
00136 WvStringParm desc, bool &val);
00150 void add_reset_bool_option(char short_option, WvStringParm long_option,
00151 WvStringParm desc, bool &val);
00165 void add_flip_bool_option(char short_option, WvStringParm long_option,
00166 WvStringParm desc, bool &val);
00167
00181 void add_option(char short_option, WvStringParm long_option,
00182 WvStringParm desc, WvStringParm arg_desc, int &val);
00196 void add_option(char short_option, WvStringParm long_option,
00197 WvStringParm desc, WvStringParm arg_desc, long &val);
00211 void add_option(char short_option, WvStringParm long_option,
00212 WvStringParm desc, WvStringParm arg_desc, float &val);
00226 void add_option(char short_option, WvStringParm long_option,
00227 WvStringParm desc, WvStringParm arg_desc, double &val);
00241 void add_option(char short_option, WvStringParm long_option,
00242 WvStringParm desc, WvStringParm arg_desc, WvString &val);
00257 void add_option(char short_option, WvStringParm long_option,
00258 WvStringParm desc, WvStringParm arg_desc,
00259 WvStringList &val);
00274 void add_option(char short_option, WvStringParm long_option,
00275 WvStringParm desc, NoArgCallback cb, void *ud = NULL);
00292 void add_option(char short_option, WvStringParm long_option,
00293 WvStringParm desc, WvStringParm arg_desc,
00294 ArgCallback cb, void *ud = NULL);
00295
00302 void add_required_arg(WvStringParm desc);
00308 void add_optional_arg(WvStringParm desc, bool multiple = false);
00309
00316 void remove_option(char short_option);
00323 void remove_option(WvStringParm long_option);
00324
00328 void remove_all_options();
00332 void zap()
00333 {
00334 remove_all_options();
00335 }
00336
00339 enum flags_t
00340 {
00341 NO_EXIT_ON_ERRORS,
00342 FLAGS_SIZE
00343 };
00344
00348 bool get_flag(const flags_t flag) const;
00349 void set_flag(const flags_t flag, const bool value);
00350
00351 };
00352
00353 #endif // __WVARGS_H