summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Network.cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2018-09-07 18:47:28 +0200
committerJose <jose@zeroc.com>2018-09-07 18:47:28 +0200
commit8cddd264e57ab89fc4c6952b2b390457a4bfbedf (patch)
tree66bb34aa13289ed0017a9460e800740516bb1278 /cpp/src/Ice/Network.cpp
parentEnable test workers for PHP, Ruby and Python (diff)
downloadice-8cddd264e57ab89fc4c6952b2b390457a4bfbedf.tar.bz2
ice-8cddd264e57ab89fc4c6952b2b390457a4bfbedf.tar.xz
ice-8cddd264e57ab89fc4c6952b2b390457a4bfbedf.zip
Fixes for C++17 mode
Close #180
Diffstat (limited to 'cpp/src/Ice/Network.cpp')
-rwxr-xr-xcpp/src/Ice/Network.cpp34
1 files changed, 24 insertions, 10 deletions
diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp
index 36a4e16c0c8..f4629771ac6 100755
--- a/cpp/src/Ice/Network.cpp
+++ b/cpp/src/Ice/Network.cpp
@@ -116,6 +116,9 @@ public:
};
#ifndef ICE_OS_UWP
+
+# ifndef ICE_CPP11_COMPILER
+
struct AddressIsIPv6 : public unary_function<Address, bool>
{
public:
@@ -126,26 +129,36 @@ public:
return ss.saStorage.ss_family == AF_INET6;
}
};
-
-struct RandomNumberGenerator : public std::unary_function<ptrdiff_t, ptrdiff_t>
-{
- ptrdiff_t operator()(ptrdiff_t d)
- {
- return IceUtilInternal::random(static_cast<int>(d));
- }
-};
+# endif
void
sortAddresses(vector<Address>& addrs, ProtocolSupport protocol, Ice::EndpointSelectionType selType, bool preferIPv6)
{
if(selType == Ice::ICE_ENUM(EndpointSelectionType, Random))
{
- RandomNumberGenerator rng;
- random_shuffle(addrs.begin(), addrs.end(), rng);
+ IceUtilInternal::shuffle(addrs.begin(), addrs.end());
}
if(protocol == EnableBoth)
{
+#ifdef ICE_CPP11_COMPILER
+ if(preferIPv6)
+ {
+ stable_partition(addrs.begin(), addrs.end(),
+ [](const Address& ss)
+ {
+ return ss.saStorage.ss_family == AF_INET6;
+ });
+ }
+ else
+ {
+ stable_partition(addrs.begin(), addrs.end(),
+ [](const Address& ss)
+ {
+ return ss.saStorage.ss_family != AF_INET6;
+ });
+ }
+#else
if(preferIPv6)
{
stable_partition(addrs.begin(), addrs.end(), AddressIsIPv6());
@@ -154,6 +167,7 @@ sortAddresses(vector<Address>& addrs, ProtocolSupport protocol, Ice::EndpointSel
{
stable_partition(addrs.begin(), addrs.end(), not1(AddressIsIPv6()));
}
+#endif
}
}