00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef INCLUDE_RSRC_PARSER_RULE
00012 #define INCLUDE_RSRC_PARSER_RULE
00013
00014 #include "../Tools/Tools.h"
00015 #include <vector>
00016 #include <string>
00017
00018 using namespace std;
00019
00020
00021
00022
00023
00024 class ParserRuleData
00025 {
00026 public :
00027 string label;
00028 string data;
00029
00030
00031
00032
00033
00034 ParserRuleData(const char *pLabel, const char *pData)
00035 {
00036 label = pLabel;
00037 data = pData;
00038 };
00039 };
00040
00041
00042
00043
00044 template<class T>
00045 class ParserRuleParameter
00046 {
00047 private :
00048 std::vector<ParserRuleData *> parameters;
00049 T *obj;
00050 char none[1];
00051
00052 public :
00053
00054
00055 inline ParserRuleParameter(T *pObj)
00056 {
00057 obj = pObj;
00058 *none = '\0';
00059 };
00060
00061
00062
00063 inline ~ParserRuleParameter()
00064 {
00065 unsigned int i;
00066
00067 for(i = 0; i < parameters.size(); i++)
00068 delete parameters[i];
00069 parameters.clear();
00070 };
00071
00072
00073
00074
00075
00076
00077 inline void Add(const char *pLabel, const char *pData)
00078 {
00079 parameters.push_back(new ParserRuleData(pLabel, pData));
00080 };
00081
00082
00083
00084
00085
00086
00087 inline const char *Get(const char *pLabel)
00088 {
00089 unsigned int i;
00090
00091 for(i = 0; i < parameters.size(); i++)
00092 if(parameters[i]->label.compare(pLabel) == 0)
00093 return parameters[i]->data.data();
00094
00095 return none;
00096 };
00097
00098
00099
00100
00101
00102
00103 inline unsigned int GetSize(const char *pLabel)
00104 {
00105 unsigned int i;
00106
00107 for(i = 0; i < parameters.size(); i++)
00108 if(parameters[i]->label.compare(pLabel) == 0)
00109 return parameters[i]->data.size();
00110
00111 return 0;
00112 };
00113
00114
00115
00116
00117
00118
00119 inline int GetAsInt(const char *pLabel)
00120 {
00121 return atoi(Get(pLabel));
00122 };
00123
00124
00125
00126
00127
00128
00129 inline float GetAsFloat(const char *pLabel)
00130 {
00131 return atol(Get(pLabel));
00132 };
00133
00134
00135
00136
00137
00138
00139 inline char GetAsChar(const char *pLabel)
00140 {
00141 return *Get(pLabel);
00142 };
00143
00144
00145
00146
00147
00148 inline int GetNbParameter()
00149 {
00150 return parameters.size();
00151 };
00152
00153
00154
00155
00156
00157 inline T *GetObj()
00158 {
00159 return obj;
00160 };
00161 };
00162
00163
00164 #endif