diff --git a/src/core/model/hash.cc b/src/core/model/hash.cc index 96c024a67..ce24ecdbc 100644 --- a/src/core/model/hash.cc +++ b/src/core/model/hash.cc @@ -32,6 +32,13 @@ namespace ns3 { NS_LOG_COMPONENT_DEFINE ("Hash"); +Hasher& GetStaticHash (void) +{ + static Hasher g_hasher = Hasher (); + g_hasher.clear(); + return g_hasher; +} + Hasher::Hasher () { m_impl = Create (); diff --git a/src/core/model/hash.h b/src/core/model/hash.h index f5917373d..87b932de1 100644 --- a/src/core/model/hash.h +++ b/src/core/model/hash.h @@ -271,32 +271,38 @@ Hasher::GetHash64 (const std::string s) Global hash functions, inlined for rvo */ +/** + * \brief Get a reference to the static global hasher at g_hasher + * \return Reference to the static Hasher instance. + */ +Hasher& GetStaticHash (void); + inline uint32_t Hash32 (const char * buffer, const std::size_t size) { - return Hasher ().GetHash32 (buffer, size); + return GetStaticHash ().GetHash32 (buffer, size); } inline uint64_t Hash64 (const char * buffer, const std::size_t size) { - return Hasher ().GetHash64 (buffer, size); + return GetStaticHash ().GetHash64 (buffer, size); } inline uint32_t Hash32 (const std::string s) { - return Hasher ().GetHash32 (s); + return GetStaticHash ().GetHash32 (s); } inline uint64_t Hash64 (const std::string s) { - return Hasher ().GetHash64 (s); + return GetStaticHash ().GetHash64 (s); }