Home || Architecture || Video Search || Visual Search || Scripts || Applications || 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 CriterionQuidInSet
00166 {
00167 public:
00168 
00169     CriterionQuidInSet(QuidTable* set)
00170     {
00171         mSet = set;
00172     }
00173 
00174     bool Check(const typename T::Col1ElemType& e1,
00175                const typename T::Col2ElemType& e2,
00176                const typename T::Col3ElemType& e3,
00177                const typename T::Col4ElemType& e4,
00178                const typename T::Col5ElemType& e5,
00179                const typename T::Col6ElemType& e6,
00180                const typename T::Col7ElemType& e7,
00181                const typename T::Col8ElemType& e8,
00182                const typename T::Col9ElemType& e9)
00183     {
00184         return Contains(mSet->GetColumn1(), e1);
00185     }
00186 private:
00187     QuidTable* mSet;
00188 };
00189 
00190 
00191 template <class T> 
00192 class CriterionQuidObjectInSet
00193 {
00194 public:
00195 
00196     CriterionQuidObjectInSet(std::vector<int> 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         int qObj = QuidObject(e1);
00212         return std::find(mSet.begin(), mSet.end(), qObj) != mSet.end();
00213     }
00214 
00215 private:
00216 
00217     std::vector<int> mSet;
00218 };
00219 
00220 
00223 template <class T> 
00224 class CriterionQuidObjectMaxId
00225 {
00226 public:
00227 
00228     CriterionQuidObjectMaxId(int maxId)
00229     {
00230         mMaxId = maxId;
00231     }
00232 
00233     bool Check(const typename T::Col1ElemType& e1,
00234                const typename T::Col2ElemType& e2,
00235                const typename T::Col3ElemType& e3,
00236                const typename T::Col4ElemType& e4,
00237                const typename T::Col5ElemType& e5,
00238                const typename T::Col6ElemType& e6,
00239                const typename T::Col7ElemType& e7,
00240                const typename T::Col8ElemType& e8,
00241                const typename T::Col9ElemType& e9)
00242     {
00243         int qObj = QuidObject(e1);
00244         return qObj < mMaxId;
00245     }
00246 
00247 private:
00248 
00249     int mMaxId;
00250 
00251 };
00252 
00253 
00256 template <class T> 
00257 class CriterionQuidObjectMaxNumber
00258 {
00259 public:
00260 
00261     CriterionQuidObjectMaxNumber(int maxNumber)
00262     {
00263         mMaxNumber = maxNumber;
00264     }
00265 
00266     bool Check(const typename T::Col1ElemType& e1,
00267                const typename T::Col2ElemType& e2,
00268                const typename T::Col3ElemType& e3,
00269                const typename T::Col4ElemType& e4,
00270                const typename T::Col5ElemType& e5,
00271                const typename T::Col6ElemType& e6,
00272                const typename T::Col7ElemType& e7,
00273                const typename T::Col8ElemType& e8,
00274                const typename T::Col9ElemType& e9)
00275     {
00276         int qObj = QuidObject(e1);
00277         for (int i=0 ; i<mObjs.size() ; i++)
00278             if (qObj == mObjs[i])
00279                 return true;
00280         if (mObjs.size() < mMaxNumber)
00281         {
00282             mObjs.push_back(qObj);
00283             return true;
00284         }
00285         return false;
00286     }
00287 
00288 private:
00289 
00290     int mMaxNumber;
00291     std::vector<int> mObjs;
00292 
00293 };
00294 
00295 
00299 template <class T> 
00300 class CriterionQuidObjectMaxNumberElement2
00301 {
00302 public:
00303     typedef typename T::Col2ElemType ValType;
00304 
00305     CriterionQuidObjectMaxNumberElement2(ValType value, int maxNumber)
00306     {
00307         mValue = value;
00308         mMaxNumber = maxNumber;
00309     }
00310 
00311     bool Check(const typename T::Col1ElemType& e1,
00312                const typename T::Col2ElemType& e2,
00313                const typename T::Col3ElemType& e3,
00314                const typename T::Col4ElemType& e4,
00315                const typename T::Col5ElemType& e5,
00316                const typename T::Col6ElemType& e6,
00317                const typename T::Col7ElemType& e7,
00318                const typename T::Col8ElemType& e8,
00319                const typename T::Col9ElemType& e9)
00320     {
00321         if (e2 != mValue)
00322             return true;
00323         if (mMaxNumber < 1)
00324             return false;
00325 
00326         int qObj = QuidObject(e1);
00327         for (int i=0 ; i<mObjs.size() ; i++)
00328         {
00329             if (qObj == mObjs[i])
00330             {
00331                 if (mNr[i] < mMaxNumber)
00332                 {
00333                     mNr[i]++;
00334                     return true;
00335                 }
00336                 else
00337                 {
00338                     return false;
00339                 }
00340             }
00341         }
00342         mObjs.push_back(qObj);
00343         mNr.push_back(1);
00344         return true;
00345     }
00346 
00347 private:
00348 
00349     ValType mValue;
00350     int     mMaxNumber;
00351     std::vector<int> mObjs;
00352     std::vector<int> mNr;
00353 
00354 };
00355 
00356 
00357 } // namespace Table
00358 } // namespace Core
00359 } // namespace Impala
00360 
00361 #endif

Generated on Fri Mar 19 09:31:20 2010 for ImpalaSrc by  doxygen 1.5.1