net/addr/subnet: Add hashing functions
Change-Id: I18b9031ca652f72d1fb3a1df3d02c8506e9b423b
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/include/stdplus/net/addr/subnet.hpp b/include/stdplus/net/addr/subnet.hpp
index 5bcc17d..3b4ab0a 100644
--- a/include/stdplus/net/addr/subnet.hpp
+++ b/include/stdplus/net/addr/subnet.hpp
@@ -261,6 +261,15 @@
}
};
+template <typename Subnet>
+struct SubnetHash
+{
+ constexpr std::size_t operator()(Subnet addr) const noexcept
+ {
+ return stdplus::hashMulti(addr.getAddr(), addr.getPfx());
+ }
+};
+
} // namespace detail
template <typename Addr, typename Pfx>
@@ -292,3 +301,13 @@
struct fmt::formatter<stdplus::SubnetAny, CharT> :
stdplus::Format<stdplus::ToStr<stdplus::SubnetAny>, CharT>
{};
+
+template <typename Addr, typename Pfx>
+struct std::hash<stdplus::detail::Subnet46<Addr, Pfx>> :
+ stdplus::detail::SubnetHash<stdplus::detail::Subnet46<Addr, Pfx>>
+{};
+
+template <>
+struct std::hash<stdplus::SubnetAny> :
+ stdplus::detail::SubnetHash<stdplus::SubnetAny>
+{};