52 #ifndef NAMESPACE_FOR_HASH_FUNCTIONS
53 #define NAMESPACE_FOR_HASH_FUNCTIONS util
58 #if defined(FARMHASH_UINT128_T_DEFINED)
59 #if defined(__clang__)
60 #if !defined(uint128_t)
61 #define uint128_t __uint128_t
68 return static_cast<uint64_t>(x >> 64);
136 const uint64_t kMul = 0x9ddfea08eb382d69ULL;
160 const uint64_t kMul = 0x9ddfea08eb382d69ULL;
174 const uint64_t kMul = 0x9ddfea08eb382d69ULL;
183 #ifndef FARMHASH_NO_CXX_STRING
193 template <
typename Str>
194 inline size_t Hash(
const Str& s) {
195 assert(
sizeof(s[0]) == 1);
196 return Hash(s.data(), s.length());
202 template <
typename Str>
204 assert(
sizeof(s[0]) == 1);
205 return Hash32(s.data(), s.length());
212 template <
typename Str>
214 assert(
sizeof(s[0]) == 1);
222 template <
typename Str>
224 assert(
sizeof(s[0]) == 1);
225 return Hash64(s.data(), s.length());
232 template <
typename Str>
234 assert(
sizeof(s[0]) == 1);
242 template <
typename Str>
244 assert(
sizeof(s[0]) == 1);
251 template <
typename Str>
253 assert(
sizeof(s[0]) == 1);
254 return Hash128(s.data(), s.length());
261 template <
typename Str>
263 assert(
sizeof(s[0]) == 1);
270 template <
typename Str>
272 assert(
sizeof(s[0]) == 1);
278 template <
typename Str>
280 assert(
sizeof(s[0]) == 1);
285 template <
typename Str>
287 assert(
sizeof(s[0]) == 1);
296 #if defined(__BIG_ENDIAN__)
297 #if !defined(FARMHASH_BIG_ENDIAN)
298 #define FARMHASH_BIG_ENDIAN
300 #elif defined(__LITTLE_ENDIAN__)
302 #elif defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && (__BYTE_ORDER == __ORDER_LITTLE_ENDIAN__)
304 #elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER == __ORDER_BIG_ENDIAN__)
305 #if !defined(FARMHASH_BIG_ENDIAN)
306 #define FARMHASH_BIG_ENDIAN
308 #elif defined(__linux__) || defined(__CYGWIN__) || defined( __GNUC__ ) || defined( __GNU_LIBRARY__ )
310 #if BYTE_ORDER == BIG_ENDIAN
311 #if !defined(FARMHASH_BIG_ENDIAN)
312 #define FARMHASH_BIG_ENDIAN
315 #elif defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) || defined(__s390x__)
316 #include <sys/endian.h>
317 #if BYTE_ORDER == BIG_ENDIAN
318 #if !defined(FARMHASH_BIG_ENDIAN)
319 #define FARMHASH_BIG_ENDIAN
322 #elif defined(_WIN32)
325 #error "Unable to determine endianness!"
uint64 Uint128High64(const uint128 &x)
uint64 Uint128Low64(const uint128 &x)
uint64 Hash128to64(const uint128 &x)
#define NAMESPACE_FOR_HASH_FUNCTIONS
uint32_t Hash32(const Str &s)
uint128_t Fingerprint128(const Str &s)
uint64_t Fingerprint64(const Str &s)
size_t Hash(const Str &s)
uint64_t Hash64WithSeed(const Str &s, uint64_t seed)
uint32_t Hash32WithSeed(const Str &s, uint32_t seed)
uint128_t Hash128WithSeed(const Str &s, uint128_t seed)
uint64_t Hash64WithSeeds(const Str &s, uint64_t seed0, uint64_t seed1)
uint128_t Uint128(uint64_t lo, uint64_t hi)
uint32_t Fingerprint32(const Str &s)
uint64_t Fingerprint(uint64_t x)
uint128_t Hash128(const Str &s)
std::pair< uint64_t, uint64_t > uint128_t
uint64_t Hash64(const Str &s)
unsigned __int64 uint64_t