X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Flibhashkit%2Fmurmur.cc;h=4ff0f7c65f58a5e82feeb1c21a2c6f39d9d7d7f2;hb=04ef6e10123e867ca7e7b4b09f45e0e1a84aaf40;hp=f3e8fe6ac7eebcca2d92d72e69d19e249aed2934;hpb=5e760300d15ef4c5b7eed3fb9f37920ebca2f6ec;p=awesomized%2Flibmemcached diff --git a/src/libhashkit/murmur.cc b/src/libhashkit/murmur.cc index f3e8fe6a..4ff0f7c6 100644 --- a/src/libhashkit/murmur.cc +++ b/src/libhashkit/murmur.cc @@ -1,5 +1,5 @@ /* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: - * + * * HashKit library * * Copyright (C) 2011-2012 Data Differential, http://datadifferential.com/ @@ -52,7 +52,7 @@ Updated to murmur2 hash - BP */ -#include +#include "libhashkit/common.h" #ifdef HAVE_MURMUR_HASH @@ -81,8 +81,16 @@ uint32_t hashkit_murmur(const char *key, size_t length, void *context) while(length >= 4) { - unsigned int k; - memcpy(&k, data, sizeof(unsigned int)); + uint32_t k; +#if WORDS_BIGENDIAN + k = (data[0]<<24) + | (data[1]<<16) + | (data[2]<<8) + | (data[3]) + ; +#else + memcpy(&k, data, sizeof(k)); +#endif k *= m; k ^= k >> r; @@ -99,9 +107,15 @@ uint32_t hashkit_murmur(const char *key, size_t length, void *context) switch(length) { +#if WORDS_BIGENDIAN + case 3: h ^= ((uint32_t)data[2]) << 8; /* fall through */ + case 2: h ^= ((uint32_t)data[1]) << 16; /* fall through */ + case 1: h ^= ((uint32_t)data[0]) << 24; +#else case 3: h ^= ((uint32_t)data[2]) << 16; /* fall through */ case 2: h ^= ((uint32_t)data[1]) << 8; /* fall through */ case 1: h ^= data[0]; +#endif h *= m; default: break; };