Murmur3 hash function implementation. More...
#include "hash-murmur3.h"
Public Member Functions | |
Murmur3 () | |
Constructor, clears internal state. More... | |
void | clear () override |
Restore initial state. More... | |
uint32_t | GetHash32 (const char *buffer, const std::size_t size) override |
Compute 32-bit hash of a byte buffer. More... | |
uint64_t | GetHash64 (const char *buffer, const std::size_t size) override |
Compute 64-bit hash of a byte buffer. More... | |
Public Member Functions inherited from ns3::Hash::Implementation | |
Implementation () | |
Constructor. More... | |
virtual | ~Implementation () |
Destructor. More... | |
Public Member Functions inherited from ns3::SimpleRefCount< Implementation > | |
SimpleRefCount () | |
Default constructor. More... | |
SimpleRefCount (const SimpleRefCount &o[[maybe_unused]]) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= (const SimpleRefCount &o[[maybe_unused]]) |
Assignment operator. More... | |
void | Ref () const |
Increment the reference count. More... | |
void | Unref () const |
Decrement the reference count. More... | |
Private Attributes | |
uint32_t | m_hash32 |
Cache last hash value, and total bytes hashed (needed to finalize), for incremental hashing. More... | |
std::size_t | m_size32 |
Cache last hash value, and total bytes hashed (needed to finalize), for incremental hashing. More... | |
uint64_t | m_hash64 [2] |
murmur3 produces 128-bit hash and state; we use just the first 64-bits. More... | |
std::size_t | m_size64 |
murmur3 produces 128-bit hash and state; we use just the first 64-bits. More... | |
Static Private Attributes | |
static constexpr auto | SEED {0x8BADF00D} |
Seed value. More... | |
Murmur3 hash function implementation.
Adapted from http://code.google.com/p/smhasher/
MurmurHash3 was written by Austin Appleby, and is placed in the public domain. The author hereby disclaims copyright to this source code.
Note - The x86 and x64 versions do not produce the same results, as the algorithms are optimized for their respective platforms. You can still compile and run any of them on any platform, but your performance with the non-native version will be less than optimal.
Definition at line 55 of file hash-murmur3.h.
ns3::Hash::Function::Murmur3::Murmur3 | ( | ) |
Constructor, clears internal state.
Definition at line 523 of file hash-murmur3.cc.
References clear().
|
overridevirtual |
Restore initial state.
Implements ns3::Hash::Implementation.
Definition at line 570 of file hash-murmur3.cc.
References m_hash32, m_hash64, m_size32, m_size64, and SEED.
Referenced by Murmur3().
|
overridevirtual |
Compute 32-bit hash of a byte buffer.
Call clear () between calls to GetHash32() to reset the internal state and hash each buffer separately.
If you don't call clear() between calls to GetHash32, you can hash successive buffers. The final return value will be the cumulative hash across all calls.
[in] | buffer | pointer to the beginning of the buffer |
[in] | size | length of the buffer, in bytes |
Implements ns3::Hash::Implementation.
Definition at line 529 of file hash-murmur3.cc.
References nlohmann::detail::hash(), m_hash32, m_size32, ns3::Hash::Function::Murmur3Implementation::MurmurHash3_x86_32_fin(), and ns3::Hash::Function::Murmur3Implementation::MurmurHash3_x86_32_incr().
|
overridevirtual |
Compute 64-bit hash of a byte buffer.
Call clear () between calls to GetHash64() to reset the internal state and hash each buffer separately.
If you don't call clear() between calls to GetHash64, you can hash successive buffers. The final return value will be the cumulative hash across all calls.
[in] | buffer | pointer to the beginning of the buffer |
[in] | size | length of the buffer, in bytes |
Reimplemented from ns3::Hash::Implementation.
Definition at line 542 of file hash-murmur3.cc.
References nlohmann::detail::hash(), m_hash64, m_size64, ns3::Hash::Function::Murmur3Implementation::MurmurHash3_x86_128_fin(), and ns3::Hash::Function::Murmur3Implementation::MurmurHash3_x86_128_incr().
|
private |
Cache last hash value, and total bytes hashed (needed to finalize), for incremental hashing.
Definition at line 111 of file hash-murmur3.h.
Referenced by clear(), and GetHash32().
|
private |
murmur3 produces 128-bit hash and state; we use just the first 64-bits.
Definition at line 117 of file hash-murmur3.h.
Referenced by clear(), and GetHash64().
|
private |
Cache last hash value, and total bytes hashed (needed to finalize), for incremental hashing.
Definition at line 112 of file hash-murmur3.h.
Referenced by clear(), and GetHash32().
|
private |
murmur3 produces 128-bit hash and state; we use just the first 64-bits.
Definition at line 118 of file hash-murmur3.h.
Referenced by clear(), and GetHash64().
|
staticconstexprprivate |
Seed value.
This has to be a constant for all MPI ranks to generate the same hash from the same string.
Definition at line 104 of file hash-murmur3.h.
Referenced by clear().