Counter Strike : Global Offensive Source Code
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//======= Copyright � Valve Corporation, All rights reserved. =================
//
// Public domain MurmurHash3 by Austin Appleby is a very solid general-purpose
// hash with a 32-bit output. References:
// http://code.google.com/p/smhasher/ (home of MurmurHash3)
// https://sites.google.com/site/murmurhash/avalanche
// http://www.strchr.com/hash_functions
//
//=============================================================================
#ifndef MURMURHASH3_H
#define MURMURHASH3_H
#if defined(_WIN32)
#pragma once
#endif
uint32 MurmurHash3_32( const void *key, size_t len, uint32 seed, bool bCaselessStringVariant = false );
inline uint32 MurmurHash3String( const char *pszKey, size_t len ) { return MurmurHash3_32( pszKey, len, 1047 /*anything will do for a seed*/, false ); }
inline uint32 MurmurHash3StringCaseless( const char *pszKey, size_t len ) { return MurmurHash3_32( pszKey, len, 1047 /*anything will do for a seed*/, true ); }
inline uint32 MurmurHash3String( const char *pszKey ) { return MurmurHash3String( pszKey, strlen( pszKey ) ); }
inline uint32 MurmurHash3StringCaseless( const char *pszKey ) { return MurmurHash3StringCaseless( pszKey, strlen( pszKey ) ); }
template <typename T> inline uint32 MurmurHash3Item( const T &item ) { return MurmurHash3_32( &item, sizeof(item), 1047 ); }
inline uint32 MurmurHash3Int( uint32 h ) { h ^= h >> 16; h *= 0x85ebca6b; h ^= h >> 13; h *= 0xc2b2ae35; h ^= h >> 16; return h; }
template <> inline uint32 MurmurHash3Item( const uint32 &item ) { return MurmurHash3Int( item ); }
template <> inline uint32 MurmurHash3Item( const int32 &item ) { return MurmurHash3Int( item ); }
template<typename T> struct MurmurHash3Functor { typedef uint32 TargetType; TargetType operator()(const T &key) const { return MurmurHash3Item( key ); } };
template<> struct MurmurHash3Functor<char *> { typedef uint32 TargetType; TargetType operator()(const char *key) const { return MurmurHash3String( key ); } };
template<> struct MurmurHash3Functor<const char *> { typedef uint32 TargetType; TargetType operator()(const char *key) const { return MurmurHash3String( key ); } };
#endif // MURMURHASH3_H
|