00001
00003
00023 #ifndef APPARGS_H_
00024 #define APPARGS_H_
00025
00026 #include <string>
00027 #include <map>
00028 #include <deque>
00029
00030
00031
00033 typedef enum
00034 {
00035 AAT_NO_VALUE,
00036 AAT_OPTIONAL_VALUE,
00037 AAT_MANDATORY_VALUE
00038 } AppArgType_t;
00039
00040
00041 #define APPARGS_NOLIMIT 0x7fffffff
00042
00044 typedef struct
00045 {
00046 AppArgType_t type;
00047 bool mand;
00048 bool found;
00049 std::string val;
00050 bool hasVal;
00051 } AppArgOption_t;
00052
00053
00055 typedef std::map<std::string, AppArgOption_t*> AA_LONG_MAP;
00056
00058 typedef std::map<char, AppArgOption_t*> AA_SHORT_MAP;
00059
00061 typedef std::deque<std::string> AA_VAL_LIST;
00062
00063
00065
00088 class AppArgs
00089 {
00090 public:
00092
00096 static void Init(size_t valMinCnt = 0, size_t valMaxCnt = APPARGS_NOLIMIT);
00097
00099
00103 static void Destroy();
00104
00106
00112 static void Parse(int argc, const char* const* argv);
00113
00115
00124 static bool IsValid();
00125
00127
00131 static bool ExistsOption(const std::string& rArg);
00132
00134
00139 static bool GetOption(const std::string& rArg, std::string& rVal);
00140
00142
00153 static bool AddOption(const std::string& rName, char cShort, AppArgType_t type, bool fMandatory);
00154
00156
00159 static size_t GetValueCount();
00160
00162
00167 static bool GetValue(size_t index, std::string& rVal);
00168
00170
00173 static void Dump();
00174
00175 protected:
00177
00181 static bool IsOption(const char* pchStr);
00182
00184
00191 static bool IsLongOption(const char* pchStr);
00192
00194
00201 static bool ParseLong(const char* pchStr, std::string& rName, std::string& rVal, bool& rfHasVal);
00202
00204
00212 static void ParseShort(const char* pchStr, char& rcName, std::string& rVal, bool& rfHasVal);
00213
00215
00220 static void DumpOption(const std::string& rName, char cShort, AppArgOption_t* pOpt);
00221
00222
00223 private:
00224 static size_t s_minCnt;
00225 static size_t s_maxCnt;
00226
00227 static AA_LONG_MAP s_longMap;
00228 static AA_SHORT_MAP s_shortMap;
00229 static AA_VAL_LIST s_valList;
00230
00231 };
00232
00233
00234 #endif