From: Francis Dupont Date: Sat, 20 Jun 2020 11:54:08 +0000 (+0200) Subject: [#1283] Optimized hash X-Git-Tag: Kea-1.7.10~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=392d1e5926cf46d3a6c81a8858f06b1ac5d86d87;p=thirdparty%2Fkea.git [#1283] Optimized hash --- diff --git a/src/lib/asiolink/io_address.cc b/src/lib/asiolink/io_address.cc index a9eb587c33..a2a0a788cc 100644 --- a/src/lib/asiolink/io_address.cc +++ b/src/lib/asiolink/io_address.cc @@ -173,10 +173,15 @@ IOAddress::increase(const IOAddress& addr) { return (IOAddress::fromBytes(addr.getFamily(), &packed[0])); } -std::size_t +size_t hash_value(const IOAddress& address) { - boost::hash > hasher; - return (hasher(address.toBytes())); + if (address.isV4()) { + boost::hash hasher; + return (hasher(address.toUint32())); + } else { + boost::hash > hasher; + return (hasher(address.toBytes())); + } } } // namespace asiolink diff --git a/src/lib/asiolink/io_address.h b/src/lib/asiolink/io_address.h index 91e415dd92..fb1d67b3ea 100644 --- a/src/lib/asiolink/io_address.h +++ b/src/lib/asiolink/io_address.h @@ -305,10 +305,13 @@ operator<<(std::ostream& os, const IOAddress& address); /// \brief Hash the IOAddress. /// /// This method allows boost multi-index hashed indexes on IOAddresses. +/// It follows the requirement with equality: if two addresses are equal +/// their hashes are equal, if two addresses are not equal their hashes +/// are almost surely not equal. /// /// \param address A \c IOAddress to hash. /// \return The hash of the IOAddress. -std::size_t hash_value(const IOAddress& address); +size_t hash_value(const IOAddress& address); } // namespace asiolink } // namespace isc