From 55045b5fe936591e457a1a50a3d68879675cb85a Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Sun, 3 Nov 2013 12:50:17 -0800 Subject: [PATCH] Improve hasher for IPAddress --- beast/net/IPAddress.h | 50 ++++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/beast/net/IPAddress.h b/beast/net/IPAddress.h index fb91f82e98..c4b6c3941c 100644 --- a/beast/net/IPAddress.h +++ b/beast/net/IPAddress.h @@ -27,6 +27,18 @@ #include "../CStdInt.h" #include "../mpl/IfCond.h" +namespace std { + +template +struct hash; + +//template <> +//struct hash ; + +} + +//------------------------------------------------------------------------------ + namespace beast { /** Represents an IP address (v4 or v6) and port combination. */ @@ -309,19 +321,7 @@ public: operator std::string () const; /** @} */ - struct hasher - { - std::size_t operator() (IPAddress const& value) const - { - std::size_t hash (0); - if (value.isV4()) - hash = V4::hasher() (value.v4()); - else if (value.isV6()) - hash = V6::hasher() (value.v6()); - hash += value.port(); - return hash; - } - }; + typedef std::hash hasher; struct key_equal; @@ -374,4 +374,28 @@ struct IPAddress::key_equal } +//------------------------------------------------------------------------------ + +namespace std { + +template +struct hash; + +template <> +struct hash +{ + std::size_t operator() (beast::IPAddress const& value) const + { + std::size_t hash (0); + if (value.isV4()) + hash = beast::IPAddress::V4::hasher() (value.v4()); + else if (value.isV6()) + hash = beast::IPAddress::V6::hasher() (value.v6()); + hash += value.port(); + return hash; + } +}; + +} + #endif