126 lines
4.7 KiB
C++
126 lines
4.7 KiB
C++
// Copyright (C) 2011 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
#undef DLIB_MURMUR_HAsH_3_ABSTRACT_Hh_
|
|
#ifdef DLIB_MURMUR_HAsH_3_ABSTRACT_Hh_
|
|
|
|
#include "../uintn.h"
|
|
#include <utility>
|
|
|
|
namespace dlib
|
|
{
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
uint32 murmur_hash3 (
|
|
const void* key,
|
|
const int len,
|
|
const uint32 seed = 0
|
|
);
|
|
/*!
|
|
requires
|
|
- key == a pointer to a block of memory len bytes long
|
|
ensures
|
|
- returns a 32bit hash of the len bytes pointed to by key.
|
|
- Each value of seed results in a different hash function being used.
|
|
(e.g. murmur_hash3(key,len,0) should generally not be equal to murmur_hash3(key,len,1))
|
|
- This function is machine architecture agnostic and should always give the same
|
|
hash value when presented with the same inputs.
|
|
- This hashing algorithm is Austin Appleby's excellent MurmurHash3_x86_32.
|
|
See: http://code.google.com/p/smhasher/
|
|
!*/
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
inline uint32 murmur_hash3_2 (
|
|
const uint32 v1,
|
|
const uint32 v2
|
|
);
|
|
/*!
|
|
ensures
|
|
- returns a 32bit hash of the two integers given to this function.
|
|
- This function is machine architecture agnostic and should always give the same
|
|
hash value when presented with the same inputs.
|
|
- This hashing algorithm is Austin Appleby's excellent MurmurHash3_x86_32.
|
|
See: http://code.google.com/p/smhasher/
|
|
!*/
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
inline uint32 murmur_hash3_3 (
|
|
const uint32 v1,
|
|
const uint32 v2,
|
|
const uint32 v3
|
|
);
|
|
/*!
|
|
ensures
|
|
- returns a 32bit hash of the three integers given to this function.
|
|
- This function is machine architecture agnostic and should always give the same
|
|
hash value when presented with the same inputs.
|
|
- This hashing algorithm is Austin Appleby's excellent MurmurHash3_x86_32.
|
|
See: http://code.google.com/p/smhasher/
|
|
!*/
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
std::pair<uint64,uint64> murmur_hash3_128bit (
|
|
const void* key,
|
|
const int len,
|
|
const uint64 seed = 0
|
|
);
|
|
/*!
|
|
requires
|
|
- key == a pointer to a block of memory len bytes long
|
|
ensures
|
|
- returns a 128bit hash (as two 64bit numbers) of the len bytes pointed to by key.
|
|
- Each value of seed results in a different hash function being used.
|
|
(e.g. murmur_hash3_128bit(key,len,0) should generally not be equal to
|
|
murmur_hash3_128bit(key,len,1))
|
|
- This function is machine architecture agnostic and should always give the same
|
|
hash value when presented with the same inputs.
|
|
- This hashing algorithm is Austin Appleby's excellent MurmurHash3_x64_128.
|
|
See: http://code.google.com/p/smhasher/
|
|
!*/
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
std::pair<uint64,uint64> murmur_hash3_128bit (
|
|
const uint32& v1,
|
|
const uint32& v2,
|
|
const uint32& v3,
|
|
const uint32& v4
|
|
);
|
|
/*!
|
|
ensures
|
|
- returns a 128bit hash (as two 64bit numbers) of the 4 integers given to this
|
|
function.
|
|
- This function is machine architecture agnostic and should always give the
|
|
same hash value when presented with the same inputs.
|
|
- This hashing algorithm is Austin Appleby's excellent MurmurHash3_x64_128.
|
|
See: http://code.google.com/p/smhasher/
|
|
!*/
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
std::pair<uint64,uint64> murmur_hash3_128bit_3 (
|
|
uint64 k1,
|
|
uint64 k2,
|
|
uint64 k3
|
|
);
|
|
/*!
|
|
ensures
|
|
- returns a 128bit hash (as two 64bit numbers) of the 3 integers given to this
|
|
function.
|
|
- This function is machine architecture agnostic and should always give the
|
|
same hash value when presented with the same inputs.
|
|
- This hashing algorithm is Austin Appleby's excellent MurmurHash3_x64_128.
|
|
See: http://code.google.com/p/smhasher/
|
|
!*/
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
}
|
|
|
|
#endif // DLIB_MURMUR_HAsH_3_ABSTRACT_Hh_
|
|
|
|
|