@@ -154,9 +154,8 @@ bool is_match_ipv4_ipv6(
154
154
sizeof (uint32_t )) == 0 ;
155
155
}
156
156
157
- SocketAddress::CompareResult compare_ipv4 (
158
- const SocketAddress& one,
159
- const SocketAddress& two) {
157
+ std::partial_ordering compare_ipv4 (const SocketAddress& one,
158
+ const SocketAddress& two) {
160
159
const sockaddr_in* one_in =
161
160
reinterpret_cast <const sockaddr_in*>(one.data ());
162
161
const sockaddr_in* two_in =
@@ -165,31 +164,29 @@ SocketAddress::CompareResult compare_ipv4(
165
164
const uint32_t s_addr_two = ntohl (two_in->sin_addr .s_addr );
166
165
167
166
if (s_addr_one < s_addr_two)
168
- return SocketAddress::CompareResult::LESS_THAN ;
167
+ return std::partial_ordering::less ;
169
168
else if (s_addr_one == s_addr_two)
170
- return SocketAddress::CompareResult::SAME ;
169
+ return std::partial_ordering::equivalent ;
171
170
else
172
- return SocketAddress::CompareResult::GREATER_THAN ;
171
+ return std::partial_ordering::greater ;
173
172
}
174
173
175
- SocketAddress::CompareResult compare_ipv6 (
176
- const SocketAddress& one,
177
- const SocketAddress& two) {
174
+ std::partial_ordering compare_ipv6 (const SocketAddress& one,
175
+ const SocketAddress& two) {
178
176
const sockaddr_in6* one_in =
179
177
reinterpret_cast <const sockaddr_in6*>(one.data ());
180
178
const sockaddr_in6* two_in =
181
179
reinterpret_cast <const sockaddr_in6*>(two.data ());
182
180
int ret = memcmp (&one_in->sin6_addr , &two_in->sin6_addr , 16 );
183
181
if (ret < 0 )
184
- return SocketAddress::CompareResult::LESS_THAN ;
182
+ return std::partial_ordering::less ;
185
183
else if (ret > 0 )
186
- return SocketAddress::CompareResult::GREATER_THAN ;
187
- return SocketAddress::CompareResult::SAME ;
184
+ return std::partial_ordering::greater ;
185
+ return std::partial_ordering::equivalent ;
188
186
}
189
187
190
- SocketAddress::CompareResult compare_ipv4_ipv6 (
191
- const SocketAddress& ipv4,
192
- const SocketAddress& ipv6) {
188
+ std::partial_ordering compare_ipv4_ipv6 (const SocketAddress& ipv4,
189
+ const SocketAddress& ipv6) {
193
190
const sockaddr_in* ipv4_in =
194
191
reinterpret_cast <const sockaddr_in*>(ipv4.data ());
195
192
const sockaddr_in6 * ipv6_in =
@@ -199,18 +196,18 @@ SocketAddress::CompareResult compare_ipv4_ipv6(
199
196
reinterpret_cast <const uint8_t *>(&ipv6_in->sin6_addr );
200
197
201
198
if (memcmp (ptr, mask, sizeof (mask)) != 0 )
202
- return SocketAddress::CompareResult::NOT_COMPARABLE ;
199
+ return std::partial_ordering::unordered ;
203
200
204
201
int ret = memcmp (
205
202
&ipv4_in->sin_addr ,
206
203
ptr + sizeof (mask),
207
204
sizeof (uint32_t ));
208
205
209
206
if (ret < 0 )
210
- return SocketAddress::CompareResult::LESS_THAN ;
207
+ return std::partial_ordering::less ;
211
208
else if (ret > 0 )
212
- return SocketAddress::CompareResult::GREATER_THAN ;
213
- return SocketAddress::CompareResult::SAME ;
209
+ return std::partial_ordering::greater ;
210
+ return std::partial_ordering::equivalent ;
214
211
}
215
212
216
213
bool in_network_ipv4 (
@@ -235,7 +232,7 @@ bool in_network_ipv6(
235
232
// Special case, if prefix == 128, then just do a
236
233
// straight comparison.
237
234
if (prefix == 128 )
238
- return compare_ipv6 (ip, net) == SocketAddress::CompareResult::SAME ;
235
+ return compare_ipv6 (ip, net) == std::partial_ordering::equivalent ;
239
236
240
237
uint8_t r = prefix % 8 ;
241
238
int len = (prefix - r) / 8 ;
@@ -263,7 +260,7 @@ bool in_network_ipv4_ipv6(
263
260
int prefix) {
264
261
265
262
if (prefix == 128 )
266
- return compare_ipv4_ipv6 (ip, net) == SocketAddress::CompareResult::SAME ;
263
+ return compare_ipv4_ipv6 (ip, net) == std::partial_ordering::equivalent ;
267
264
268
265
uint8_t r = prefix % 8 ;
269
266
int len = (prefix - r) / 8 ;
@@ -293,7 +290,7 @@ bool in_network_ipv6_ipv4(
293
290
const SocketAddress& net,
294
291
int prefix) {
295
292
if (prefix == 32 )
296
- return compare_ipv4_ipv6 (net, ip) == SocketAddress::CompareResult::SAME ;
293
+ return compare_ipv4_ipv6 (net, ip) == std::partial_ordering::equivalent ;
297
294
298
295
uint32_t m = ((1ull << prefix) - 1 ) << (32 - prefix);
299
296
@@ -337,8 +334,7 @@ bool SocketAddress::is_match(const SocketAddress& other) const {
337
334
return false ;
338
335
}
339
336
340
- SocketAddress::CompareResult SocketAddress::compare (
341
- const SocketAddress& other) const {
337
+ std::partial_ordering SocketAddress::compare (const SocketAddress& other) const {
342
338
switch (family ()) {
343
339
case AF_INET:
344
340
switch (other.family ()) {
@@ -349,24 +345,23 @@ SocketAddress::CompareResult SocketAddress::compare(
349
345
case AF_INET6:
350
346
switch (other.family ()) {
351
347
case AF_INET: {
352
- CompareResult c = compare_ipv4_ipv6 (other, *this );
353
- switch (c) {
354
- case SocketAddress::CompareResult::NOT_COMPARABLE:
355
- // Fall through
356
- case SocketAddress::CompareResult::SAME:
357
- return c;
358
- case SocketAddress::CompareResult::GREATER_THAN:
359
- return SocketAddress::CompareResult::LESS_THAN;
360
- case SocketAddress::CompareResult::LESS_THAN:
361
- return SocketAddress::CompareResult::GREATER_THAN;
348
+ auto c = compare_ipv4_ipv6 (other, *this );
349
+ if (c == std::partial_ordering::unordered) {
350
+ return std::partial_ordering::unordered;
351
+ } else if (c == std::partial_ordering::equivalent) {
352
+ return std::partial_ordering::equivalent;
353
+ } else if (c == std::partial_ordering::less) {
354
+ return std::partial_ordering::greater;
355
+ } else if (c == std::partial_ordering::greater) {
356
+ return std::partial_ordering::less;
362
357
}
363
358
break ;
364
359
}
365
360
case AF_INET6: return compare_ipv6 (*this , other);
366
361
}
367
362
break ;
368
363
}
369
- return SocketAddress::CompareResult::NOT_COMPARABLE ;
364
+ return std::partial_ordering::unordered ;
370
365
}
371
366
372
367
bool SocketAddress::is_in_network (
0 commit comments