diff options
author | Benoit Foucher <benoit@zeroc.com> | 2006-03-28 16:33:39 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2006-03-28 16:33:39 +0000 |
commit | 8893fc008abebf258d78b37914f3203d1e62a5ba (patch) | |
tree | d7a56d1c4850fabbf2fa0949e50e021a63343511 /cpp | |
parent | ptr_fun doesn't work with GCC, added temporary #ifdef for Windows only (diff) | |
download | ice-8893fc008abebf258d78b37914f3203d1e62a5ba.tar.bz2 ice-8893fc008abebf258d78b37914f3203d1e62a5ba.tar.xz ice-8893fc008abebf258d78b37914f3203d1e62a5ba.zip |
Win32 fix for random_shuffle
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/include/IceUtil/Random.h | 3 | ||||
-rw-r--r-- | cpp/src/IceGrid/AdapterCache.cpp | 12 | ||||
-rw-r--r-- | cpp/src/IceGrid/Database.cpp | 8 | ||||
-rw-r--r-- | cpp/src/IceUtil/Random.cpp | 6 | ||||
-rw-r--r-- | cpp/test/Ice/binding/AllTests.cpp | 32 |
5 files changed, 60 insertions, 1 deletions
diff --git a/cpp/include/IceUtil/Random.h b/cpp/include/IceUtil/Random.h index 64c010ba2c5..3767572e179 100644 --- a/cpp/include/IceUtil/Random.h +++ b/cpp/include/IceUtil/Random.h @@ -35,7 +35,8 @@ private: }; ICE_UTIL_API void generateRandom(char*, int); -ICE_UTIL_API int random(int = 0); +ICE_UTIL_API int random(); +ICE_UTIL_API int random(int); } diff --git a/cpp/src/IceGrid/AdapterCache.cpp b/cpp/src/IceGrid/AdapterCache.cpp index b6bc81a2014..d7f263a349e 100644 --- a/cpp/src/IceGrid/AdapterCache.cpp +++ b/cpp/src/IceGrid/AdapterCache.cpp @@ -338,7 +338,11 @@ ReplicaGroupEntry::getProxies(bool allRegistered, int& nReplicas) else// if(RandomLoadBalancingPolicyPtr::dynamicCast(_loadBalancing)) { replicas = _replicas; +#ifdef _MSC_VER + random_shuffle(replicas.begin(), replicas.end(), ptr_fun(IceUtil::random)); +#else random_shuffle(replicas.begin(), replicas.end(), IceUtil::random); +#endif } } @@ -348,7 +352,11 @@ ReplicaGroupEntry::getProxies(bool allRegistered, int& nReplicas) // This must be done outside the synchronization block since // the sort() will call and lock each server entry. // +#ifdef _MSC_VER + random_shuffle(replicas.begin(), replicas.end(), ptr_fun(IceUtil::random)); +#else random_shuffle(replicas.begin(), replicas.end(), IceUtil::random); +#endif sort(replicas.begin(), replicas.end(), ServerLoadCI(loadSample)); } @@ -391,7 +399,11 @@ ReplicaGroupEntry::getLeastLoadedNodeLoad(LoadSample loadSample) const // This must be done outside the synchronization block since // min_element() will call and lock each server entry. // +#ifdef _MSC_VER + random_shuffle(replicas.begin(), replicas.end(), ptr_fun(IceUtil::random)); +#else random_shuffle(replicas.begin(), replicas.end(), IceUtil::random); +#endif AdapterEntryPtr adpt = min_element(replicas.begin(), replicas.end(), ServerLoadCI(loadSample))->second; return adpt->getLeastLoadedNodeLoad(loadSample); } diff --git a/cpp/src/IceGrid/Database.cpp b/cpp/src/IceGrid/Database.cpp index c77ad832dfd..9e270c2ff40 100644 --- a/cpp/src/IceGrid/Database.cpp +++ b/cpp/src/IceGrid/Database.cpp @@ -766,7 +766,11 @@ Database::getAdapters(const string& id, bool allRegistered, int& endpointCount) adpts.push_back(make_pair(p->first, adpt)); ++p; } +#ifdef _MSC_VER + random_shuffle(adpts.begin(), adpts.end(), ptr_fun(IceUtil::random)); +#else random_shuffle(adpts.begin(), adpts.end(), IceUtil::random); +#endif endpointCount = static_cast<int>(adpts.size()); return adpts; } @@ -935,7 +939,11 @@ Ice::ObjectPrx Database::getObjectByTypeOnLeastLoadedNode(const string& type, LoadSample sample) { Ice::ObjectProxySeq objs = getObjectsByType(type); +#ifdef _MSC_VER + random_shuffle(objs.begin(), objs.end(), ptr_fun(IceUtil::random)); +#else random_shuffle(objs.begin(), objs.end(), IceUtil::random); +#endif vector<pair<Ice::ObjectPrx, float> > objectsWithLoad; objectsWithLoad.reserve(objs.size()); for(Ice::ObjectProxySeq::const_iterator p = objs.begin(); p != objs.end(); ++p) diff --git a/cpp/src/IceUtil/Random.cpp b/cpp/src/IceUtil/Random.cpp index d3e217a2fc1..e815ce86680 100644 --- a/cpp/src/IceUtil/Random.cpp +++ b/cpp/src/IceUtil/Random.cpp @@ -193,6 +193,12 @@ IceUtil::generateRandom(char* buffer, int size) } int +IceUtil::random() +{ + return IceUtil::random(0); +} + +int IceUtil::random(int limit) { int r; diff --git a/cpp/test/Ice/binding/AllTests.cpp b/cpp/test/Ice/binding/AllTests.cpp index 86e37d26ba1..95044bcb957 100644 --- a/cpp/test/Ice/binding/AllTests.cpp +++ b/cpp/test/Ice/binding/AllTests.cpp @@ -136,9 +136,17 @@ allTests(const Ice::CommunicatorPtr& communicator) vector<RemoteObjectAdapterPrx> adpts = adapters; TestIntfPrx test1 = createTestIntfPrx(adpts); +#ifdef _MSC_VER + random_shuffle(adpts.begin(), adpts.end(), ptr_fun(IceUtil::random)); +#else random_shuffle(adpts.begin(), adpts.end(), IceUtil::random); +#endif TestIntfPrx test2 = createTestIntfPrx(adpts); +#ifdef _MSC_VER + random_shuffle(adpts.begin(), adpts.end(), ptr_fun(IceUtil::random)); +#else random_shuffle(adpts.begin(), adpts.end(), IceUtil::random); +#endif TestIntfPrx test3 = createTestIntfPrx(adpts); test(test1->ice_connection() == test2->ice_connection()); @@ -183,9 +191,17 @@ allTests(const Ice::CommunicatorPtr& communicator) vector<RemoteObjectAdapterPrx> adpts = adapters; TestIntfPrx test1 = createTestIntfPrx(adpts); +#ifdef _MSC_VER + random_shuffle(adpts.begin(), adpts.end(), ptr_fun(IceUtil::random)); +#else random_shuffle(adpts.begin(), adpts.end(), IceUtil::random); +#endif TestIntfPrx test2 = createTestIntfPrx(adpts); +#ifdef _MSC_VER + random_shuffle(adpts.begin(), adpts.end(), ptr_fun(IceUtil::random)); +#else random_shuffle(adpts.begin(), adpts.end(), IceUtil::random); +#endif TestIntfPrx test3 = createTestIntfPrx(adpts); test(test1->ice_connection() == test2->ice_connection()); @@ -227,9 +243,17 @@ allTests(const Ice::CommunicatorPtr& communicator) vector<RemoteObjectAdapterPrx> adpts = adapters; TestIntfPrx test1 = createTestIntfPrx(adpts); +#ifdef _MSC_VER + random_shuffle(adpts.begin(), adpts.end(), ptr_fun(IceUtil::random)); +#else random_shuffle(adpts.begin(), adpts.end(), IceUtil::random); +#endif TestIntfPrx test2 = createTestIntfPrx(adpts); +#ifdef _MSC_VER + random_shuffle(adpts.begin(), adpts.end(), ptr_fun(IceUtil::random)); +#else random_shuffle(adpts.begin(), adpts.end(), IceUtil::random); +#endif TestIntfPrx test3 = createTestIntfPrx(adpts); test(test1->ice_connection() == test2->ice_connection()); @@ -274,9 +298,17 @@ allTests(const Ice::CommunicatorPtr& communicator) vector<RemoteObjectAdapterPrx> adpts = adapters; TestIntfPrx test1 = createTestIntfPrx(adpts); +#ifdef _MSC_VER + random_shuffle(adpts.begin(), adpts.end(), ptr_fun(IceUtil::random)); +#else random_shuffle(adpts.begin(), adpts.end(), IceUtil::random); +#endif TestIntfPrx test2 = createTestIntfPrx(adpts); +#ifdef _MSC_VER + random_shuffle(adpts.begin(), adpts.end(), ptr_fun(IceUtil::random)); +#else random_shuffle(adpts.begin(), adpts.end(), IceUtil::random); +#endif TestIntfPrx test3 = createTestIntfPrx(adpts); test(test1->ice_connection() == test2->ice_connection()); |