summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/include/IceUtil/Random.h3
-rw-r--r--cpp/src/IceGrid/AdapterCache.cpp12
-rw-r--r--cpp/src/IceGrid/Database.cpp8
-rw-r--r--cpp/src/IceUtil/Random.cpp6
-rw-r--r--cpp/test/Ice/binding/AllTests.cpp32
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());