00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <console/ConsoleRule.h>
00022 #include <common/Defines.h>
00023 #include <string.h>
00024
00025 ConsoleRuleParam::ConsoleRuleParam(const std::string &constant) :
00026 name_(constant), type_(ConsoleRuleTypeNone)
00027 {
00028 }
00029
00030 ConsoleRuleParam::ConsoleRuleParam(const std::string &name, ConsoleRuleType type) :
00031 name_(name), type_(type)
00032 {
00033 }
00034
00035 ConsoleRule::ConsoleRule(const char *name,
00036 const std::vector<ConsoleRuleParam> ¶ms,
00037 unsigned int userData) :
00038 name_(name), params_(params),
00039 userData_(userData)
00040 {
00041
00042 }
00043
00044 ConsoleRule::~ConsoleRule()
00045 {
00046
00047 }
00048
00049 std::string ConsoleRule::toString()
00050 {
00051 std::string result;
00052 result.append(getName());
00053 for (int p=0; p<(int) params_.size(); p++)
00054 {
00055 ConsoleRuleParam ¶m = params_[p];
00056 result.append(" ");
00057 switch (param.getType())
00058 {
00059 case ConsoleRuleTypeBoolean:
00060 result.append("<on|off>");
00061 break;
00062 case ConsoleRuleTypeNumber:
00063 result.append("<number>");
00064 break;
00065 case ConsoleRuleTypeString:
00066 result.append("<").append(param.getName()).append(">");
00067 break;
00068 case ConsoleRuleTypeNone:
00069 result.append(param.getName());
00070 break;
00071 }
00072 }
00073 return result;
00074 }
00075
00076 std::string ConsoleRule::toString(std::vector<ConsoleRuleValue> &values)
00077 {
00078 std::string result;
00079 result.append(getName()).append(" ");
00080 for (int p=1; p<(int) values.size(); p++)
00081 {
00082 ConsoleRuleParam ¶m = params_[p - 1];
00083 ConsoleRuleValue &value = values[p];
00084 switch (param.getType())
00085 {
00086 case ConsoleRuleTypeBoolean:
00087 result.append(value.valueString.c_str());
00088 break;
00089 case ConsoleRuleTypeNumber:
00090 result.append(value.valueString.c_str());
00091 break;
00092 case ConsoleRuleTypeString:
00093 result.append(value.valueString.c_str());
00094 break;
00095 case ConsoleRuleTypeNone:
00096 result.append(param.getName());
00097 break;
00098 }
00099 result.append(" ");
00100 }
00101 return result;
00102 }
00103
00104 std::string ConsoleRule::valuesToString(std::vector<ConsoleRuleValue> &values)
00105 {
00106 if (values.empty()) return "";
00107
00108 std::string result;
00109 result.append(values[0].valueString);
00110 for (int p=1; p<(int) values.size(); p++)
00111 {
00112 ConsoleRuleValue &value = values[p];
00113 result.append(" ");
00114 switch (value.type)
00115 {
00116 case ConsoleRuleTypeBoolean:
00117 result.append("<on|off>");
00118 break;
00119 case ConsoleRuleTypeNumber:
00120 result.append("<number>");
00121 break;
00122 case ConsoleRuleTypeString:
00123 result.append("<string>");
00124 break;
00125 case ConsoleRuleTypeNone:
00126 result.append(value.valueString);
00127 break;
00128 }
00129 }
00130 return result;
00131 }
00132
00133 bool ConsoleRule::matchesExactParams(std::vector<ConsoleRuleValue> &values)
00134 {
00135 if (values.size() != params_.size() + 1) return false;
00136
00137 for (int v=1; v<(int) values.size(); v++)
00138 {
00139 ConsoleRuleParam ¶m = params_[v-1];
00140 ConsoleRuleValue &value = values[v];
00141
00142 switch (param.getType())
00143 {
00144 case ConsoleRuleTypeNone:
00145 if (0 != stricmp(param.getName(), value.valueString.c_str())) return false;
00146 break;
00147 case ConsoleRuleTypeString:
00148 break;
00149 case ConsoleRuleTypeBoolean:
00150 if (value.type != ConsoleRuleTypeBoolean) return false;
00151 break;
00152 case ConsoleRuleTypeNumber:
00153 if (value.type != ConsoleRuleTypeNumber) return false;
00154 break;
00155 }
00156 }
00157
00158 return true;
00159 }
00160
00161 bool ConsoleRule::matchesPartialParams(std::vector<ConsoleRuleValue> &values)
00162 {
00163 if (values.size() > params_.size() + 1) return false;
00164
00165 for (int v=1; v<(int) values.size(); v++)
00166 {
00167 ConsoleRuleParam ¶m = params_[v-1];
00168 ConsoleRuleValue &value = values[v];
00169
00170 switch (param.getType())
00171 {
00172 case ConsoleRuleTypeNone:
00173 if (v == int(values.size()) - 1 &&
00174 value.valueString.length() < strlen(param.getName()))
00175 {
00176 if (0 != _strnicmp(param.getName(),
00177 value.valueString.c_str(), value.valueString.length())) return false;
00178 }
00179 else
00180 {
00181 if (0 != stricmp(param.getName(),
00182 value.valueString.c_str())) return false;
00183 }
00184 break;
00185 case ConsoleRuleTypeString:
00186 break;
00187 case ConsoleRuleTypeBoolean:
00188 if (value.valueString.length() == 1 &&
00189 0 != _strnicmp(value.valueString.c_str(), "o", 1)) return false;
00190 else if (value.valueString.length() == 2 &&
00191 (0 != _strnicmp(value.valueString.c_str(), "on", 2) &&
00192 0 != _strnicmp(value.valueString.c_str(), "of", 2))) return false;
00193 else if (value.valueString.length() == 3 &&
00194 0 != _strnicmp(value.valueString.c_str(), "off", 3)) return false;
00195 else if (value.valueString.length() > 3) return false;
00196 return true;
00197 break;
00198 case ConsoleRuleTypeNumber:
00199 if (value.type != ConsoleRuleTypeNumber) return false;
00200 break;
00201 }
00202 }
00203
00204 return true;
00205 }
00206
00207 std::vector<ConsoleRuleParam> ConsoleUtil::formParams(
00208 const ConsoleRuleParam ¶m1)
00209 {
00210 std::vector<ConsoleRuleParam> result;
00211 result.push_back(param1);
00212 return result;
00213 }
00214
00215 std::vector<ConsoleRuleParam> ConsoleUtil::formParams(
00216 const ConsoleRuleParam ¶m1,
00217 const ConsoleRuleParam ¶m2)
00218 {
00219 std::vector<ConsoleRuleParam> result;
00220 result.push_back(param1);
00221 result.push_back(param2);
00222 return result;
00223 }
00224
00225 std::vector<ConsoleRuleParam> ConsoleUtil::formParams(
00226 const ConsoleRuleParam ¶m1,
00227 const ConsoleRuleParam ¶m2,
00228 const ConsoleRuleParam ¶m3)
00229 {
00230 std::vector<ConsoleRuleParam> result;
00231 result.push_back(param1);
00232 result.push_back(param2);
00233 result.push_back(param3);
00234 return result;
00235 }
00236
00237 std::vector<ConsoleRuleParam> ConsoleUtil::formParams(
00238 const ConsoleRuleParam ¶m1,
00239 const ConsoleRuleParam ¶m2,
00240 const ConsoleRuleParam ¶m3,
00241 const ConsoleRuleParam ¶m4)
00242 {
00243 std::vector<ConsoleRuleParam> result;
00244 result.push_back(param1);
00245 result.push_back(param2);
00246 result.push_back(param3);
00247 result.push_back(param4);
00248 return result;
00249 }
00250
00251 std::vector<ConsoleRuleParam> ConsoleUtil::formParams(
00252 const ConsoleRuleParam ¶m1,
00253 const ConsoleRuleParam ¶m2,
00254 const ConsoleRuleParam ¶m3,
00255 const ConsoleRuleParam ¶m4,
00256 const ConsoleRuleParam ¶m5)
00257 {
00258 std::vector<ConsoleRuleParam> result;
00259 result.push_back(param1);
00260 result.push_back(param2);
00261 result.push_back(param3);
00262 result.push_back(param4);
00263 result.push_back(param5);
00264 return result;
00265 }