00001 #ifndef Impala_Core_Feature_FeatureDefinition_h 00002 #define Impala_Core_Feature_FeatureDefinition_h 00003 00004 #include "Basis/StringList.h" 00005 #include "Core/Feature/FeatureParameter.h" 00006 00007 namespace Impala 00008 { 00009 namespace Core 00010 { 00011 namespace Feature 00012 { 00013 00014 00015 class FeatureDefinition 00016 { 00017 public: 00018 00019 FeatureDefinition() 00020 { 00021 mName = String("noName"); 00022 } 00023 00024 FeatureDefinition(CString definitionString) 00025 { 00026 StringList l(definitionString, '_'); 00027 StringListCI i = l.begin(); 00028 mName = *i; 00029 i++; 00030 while (i != l.end()) 00031 { 00032 String param = *i; 00033 i++; 00034 if (i != l.end()) 00035 { 00036 String val = *i; 00037 i++; 00038 AddParameter(param, val); 00039 } 00040 } 00041 } 00042 00043 bool 00044 Empty() const 00045 { 00046 return ((mName == "noName") && (mParams.size() == 0)); 00047 } 00048 00049 String 00050 GetName() const 00051 { 00052 return mName; 00053 } 00054 00055 String 00056 AsString() const 00057 { 00058 String res = mName; 00059 for (int i=0 ; i<mParams.size() ; i++) 00060 res += String("_") + mParams[i].GetName() + "_" 00061 + mParams[i].GetValue(); 00062 return res; 00063 } 00064 00065 int 00066 GetNrParameters() const 00067 { 00068 return mParams.size(); 00069 } 00070 00071 FeatureParameter 00072 GetParameter(int i) const 00073 { 00074 return mParams[i]; 00075 } 00076 00077 String 00078 GetParameterValue(CString parameterName) const 00079 { 00080 for (int i=0 ; i<mParams.size() ; i++) 00081 if (mParams[i].GetName() == parameterName) 00082 return mParams[i].GetValue(); 00083 return ""; 00084 } 00085 00086 String 00087 GetParameterValue(int i) const 00088 { 00089 if(i<mParams.size() && i>=0) 00090 return mParams[i].GetValue(); 00091 return ""; 00092 } 00093 00094 void 00095 AddParameter(FeatureParameter p) 00096 { 00097 for (int i=0 ; i<mParams.size() ; i++) 00098 if (mParams[i].GetName() == p.GetName()) 00099 { 00100 mParams[i] = p; 00101 return; 00102 } 00103 mParams.push_back(p); 00104 } 00105 00106 template <class C> 00107 void 00108 AddParameter(CString name, C value) 00109 { 00110 FeatureParameter p(name, MakeString(value)); 00111 AddParameter(p); 00112 } 00113 00114 bool 00115 operator==(const FeatureDefinition& def) const 00116 { 00117 if (mName != def.mName) 00118 return false; 00119 if (mParams.size() != def.mParams.size()) 00120 return false; 00121 for (int i=0 ; i<mParams.size() ; i++) 00122 if (mParams[i] != def.mParams[i]) 00123 return false; 00124 return true; 00125 } 00126 00127 private: 00128 00129 String mName; 00130 std::vector<FeatureParameter> mParams; 00131 00132 }; 00133 00134 } // namespace Feature 00135 } // namespace Core 00136 } // namespace Impala 00137 00138 #endif