A Discrete-Event Network Simulator
API
ns3::Hash::Function::Murmur3 Class Reference

Murmur3 hash function implementation. More...

#include "hash-murmur3.h"

+ Inheritance diagram for ns3::Hash::Function::Murmur3:
+ Collaboration diagram for ns3::Hash::Function::Murmur3:

Public Member Functions

 Murmur3 ()
 Constructor, clears internal state. More...
 
virtual void clear (void)
 Restore initial state. More...
 
uint32_t GetHash32 (const char *buffer, const std::size_t size)
 Compute 32-bit hash of a byte buffer. More...
 
uint64_t GetHash64 (const char *buffer, const std::size_t size)
 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 (void) const
 Get the reference count of the object. More...
 
SimpleRefCountoperator= ([[maybe_unused]] const SimpleRefCount &o)
 Assignment operator. More...
 
void Ref (void) const
 Increment the reference count. More...
 
void Unref (void) const
 Decrement the reference count. More...
 

Private Types

enum  seed { SEED = 0x8BADF00D }
 Seed value. 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...
 

Detailed Description

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 53 of file hash-murmur3.h.

Member Enumeration Documentation

◆ seed

Seed value.

This has to be a constant for all MPI ranks to generate the same hash from the same string.

Enumerator
SEED 

Definition at line 102 of file hash-murmur3.h.

Constructor & Destructor Documentation

◆ Murmur3()

ns3::Hash::Function::Murmur3::Murmur3 ( )

Constructor, clears internal state.

Definition at line 522 of file hash-murmur3.cc.

References clear().

+ Here is the call graph for this function:

Member Function Documentation

◆ clear()

void ns3::Hash::Function::Murmur3::clear ( void  )
virtual

Restore initial state.

Implements ns3::Hash::Implementation.

Definition at line 572 of file hash-murmur3.cc.

References m_hash32, m_hash64, m_size32, m_size64, and SEED.

Referenced by Murmur3().

+ Here is the caller graph for this function:

◆ GetHash32()

uint32_t ns3::Hash::Function::Murmur3::GetHash32 ( const char *  buffer,
const std::size_t  size 
)
virtual

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.

Parameters
[in]bufferpointer to the beginning of the buffer
[in]sizelength of the buffer, in bytes
Returns
32-bit hash of the buffer

Implements ns3::Hash::Implementation.

Definition at line 528 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().

+ Here is the call graph for this function:

◆ GetHash64()

uint64_t ns3::Hash::Function::Murmur3::GetHash64 ( const char *  buffer,
const std::size_t  size 
)
virtual

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.

Parameters
[in]bufferpointer to the beginning of the buffer
[in]sizelength of the buffer, in bytes
Returns
64-bit hash of the buffer

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(), ns3::Hash::Function::Murmur3Implementation::MurmurHash3_x86_128_incr(), and test-ns3::result.

+ Here is the call graph for this function:

Member Data Documentation

◆ m_hash32

uint32_t ns3::Hash::Function::Murmur3::m_hash32
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().

◆ m_hash64

uint64_t ns3::Hash::Function::Murmur3::m_hash64[2]
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().

◆ m_size32

std::size_t ns3::Hash::Function::Murmur3::m_size32
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().

◆ m_size64

std::size_t ns3::Hash::Function::Murmur3::m_size64
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().


The documentation for this class was generated from the following files: