| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -172,22 +172,9 @@ bool SocketAddress::operator!=(const SocketAddress& other) const { | |||
| 172 | 172 | return !(*this == other); | |
| 173 | 173 | } | |
| 174 | 174 | ||
| 175 | - bool SocketAddress::operator<(const SocketAddress& other) const { | ||
| 176 | - return compare(other) == CompareResult::LESS_THAN; | ||
| 177 | - } | ||
| 178 | - | ||
| 179 | - bool SocketAddress::operator>(const SocketAddress& other) const { | ||
| 180 | - return compare(other) == CompareResult::GREATER_THAN; | ||
| 181 | - } | ||
| 182 | - | ||
| 183 | - bool SocketAddress::operator<=(const SocketAddress& other) const { | ||
| 184 | - CompareResult c = compare(other); | ||
| 185 | - return c == CompareResult::NOT_COMPARABLE ? false : | ||
| 186 | - c <= CompareResult::SAME; | ||
| 187 | - } | ||
| 188 | - | ||
| 189 | - bool SocketAddress::operator>=(const SocketAddress& other) const { | ||
| 190 | - return compare(other) >= CompareResult::SAME; | ||
| 175 | + std::partial_ordering SocketAddress::operator<=>( | ||
| 176 | + const SocketAddress& other) const { | ||
| 177 | + return compare(other); | ||
| 191 | 178 | } | |
| 192 | 179 | ||
| 193 | 180 | template <typename T> | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -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( | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -11,9 +11,10 @@ | |||
| 11 | 11 | #include "uv.h" | |
| 12 | 12 | #include "v8.h" | |
| 13 | 13 | ||
| 14 | + #include <compare> | ||
| 15 | + #include <list> | ||
| 14 | 16 | #include <memory> | |
| 15 | 17 | #include <string> | |
| 16 | - #include <list> | ||
| 17 | 18 | #include <unordered_map> | |
| 18 | 19 | ||
| 19 | 20 | namespace node { | |
@@ -22,24 +23,14 @@ class Environment; | |||
| 22 | 23 | ||
| 23 | 24 | class SocketAddress : public MemoryRetainer { | |
| 24 | 25 | public: | |
| 25 | - enum class CompareResult { | ||
| 26 | - NOT_COMPARABLE = -2, | ||
| 27 | - LESS_THAN, | ||
| 28 | - SAME, | ||
| 29 | - GREATER_THAN | ||
| 30 | - }; | ||
| 31 | - | ||
| 32 | 26 | struct Hash { | |
| 33 | 27 | size_t operator()(const SocketAddress& addr) const; | |
| 34 | 28 | }; | |
| 35 | 29 | ||
| 36 | 30 | inline bool operator==(const SocketAddress& other) const; | |
| 37 | 31 | inline bool operator!=(const SocketAddress& other) const; | |
| 38 | 32 | ||
| 39 | - inline bool operator<(const SocketAddress& other) const; | ||
| 40 | - inline bool operator>(const SocketAddress& other) const; | ||
| 41 | - inline bool operator<=(const SocketAddress& other) const; | ||
| 42 | - inline bool operator>=(const SocketAddress& other) const; | ||
| 33 | + inline std::partial_ordering operator<=>(const SocketAddress& other) const; | ||
| 43 | 34 | ||
| 44 | 35 | inline static bool is_numeric_host(const char* hostname); | |
| 45 | 36 | inline static bool is_numeric_host(const char* hostname, int family); | |
@@ -102,7 +93,7 @@ class SocketAddress : public MemoryRetainer { | |||
| 102 | 93 | bool is_match(const SocketAddress& other) const; | |
| 103 | 94 | ||
| 104 | 95 | // Compares this SocketAddress to the given other SocketAddress. | |
| 105 | - CompareResult compare(const SocketAddress& other) const; | ||
| 96 | + std::partial_ordering compare(const SocketAddress& other) const; | ||
| 106 | 97 | ||
| 107 | 98 | // Returns true if this SocketAddress is within the subnet | |
| 108 | 99 | // identified by the given network address and CIDR prefix. | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -145,19 +145,19 @@ TEST(SocketAddress, Comparison) { | |||
| 145 | 145 | SocketAddress addr5(reinterpret_cast<const sockaddr*>(&storage[4])); | |
| 146 | 146 | SocketAddress addr6(reinterpret_cast<const sockaddr*>(&storage[5])); | |
| 147 | 147 | ||
| 148 | - CHECK_EQ(addr1.compare(addr1), SocketAddress::CompareResult::SAME); | ||
| 149 | - CHECK_EQ(addr1.compare(addr2), SocketAddress::CompareResult::LESS_THAN); | ||
| 150 | - CHECK_EQ(addr2.compare(addr1), SocketAddress::CompareResult::GREATER_THAN); | ||
| 148 | + CHECK_EQ(addr1.compare(addr1), std::partial_ordering::equivalent); | ||
| 149 | + CHECK_EQ(addr1.compare(addr2), std::partial_ordering::less); | ||
| 150 | + CHECK_EQ(addr2.compare(addr1), std::partial_ordering::greater); | ||
| 151 | 151 | CHECK(addr1 <= addr1); | |
| 152 | 152 | CHECK(addr1 < addr2); | |
| 153 | 153 | CHECK(addr1 <= addr2); | |
| 154 | 154 | CHECK(addr2 >= addr2); | |
| 155 | 155 | CHECK(addr2 > addr1); | |
| 156 | 156 | CHECK(addr2 >= addr1); | |
| 157 | 157 | ||
| 158 | - CHECK_EQ(addr3.compare(addr3), SocketAddress::CompareResult::SAME); | ||
| 159 | - CHECK_EQ(addr3.compare(addr4), SocketAddress::CompareResult::LESS_THAN); | ||
| 160 | - CHECK_EQ(addr4.compare(addr3), SocketAddress::CompareResult::GREATER_THAN); | ||
| 158 | + CHECK_EQ(addr3.compare(addr3), std::partial_ordering::equivalent); | ||
| 159 | + CHECK_EQ(addr3.compare(addr4), std::partial_ordering::less); | ||
| 160 | + CHECK_EQ(addr4.compare(addr3), std::partial_ordering::greater); | ||
| 161 | 161 | CHECK(addr3 <= addr3); | |
| 162 | 162 | CHECK(addr3 < addr4); | |
| 163 | 163 | CHECK(addr3 <= addr4); | |
@@ -166,8 +166,8 @@ TEST(SocketAddress, Comparison) { | |||
| 166 | 166 | CHECK(addr4 >= addr3); | |
| 167 | 167 | ||
| 168 | 168 | // Not comparable | |
| 169 | - CHECK_EQ(addr1.compare(addr3), SocketAddress::CompareResult::NOT_COMPARABLE); | ||
| 170 | - CHECK_EQ(addr3.compare(addr1), SocketAddress::CompareResult::NOT_COMPARABLE); | ||
| 169 | + CHECK_EQ(addr1.compare(addr3), std::partial_ordering::unordered); | ||
| 170 | + CHECK_EQ(addr3.compare(addr1), std::partial_ordering::unordered); | ||
| 171 | 171 | CHECK(!(addr1 < addr3)); | |
| 172 | 172 | CHECK(!(addr1 > addr3)); | |
| 173 | 173 | CHECK(!(addr1 >= addr3)); | |
@@ -178,10 +178,10 @@ TEST(SocketAddress, Comparison) { | |||
| 178 | 178 | CHECK(!(addr3 <= addr1)); | |
| 179 | 179 | ||
| 180 | 180 | // Comparable | |
| 181 | - CHECK_EQ(addr1.compare(addr5), SocketAddress::CompareResult::SAME); | ||
| 182 | - CHECK_EQ(addr2.compare(addr6), SocketAddress::CompareResult::SAME); | ||
| 183 | - CHECK_EQ(addr1.compare(addr6), SocketAddress::CompareResult::LESS_THAN); | ||
| 184 | - CHECK_EQ(addr6.compare(addr1), SocketAddress::CompareResult::GREATER_THAN); | ||
| 181 | + CHECK_EQ(addr1.compare(addr5), std::partial_ordering::equivalent); | ||
| 182 | + CHECK_EQ(addr2.compare(addr6), std::partial_ordering::equivalent); | ||
| 183 | + CHECK_EQ(addr1.compare(addr6), std::partial_ordering::less); | ||
| 184 | + CHECK_EQ(addr6.compare(addr1), std::partial_ordering::greater); | ||
| 185 | 185 | CHECK(addr1 <= addr5); | |
| 186 | 186 | CHECK(addr1 <= addr6); | |
| 187 | 187 | CHECK(addr1 < addr6); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments