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:
parent
cf3ca512e6
commit
78febe17ec
8 changed files with 522 additions and 452 deletions
|
@ -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_*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue