00001
00002
00003
00004
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,
00341 FLAGS_SIZE
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