incron
0.5.10
|
00001 00003 00023 #ifndef APPARGS_H_ 00024 #define APPARGS_H_ 00025 00026 #include <cstring> 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 ///< value count has no limit 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 /*APPARGS_H_*/