ConsoleRule.cpp

Go to the documentation of this file.
00001 ////////////////////////////////////////////////////////////////////////////////
00002 //    Scorched3D (c) 2000-2009
00003 //
00004 //    This file is part of Scorched3D.
00005 //
00006 //    Scorched3D is free software; you can redistribute it and/or modify
00007 //    it under the terms of the GNU General Public License as published by
00008 //    the Free Software Foundation; either version 2 of the License, or
00009 //    (at your option) any later version.
00010 //
00011 //    Scorched3D is distributed in the hope that it will be useful,
00012 //    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 //    GNU General Public License for more details.
00015 //
00016 //    You should have received a copy of the GNU General Public License
00017 //    along with Scorched3D; if not, write to the Free Software
00018 //    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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> &params,
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 &param = 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 &param = 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 &param = 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 &param = 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 &param1)
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 &param1, 
00217         const ConsoleRuleParam &param2)
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 &param1, 
00227         const ConsoleRuleParam &param2, 
00228         const ConsoleRuleParam &param3)
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 &param1, 
00239         const ConsoleRuleParam &param2, 
00240         const ConsoleRuleParam &param3, 
00241         const ConsoleRuleParam &param4)
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 &param1, 
00253         const ConsoleRuleParam &param2, 
00254         const ConsoleRuleParam &param3, 
00255         const ConsoleRuleParam &param4, 
00256         const ConsoleRuleParam &param5)
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 }

Generated on Mon Feb 16 15:14:37 2009 for Scorched3D by  doxygen 1.5.3