feat: split connectable and non-connectable pool (#5801)

This commit is contained in:
tearfur
2023-08-01 22:56:26 +08:00
committed by GitHub
parent 212bf69bb3
commit a2849219f7
12 changed files with 527 additions and 242 deletions

View File

@@ -389,12 +389,12 @@ public:
std::size_t operator()(tr_socket_address const& socket_address) const noexcept
{
auto const& [addr, port] = socket_address;
return hash_combine(ip_hash(addr), port_hash(port));
return hash_combine(ip_hash(addr), PortHasher(port.host()));
}
private:
// https://stackoverflow.com/a/27952689/11390656
[[nodiscard]] static constexpr std::size_t hash_combine(std::size_t const& a, std::size_t const& b)
[[nodiscard]] static constexpr std::size_t hash_combine(std::size_t const a, std::size_t const b)
{
return a ^ (b + 0x9e3779b9U + (a << 6U) + (a >> 2U));
}
@@ -414,11 +414,6 @@ private:
}
}
[[nodiscard]] static std::size_t port_hash(tr_port const& port) noexcept
{
return PortHasher(port.host());
}
constexpr static std::hash<uint32_t> IPv4Hasher{};
constexpr static std::hash<std::string_view> IPv6Hasher{};
constexpr static std::hash<uint16_t> PortHasher{};