Home || Visual Search || Applications || Architecture || Important Messages || OGL || Src

Criterion.h

Go to the documentation of this file.
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 } // namespace Table
00385 } // namespace Core
00386 } // namespace Impala
00387 
00388 #endif

Generated on Thu Jan 13 09:04:37 2011 for ImpalaSrc by  doxygen 1.5.1