WvStreams
|
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