summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2006-03-28 16:33:39 +0000
committerBenoit Foucher <benoit@zeroc.com>2006-03-28 16:33:39 +0000
commit8893fc008abebf258d78b37914f3203d1e62a5ba (patch)
treed7a56d1c4850fabbf2fa0949e50e021a63343511 /cpp/src
parentptr_fun doesn't work with GCC, added temporary #ifdef for Windows only (diff)
downloadice-8893fc008abebf258d78b37914f3203d1e62a5ba.tar.bz2
ice-8893fc008abebf258d78b37914f3203d1e62a5ba.tar.xz
ice-8893fc008abebf258d78b37914f3203d1e62a5ba.zip
Win32 fix for random_shuffle
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/IceGrid/AdapterCache.cpp12
-rw-r--r--cpp/src/IceGrid/Database.cpp8
-rw-r--r--cpp/src/IceUtil/Random.cpp6
3 files changed, 26 insertions, 0 deletions
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;