X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fhash.h;h=5a9e2894131f552932bd455aee39e14634fa9829;hb=c5cf10598f8c9f4428291e9df3ecd72a05fb1ccf;hp=f8a72ed91655fdf33363ad3961d796dd00a9471e;hpb=c49d1dd1686277277cb742ec0fc93749214de391;p=sliver-openvswitch.git diff --git a/lib/hash.h b/lib/hash.h index f8a72ed91..5a9e28941 100644 --- a/lib/hash.h +++ b/lib/hash.h @@ -37,6 +37,8 @@ uint32_t hash_bytes(const void *, size_t n_bytes, uint32_t basis); static inline uint32_t hash_int(uint32_t x, uint32_t basis); static inline uint32_t hash_2words(uint32_t, uint32_t); +static inline uint32_t hash_uint64(uint64_t); +static inline uint32_t hash_uint64_basis(uint64_t x, uint32_t basis); uint32_t hash_3words(uint32_t, uint32_t, uint32_t); static inline uint32_t hash_boolean(bool x, uint32_t basis); @@ -115,9 +117,19 @@ static inline uint32_t hash_pointer(const void *p, uint32_t basis) static inline uint32_t hash_2words(uint32_t x, uint32_t y) { - return mhash_finish(mhash_add(mhash_add(x, 0), y), 4); + return mhash_finish(mhash_add(mhash_add(x, 0), y), 8); } +static inline uint32_t hash_uint64(const uint64_t x) +{ + return hash_2words((uint32_t)(x >> 32), (uint32_t)x); +} + +static inline uint32_t hash_uint64_basis(const uint64_t x, + const uint32_t basis) +{ + return hash_3words((uint32_t)(x >> 32), (uint32_t)x, basis); +} #ifdef __cplusplus } #endif