From 78febe17ec2229e9d13dd29c33a624fd01c0d6f5 Mon Sep 17 00:00:00 2001 From: syntheticpp Date: Mon, 16 Oct 2006 09:59:11 +0000 Subject: [PATCH] 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 --- include/loki/CachedFactory.h | 28 +- include/loki/Key.h | 883 ++++++++++++----------- test/CachedFactory/CachedFactory.dev | 26 +- test/CachedFactory/CachedFactory.vcproj | 14 +- test/CachedFactory/CachedFactoryTest.cpp | 11 +- test/CachedFactory/Makefile | 4 +- test/CachedFactory/make.msvc.bat | 4 +- test/make.msvc.bat | 4 + 8 files changed, 522 insertions(+), 452 deletions(-) diff --git a/include/loki/CachedFactory.h b/include/loki/CachedFactory.h index 100aa37..f508b6e 100755 --- a/include/loki/CachedFactory.h +++ b/include/loki/CachedFactory.h @@ -34,6 +34,15 @@ #define D( x ) ; #endif +#ifdef _MSC_VER +#include +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 class EvictionPolicy = EvictRandom, class StatisticPolicy = NoStatisticPolicy, template class FactoryErrorPolicy = DefaultFactoryError, - template > class Vector = std::vector + class ObjVector = std::vector > class CachedFactory : protected EncapsulationPolicy, @@ -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++) diff --git a/include/loki/Key.h b/include/loki/Key.h index 94bd678..b94ac2d 100755 --- a/include/loki/Key.h +++ b/include/loki/Key.h @@ -25,6 +25,20 @@ namespace Loki { + + template< + class Factory, + typename IdentifierType + > + class Key; + + template + bool operator==(const Key &k1, const Key &k2); + + template + bool operator<(const Key &k1, const Key &k2); + + /* * A Key class */ @@ -303,441 +317,454 @@ namespace Loki this->p14 = p14; this->p15 = p15; } + + template + friend bool operator==(const Key &k1, const Key &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 + friend bool operator<(const Key &k1, const Key &k2); + }; + - friend bool operator<(const EmptyType &k1, const EmptyType &k2) - { + template + bool operator==(const Key &k1, const Key &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 + bool operator<(const Key &k1, const Key &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_*/ diff --git a/test/CachedFactory/CachedFactory.dev b/test/CachedFactory/CachedFactory.dev index c561523..ee06381 100755 --- a/test/CachedFactory/CachedFactory.dev +++ b/test/CachedFactory/CachedFactory.dev @@ -1,7 +1,7 @@ [Project] FileName=CachedFactory.dev Name=Factory -UnitCount=2 +UnitCount=3 Type=1 Ver=1 ObjFiles= @@ -47,9 +47,6 @@ ProductName= ProductVersion= AutoIncBuildNr=0 - - - [Unit1] FileName=CachedFactoryTest.cpp CompileCpp=1 @@ -59,3 +56,24 @@ Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= + +[Unit2] +FileName=..\..\src\SmallObj.cpp +CompileCpp=1 +Folder=Factory +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit3] +FileName=..\..\src\Singleton.cpp +CompileCpp=1 +Folder=Factory +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/test/CachedFactory/CachedFactory.vcproj b/test/CachedFactory/CachedFactory.vcproj index 65a3b10..dd9b9e7 100755 --- a/test/CachedFactory/CachedFactory.vcproj +++ b/test/CachedFactory/CachedFactory.vcproj @@ -2,7 +2,7 @@ + + + + diff --git a/test/CachedFactory/CachedFactoryTest.cpp b/test/CachedFactory/CachedFactoryTest.cpp index 7cbc924..18f24b5 100755 --- a/test/CachedFactory/CachedFactoryTest.cpp +++ b/test/CachedFactory/CachedFactoryTest.cpp @@ -106,9 +106,9 @@ void testCacheOverhead(){ typedef CachedFactory< AbstractProduct, int, NullType, SimplePointer, AmountLimitedCreation, EvictRandom > CRandomEvict; typedef CachedFactory< AbstractProduct, int, NullType, SimplePointer, AmountLimitedCreation, EvictLRU > CLRUEvict; typedef CachedFactory< AbstractProduct, int, NullType, SimplePointer, AmountLimitedCreation, EvictAging > CAgingEvict; - bool test1 = dispResult("Random policy", unitTestCacheOverhead< CRandomEvict >(loop)); - bool test2 = dispResult("LRU policy", unitTestCacheOverhead< CLRUEvict >(loop)); - bool test3 = dispResult("Aging policy", unitTestCacheOverhead< CAgingEvict >(loop)); + bool test1 = dispResult("Random policy", unitTestCacheOverhead< CRandomEvict >(loop));(void)test1; + bool test2 = dispResult("LRU policy", unitTestCacheOverhead< CLRUEvict >(loop));(void)test2; + bool test3 = dispResult("Aging policy", unitTestCacheOverhead< CAgingEvict >(loop));(void)test3; } void unitTestCachePerformance(int loop){ typedef CachedFactory< AbstractProduct, int > CCache; @@ -148,7 +148,7 @@ std::clock_t typicalUse( Cache &CC, unsigned objectKind, unsigned maxObjectCount std::clock_t start, end; try{ // Registering objects - for(int i=0;i