add CachedFactory, patches for: msvc, build system

git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@720 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
syntheticpp 2006-10-16 09:59:11 +00:00
parent cf3ca512e6
commit 78febe17ec
8 changed files with 522 additions and 452 deletions

View file

@ -34,6 +34,15 @@
#define D( x ) ;
#endif
#ifdef _MSC_VER
#include <time.h>
namespace std
{
typedef ::clock_t clock_t;
int clock(){ return ::clock();}
}
#endif
using std::clock_t;
using std::clock;
using std::bind2nd;
@ -142,7 +151,7 @@ namespace Loki
void cleanVector()
{
clock_t currentTime = clock();
clock_t currentTime = std::clock();
D( cout << "currentTime = " << currentTime<< endl; )
D( cout << "currentTime - lastUpdate = " << currentTime - lastUpdate<< endl; )
if(currentTime - lastUpdate > timeValidity)
@ -191,7 +200,7 @@ namespace Loki
void onCreate()
{
m_vTimes.push_back(clock());
m_vTimes.push_back(std::clock());
}
void onDestroy()
@ -324,7 +333,7 @@ namespace Loki
EH::m_mHitCount[key] = 0;
}
void onFetch(const DT& key)
void onFetch(const DT&)
{
}
@ -376,7 +385,7 @@ namespace Loki
EH::m_mHitCount[key] = 0;
}
void onFetch(const DT& key){}
void onFetch(const DT&){}
// onRelease increments the hit counter associated with the object
// Updating every counters by iterating over the map
@ -428,10 +437,10 @@ namespace Loki
typedef typename std::vector< DT >::iterator iterator;
protected:
void onCreate(const DT& key){
void onCreate(const DT&){
}
void onFetch(const DT& key){
void onFetch(const DT& ){
}
void onRelease(const DT& key){
@ -561,7 +570,7 @@ namespace Loki
template <typename , typename> class EvictionPolicy = EvictRandom,
class StatisticPolicy = NoStatisticPolicy,
template<typename, class> class FactoryErrorPolicy = DefaultFactoryError,
template<typename _T, class = std::allocator<_T> > class Vector = std::vector
class ObjVector = std::vector<AbstractProduct*>
>
class CachedFactory :
protected EncapsulationPolicy<AbstractProduct>,
@ -595,7 +604,7 @@ namespace Loki
typedef typename NP::ProductReturn ProductReturn;
typedef Key< Impl, IdentifierType > Key;
typedef Vector< AbstractProduct* > ObjVector;
//typedef typename Vector ObjVector;
typedef std::map< Key, ObjVector > KeyToObjVectorMap;
typedef std::map< AbstractProduct*, Key > FetchedObjToKeyMap;
@ -612,6 +621,7 @@ namespace Loki
AbstractProduct* const getPointerToObjectInContainer(ObjVector &entry)
{
AbstractProduct* pObject = NULL;
(void) pObject;
if(entry.empty()) // No object available
{ // the object will be created in the calling function.
// It has to be created in the calling function because of
@ -707,7 +717,9 @@ namespace Loki
//assert(outObjects==0);
// debug information
if(!providedObjects.empty())
{
D( cout << "====>> Cache destructor : deleting "<< providedObjects.size()<<" objects <<====" << endl << endl; )
}
// cleaning the Cache
typename FetchedObjToKeyMap::iterator itr;
for(itr=providedObjects.begin(); itr!=providedObjects.end();itr++)

View file

@ -25,6 +25,20 @@
namespace Loki
{
template<
class Factory,
typename IdentifierType
>
class Key;
template<class F, typename I>
bool operator==(const Key<F, I> &k1, const Key<F, I> &k2);
template<class F, typename I>
bool operator<(const Key<F, I> &k1, const Key<F, I> &k2);
/*
* A Key class
*/
@ -303,441 +317,454 @@ namespace Loki
this->p14 = p14;
this->p15 = p15;
}
template<class F, typename I>
friend bool operator==(const Key<F, I> &k1, const Key<F, I> &k2);
friend bool operator==(const EmptyType &k1, const EmptyType &k2)
{
return true;
}
friend bool operator==(const Key &k1, const Key &k2)
{
if( k1.count != k2.count )
return false;
switch(k1.count){
case -1:
return true;
case 0:
if( k1.id == k2.id )
return true;
else
return false;
case 1:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) )
return true;
else
return false;
case 2:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) )
return true;
else
return false;
case 3:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) )
return true;
else
return false;
case 4:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) )
return true;
else
return false;
case 5:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) )
return true;
else
return false;
case 6:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) )
return true;
else
return false;
case 7:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) )
return true;
else
return false;
case 8:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) )
return true;
else
return false;
case 9:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) )
return true;
else
return false;
case 10:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) &&
(k1.p10 == k2.p10) )
return true;
else
return false;
case 11:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) &&
(k1.p10 == k2.p10) &&
(k1.p11 == k2.p11) )
return true;
else
return false;
case 12:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) &&
(k1.p10 == k2.p10) &&
(k1.p11 == k2.p11) &&
(k1.p12 == k2.p12) )
return true;
else
return false;
case 13:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) &&
(k1.p10 == k2.p10) &&
(k1.p11 == k2.p11) &&
(k1.p12 == k2.p12) &&
(k1.p13 == k2.p13) )
return true;
else
return false;
case 14:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) &&
(k1.p10 == k2.p10) &&
(k1.p11 == k2.p11) &&
(k1.p12 == k2.p12) &&
(k1.p13 == k2.p13) &&
(k1.p14 == k2.p14) )
return true;
else
return false;
case 15:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) &&
(k1.p10 == k2.p10) &&
(k1.p11 == k2.p11) &&
(k1.p12 == k2.p12) &&
(k1.p13 == k2.p13) &&
(k1.p14 == k2.p14) &&
(k1.p15 == k2.p15) )
return true;
else
return false;
default:
return false;
}
}
template<class F, typename I>
friend bool operator<(const Key<F, I> &k1, const Key<F, I> &k2);
};
friend bool operator<(const EmptyType &k1, const EmptyType &k2)
{
template<class F, typename I>
bool operator==(const Key<F, I> &k1, const Key<F, I> &k2)
{
if( k1.count != k2.count )
return false;
}
friend bool operator<(const Key &k1, const Key &k2)
{
if( k1.count < k2.count )
switch(k1.count){
case -1:
return true;
switch(k1.count){
case -1:
case 0:
if( k1.id == k2.id )
return true;
else
return false;
case 0:
if( k1.id < k2.id )
return true;
else
return false;
case 1:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) )
return true;
else
return false;
case 2:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) )
return true;
else
return false;
case 3:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) )
return true;
else
return false;
case 4:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) )
return true;
else
return false;
case 5:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) )
return true;
else
return false;
case 6:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) )
return true;
else
return false;
case 7:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) )
return true;
else
return false;
case 8:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) )
return true;
else
return false;
case 9:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) )
return true;
else
return false;
case 10:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) ||
(k1.p10 < k2.p10) )
return true;
else
return false;
case 11:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) ||
(k1.p10 < k2.p10) ||
(k1.p11 < k2.p11) )
return true;
else
return false;
case 12:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) ||
(k1.p10 < k2.p10) ||
(k1.p11 < k2.p11) ||
(k1.p12 < k2.p12) )
return true;
else
return false;
case 13:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) ||
(k1.p10 < k2.p10) ||
(k1.p11 < k2.p11) ||
(k1.p12 < k2.p12) ||
(k1.p13 < k2.p13) )
return true;
else
return false;
case 14:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) ||
(k1.p10 < k2.p10) ||
(k1.p11 < k2.p11) ||
(k1.p12 < k2.p12) ||
(k1.p13 < k2.p13) ||
(k1.p14 < k2.p14) )
return true;
else
return false;
case 15:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) ||
(k1.p10 < k2.p10) ||
(k1.p11 < k2.p11) ||
(k1.p12 < k2.p12) ||
(k1.p13 < k2.p13) ||
(k1.p14 < k2.p14) ||
(k1.p15 < k2.p15) )
return true;
else
return false;
default:
case 1:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) )
return true;
else
return false;
}
case 2:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) )
return true;
else
return false;
case 3:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) )
return true;
else
return false;
case 4:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) )
return true;
else
return false;
case 5:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) )
return true;
else
return false;
case 6:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) )
return true;
else
return false;
case 7:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) )
return true;
else
return false;
case 8:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) )
return true;
else
return false;
case 9:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) )
return true;
else
return false;
case 10:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) &&
(k1.p10 == k2.p10) )
return true;
else
return false;
case 11:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) &&
(k1.p10 == k2.p10) &&
(k1.p11 == k2.p11) )
return true;
else
return false;
case 12:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) &&
(k1.p10 == k2.p10) &&
(k1.p11 == k2.p11) &&
(k1.p12 == k2.p12) )
return true;
else
return false;
case 13:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) &&
(k1.p10 == k2.p10) &&
(k1.p11 == k2.p11) &&
(k1.p12 == k2.p12) &&
(k1.p13 == k2.p13) )
return true;
else
return false;
case 14:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) &&
(k1.p10 == k2.p10) &&
(k1.p11 == k2.p11) &&
(k1.p12 == k2.p12) &&
(k1.p13 == k2.p13) &&
(k1.p14 == k2.p14) )
return true;
else
return false;
case 15:
if( (k1.id == k2.id) &&
(k1.p1 == k2.p1) &&
(k1.p2 == k2.p2) &&
(k1.p3 == k2.p3) &&
(k1.p4 == k2.p4) &&
(k1.p5 == k2.p5) &&
(k1.p6 == k2.p6) &&
(k1.p7 == k2.p7) &&
(k1.p8 == k2.p8) &&
(k1.p9 == k2.p9) &&
(k1.p10 == k2.p10) &&
(k1.p11 == k2.p11) &&
(k1.p12 == k2.p12) &&
(k1.p13 == k2.p13) &&
(k1.p14 == k2.p14) &&
(k1.p15 == k2.p15) )
return true;
else
return false;
default:
return false;
}
};
}
template<class F, typename I>
bool operator<(const Key<F, I> &k1, const Key<F, I> &k2)
{
if( k1.count < k2.count )
return true;
switch(k1.count){
case -1:
return false;
case 0:
if( k1.id < k2.id )
return true;
else
return false;
case 1:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) )
return true;
else
return false;
case 2:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) )
return true;
else
return false;
case 3:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) )
return true;
else
return false;
case 4:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) )
return true;
else
return false;
case 5:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) )
return true;
else
return false;
case 6:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) )
return true;
else
return false;
case 7:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) )
return true;
else
return false;
case 8:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) )
return true;
else
return false;
case 9:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) )
return true;
else
return false;
case 10:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) ||
(k1.p10 < k2.p10) )
return true;
else
return false;
case 11:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) ||
(k1.p10 < k2.p10) ||
(k1.p11 < k2.p11) )
return true;
else
return false;
case 12:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) ||
(k1.p10 < k2.p10) ||
(k1.p11 < k2.p11) ||
(k1.p12 < k2.p12) )
return true;
else
return false;
case 13:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) ||
(k1.p10 < k2.p10) ||
(k1.p11 < k2.p11) ||
(k1.p12 < k2.p12) ||
(k1.p13 < k2.p13) )
return true;
else
return false;
case 14:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) ||
(k1.p10 < k2.p10) ||
(k1.p11 < k2.p11) ||
(k1.p12 < k2.p12) ||
(k1.p13 < k2.p13) ||
(k1.p14 < k2.p14) )
return true;
else
return false;
case 15:
if( (k1.id < k2.id) ||
(k1.p1 < k2.p1) ||
(k1.p2 < k2.p2) ||
(k1.p3 < k2.p3) ||
(k1.p4 < k2.p4) ||
(k1.p5 < k2.p5) ||
(k1.p6 < k2.p6) ||
(k1.p7 < k2.p7) ||
(k1.p8 < k2.p8) ||
(k1.p9 < k2.p9) ||
(k1.p10 < k2.p10) ||
(k1.p11 < k2.p11) ||
(k1.p12 < k2.p12) ||
(k1.p13 < k2.p13) ||
(k1.p14 < k2.p14) ||
(k1.p15 < k2.p15) )
return true;
else
return false;
default:
return false;
}
}
bool operator==(const EmptyType&, const EmptyType&)
{
return true;
}
bool operator<(const EmptyType&, const EmptyType&)
{
return false;
}
} // namespace Loki
#endif /*_KEY_H_*/