00001 #ifndef Impala_Core_Table_Criterion_h
00002 #define Impala_Core_Table_Criterion_h
00003
00004 #include "Basis/Quid.h"
00005
00006 namespace Impala
00007 {
00008 namespace Core
00009 {
00010 namespace Table
00011 {
00012
00013
00014 template <class T>
00015 class CriterionElement1Equals
00016 {
00017 public:
00018 typedef typename T::Col1ElemType ValType;
00019
00020 CriterionElement1Equals(ValType value)
00021 {
00022 mValue = value;
00023 }
00024
00025 bool Check(const typename T::Col1ElemType& e1,
00026 const typename T::Col2ElemType& e2,
00027 const typename T::Col3ElemType& e3,
00028 const typename T::Col4ElemType& e4,
00029 const typename T::Col5ElemType& e5,
00030 const typename T::Col6ElemType& e6,
00031 const typename T::Col7ElemType& e7,
00032 const typename T::Col8ElemType& e8,
00033 const typename T::Col9ElemType& e9)
00034 {
00035 return e1 == mValue;
00036 }
00037
00038 private:
00039 ValType mValue;
00040 };
00041
00042
00048 template <class T>
00049 class CriterionElement1InSet
00050 {
00051 public:
00052 typedef typename T::Col1ElemType ValType;
00053
00054 CriterionElement1InSet(TableTem<Column::ColumnTem<ValType> >* set)
00055 {
00056 mSet = set->GetColumn1();
00057 mEnd = set->Size();
00058 }
00059
00060 bool Check(const typename T::Col1ElemType& e1,
00061 const typename T::Col2ElemType& e2,
00062 const typename T::Col3ElemType& e3,
00063 const typename T::Col4ElemType& e4,
00064 const typename T::Col5ElemType& e5,
00065 const typename T::Col6ElemType& e6,
00066 const typename T::Col7ElemType& e7,
00067 const typename T::Col8ElemType& e8,
00068 const typename T::Col9ElemType& e9)
00069 {
00070 return Find(mSet,e1,0,mEnd) != mEnd;
00071 }
00072
00073 private:
00074 Column::ColumnTem<ValType>* mSet;
00075 int mEnd;
00076 };
00077
00078
00079 template <class T>
00080 class CriterionElement2Equals
00081 {
00082 public:
00083 typedef typename T::Col2ElemType ValType;
00084
00085 CriterionElement2Equals(ValType value)
00086 {
00087 mValue = value;
00088 }
00089
00090 bool Check(const typename T::Col1ElemType& e1,
00091 const typename T::Col2ElemType& e2,
00092 const typename T::Col3ElemType& e3,
00093 const typename T::Col4ElemType& e4,
00094 const typename T::Col5ElemType& e5,
00095 const typename T::Col6ElemType& e6,
00096 const typename T::Col7ElemType& e7,
00097 const typename T::Col8ElemType& e8,
00098 const typename T::Col9ElemType& e9)
00099 {
00100 return e2 == mValue;
00101 }
00102
00103 private:
00104 ValType mValue;
00105 };
00106
00107
00108 template <class T>
00109 class CriterionElement2NotEquals
00110 {
00111 public:
00112 typedef typename T::Col2ElemType ValType;
00113
00114 CriterionElement2NotEquals(ValType value)
00115 {
00116 mValue = value;
00117 }
00118
00119 bool Check(const typename T::Col1ElemType& e1,
00120 const typename T::Col2ElemType& e2,
00121 const typename T::Col3ElemType& e3,
00122 const typename T::Col4ElemType& e4,
00123 const typename T::Col5ElemType& e5,
00124 const typename T::Col6ElemType& e6,
00125 const typename T::Col7ElemType& e7,
00126 const typename T::Col8ElemType& e8,
00127 const typename T::Col9ElemType& e9)
00128 {
00129 return e2 != mValue;
00130 }
00131
00132 private:
00133 ValType mValue;
00134 };
00135
00136
00137 template <class T>
00138 class CriterionQuidObjectEquals
00139 {
00140 public:
00141 CriterionQuidObjectEquals(int value)
00142 {
00143 mValue = value;
00144 }
00145
00146 bool Check(const typename T::Col1ElemType& e1,
00147 const typename T::Col2ElemType& e2,
00148 const typename T::Col3ElemType& e3,
00149 const typename T::Col4ElemType& e4,
00150 const typename T::Col5ElemType& e5,
00151 const typename T::Col6ElemType& e6,
00152 const typename T::Col7ElemType& e7,
00153 const typename T::Col8ElemType& e8,
00154 const typename T::Col9ElemType& e9)
00155 {
00156 return QuidObject(e1) == mValue;
00157 }
00158
00159 private:
00160 int mValue;
00161 };
00162
00163
00164 template <class T>
00165 class CriterionQuidSetEquals
00166 {
00167 public:
00168 CriterionQuidSetEquals(int value)
00169 {
00170 mValue = value;
00171 }
00172
00173 bool Check(const typename T::Col1ElemType& e1,
00174 const typename T::Col2ElemType& e2,
00175 const typename T::Col3ElemType& e3,
00176 const typename T::Col4ElemType& e4,
00177 const typename T::Col5ElemType& e5,
00178 const typename T::Col6ElemType& e6,
00179 const typename T::Col7ElemType& e7,
00180 const typename T::Col8ElemType& e8,
00181 const typename T::Col9ElemType& e9)
00182 {
00183 return QuidSet(e1) == mValue;
00184 }
00185
00186 private:
00187 int mValue;
00188 };
00189
00190
00191 template <class T>
00192 class CriterionQuidInSet
00193 {
00194 public:
00195
00196 CriterionQuidInSet(QuidTable* set)
00197 {
00198 mSet = set;
00199 }
00200
00201 bool Check(const typename T::Col1ElemType& e1,
00202 const typename T::Col2ElemType& e2,
00203 const typename T::Col3ElemType& e3,
00204 const typename T::Col4ElemType& e4,
00205 const typename T::Col5ElemType& e5,
00206 const typename T::Col6ElemType& e6,
00207 const typename T::Col7ElemType& e7,
00208 const typename T::Col8ElemType& e8,
00209 const typename T::Col9ElemType& e9)
00210 {
00211 return Contains(mSet->GetColumn1(), e1);
00212 }
00213 private:
00214 QuidTable* mSet;
00215 };
00216
00217
00218 template <class T>
00219 class CriterionQuidObjectInSet
00220 {
00221 public:
00222
00223 CriterionQuidObjectInSet(std::vector<int> set)
00224 {
00225 mSet = set;
00226 }
00227
00228 bool Check(const typename T::Col1ElemType& e1,
00229 const typename T::Col2ElemType& e2,
00230 const typename T::Col3ElemType& e3,
00231 const typename T::Col4ElemType& e4,
00232 const typename T::Col5ElemType& e5,
00233 const typename T::Col6ElemType& e6,
00234 const typename T::Col7ElemType& e7,
00235 const typename T::Col8ElemType& e8,
00236 const typename T::Col9ElemType& e9)
00237 {
00238 int qObj = QuidObject(e1);
00239 return std::find(mSet.begin(), mSet.end(), qObj) != mSet.end();
00240 }
00241
00242 private:
00243
00244 std::vector<int> mSet;
00245 };
00246
00247
00250 template <class T>
00251 class CriterionQuidObjectMaxId
00252 {
00253 public:
00254
00255 CriterionQuidObjectMaxId(int maxId)
00256 {
00257 mMaxId = maxId;
00258 }
00259
00260 bool Check(const typename T::Col1ElemType& e1,
00261 const typename T::Col2ElemType& e2,
00262 const typename T::Col3ElemType& e3,
00263 const typename T::Col4ElemType& e4,
00264 const typename T::Col5ElemType& e5,
00265 const typename T::Col6ElemType& e6,
00266 const typename T::Col7ElemType& e7,
00267 const typename T::Col8ElemType& e8,
00268 const typename T::Col9ElemType& e9)
00269 {
00270 int qObj = QuidObject(e1);
00271 return qObj < mMaxId;
00272 }
00273
00274 private:
00275
00276 int mMaxId;
00277
00278 };
00279
00280
00283 template <class T>
00284 class CriterionQuidObjectMaxNumber
00285 {
00286 public:
00287
00288 CriterionQuidObjectMaxNumber(int maxNumber)
00289 {
00290 mMaxNumber = maxNumber;
00291 }
00292
00293 bool Check(const typename T::Col1ElemType& e1,
00294 const typename T::Col2ElemType& e2,
00295 const typename T::Col3ElemType& e3,
00296 const typename T::Col4ElemType& e4,
00297 const typename T::Col5ElemType& e5,
00298 const typename T::Col6ElemType& e6,
00299 const typename T::Col7ElemType& e7,
00300 const typename T::Col8ElemType& e8,
00301 const typename T::Col9ElemType& e9)
00302 {
00303 int qObj = QuidObject(e1);
00304 for (int i=0 ; i<mObjs.size() ; i++)
00305 if (qObj == mObjs[i])
00306 return true;
00307 if (mObjs.size() < mMaxNumber)
00308 {
00309 mObjs.push_back(qObj);
00310 return true;
00311 }
00312 return false;
00313 }
00314
00315 private:
00316
00317 int mMaxNumber;
00318 std::vector<int> mObjs;
00319
00320 };
00321
00322
00326 template <class T>
00327 class CriterionQuidObjectMaxNumberElement2
00328 {
00329 public:
00330 typedef typename T::Col2ElemType ValType;
00331
00332 CriterionQuidObjectMaxNumberElement2(ValType value, int maxNumber)
00333 {
00334 mValue = value;
00335 mMaxNumber = maxNumber;
00336 }
00337
00338 bool Check(const typename T::Col1ElemType& e1,
00339 const typename T::Col2ElemType& e2,
00340 const typename T::Col3ElemType& e3,
00341 const typename T::Col4ElemType& e4,
00342 const typename T::Col5ElemType& e5,
00343 const typename T::Col6ElemType& e6,
00344 const typename T::Col7ElemType& e7,
00345 const typename T::Col8ElemType& e8,
00346 const typename T::Col9ElemType& e9)
00347 {
00348 if (e2 != mValue)
00349 return true;
00350 if (mMaxNumber < 1)
00351 return false;
00352
00353 int qObj = QuidObject(e1);
00354 for (int i=0 ; i<mObjs.size() ; i++)
00355 {
00356 if (qObj == mObjs[i])
00357 {
00358 if (mNr[i] < mMaxNumber)
00359 {
00360 mNr[i]++;
00361 return true;
00362 }
00363 else
00364 {
00365 return false;
00366 }
00367 }
00368 }
00369 mObjs.push_back(qObj);
00370 mNr.push_back(1);
00371 return true;
00372 }
00373
00374 private:
00375
00376 ValType mValue;
00377 int mMaxNumber;
00378 std::vector<int> mObjs;
00379 std::vector<int> mNr;
00380
00381 };
00382
00383
00384 }
00385 }
00386 }
00387
00388 #endif