00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #if !defined(AFX_ConsoleRULE_H__7A8C972C_069D_44F7_A604_A8A8D1B4773A__INCLUDED_)
00022 #define AFX_ConsoleRULE_H__7A8C972C_069D_44F7_A604_A8A8D1B4773A__INCLUDED_
00023
00024 #include <string>
00025 #include <vector>
00026 #include <map>
00027
00028 enum ConsoleRuleType
00029 {
00030 ConsoleRuleTypeNone = 0,
00031 ConsoleRuleTypeBoolean,
00032 ConsoleRuleTypeNumber,
00033 ConsoleRuleTypeString
00034 };
00035
00036 struct ConsoleRuleValue
00037 {
00038 int position;
00039
00040 std::string valueString;
00041 bool valueBool;
00042 float valueNumber;
00043
00044 ConsoleRuleType type;
00045 };
00046
00047 class ConsoleRuleParam
00048 {
00049 public:
00050 ConsoleRuleParam(const std::string &constant);
00051 ConsoleRuleParam(const std::string &name, ConsoleRuleType type);
00052
00053 const char *getName() { return name_.c_str(); }
00054 ConsoleRuleType getType() { return type_; }
00055
00056 private:
00057 std::string name_;
00058 ConsoleRuleType type_;
00059 };
00060
00061 class Console;
00062 class ConsoleRule
00063 {
00064 public:
00065 ConsoleRule(const char *name,
00066 const std::vector<ConsoleRuleParam> ¶ms,
00067 unsigned int userData = 0);
00068 virtual ~ConsoleRule();
00069
00070 virtual void runRule(
00071 Console *console,
00072 const char *wholeLine,
00073 std::vector<ConsoleRuleValue> &values) = 0;
00074
00075 std::string toString();
00076 std::string toString(std::vector<ConsoleRuleValue> &values);
00077 static std::string valuesToString(std::vector<ConsoleRuleValue> &values);
00078
00079 const char *getName() { return name_.c_str(); }
00080 std::vector<ConsoleRuleParam> &getParams() { return params_; }
00081 unsigned int getUserData() { return userData_; }
00082
00083 bool matchesPartialParams(std::vector<ConsoleRuleValue> &values);
00084 bool matchesExactParams(std::vector<ConsoleRuleValue> &values);
00085 protected:
00086 std::string name_;
00087 std::vector<ConsoleRuleParam> params_;
00088 unsigned int userData_;
00089
00090 };
00091
00092 class ConsoleUtil
00093 {
00094 public:
00095 static std::vector<ConsoleRuleParam> formParams(
00096 const ConsoleRuleParam ¶m1);
00097 static std::vector<ConsoleRuleParam> formParams(
00098 const ConsoleRuleParam ¶m1,
00099 const ConsoleRuleParam ¶m2);
00100 static std::vector<ConsoleRuleParam> formParams(
00101 const ConsoleRuleParam ¶m1,
00102 const ConsoleRuleParam ¶m2,
00103 const ConsoleRuleParam ¶m3);
00104 static std::vector<ConsoleRuleParam> formParams(
00105 const ConsoleRuleParam ¶m1,
00106 const ConsoleRuleParam ¶m2,
00107 const ConsoleRuleParam ¶m3,
00108 const ConsoleRuleParam ¶m4);
00109 static std::vector<ConsoleRuleParam> formParams(
00110 const ConsoleRuleParam ¶m1,
00111 const ConsoleRuleParam ¶m2,
00112 const ConsoleRuleParam ¶m3,
00113 const ConsoleRuleParam ¶m4,
00114 const ConsoleRuleParam ¶m5);
00115 };
00116
00117 #endif // !defined(AFX_ConsoleRULE_H__7A8C972C_069D_44F7_A604_A8A8D1B4773A__INCLUDED_)