diff options
Diffstat (limited to 'core/hashfuncs.h')
-rw-r--r-- | core/hashfuncs.h | 61 |
1 files changed, 28 insertions, 33 deletions
diff --git a/core/hashfuncs.h b/core/hashfuncs.h index 121d7e8c59..aff6772d68 100644 --- a/core/hashfuncs.h +++ b/core/hashfuncs.h @@ -29,15 +29,14 @@ #ifndef HASHFUNCS_H #define HASHFUNCS_H -#include "math_funcs.h" #include "math_defs.h" +#include "math_funcs.h" #include "typedefs.h" /** * Hashing functions */ - /** * DJB2 Hash function * @param C String @@ -45,7 +44,7 @@ */ static inline uint32_t hash_djb2(const char *p_cstr) { - const unsigned char* chr=(const unsigned char*)p_cstr; + const unsigned char *chr = (const unsigned char *)p_cstr; uint32_t hash = 5381; uint32_t c; @@ -55,99 +54,95 @@ static inline uint32_t hash_djb2(const char *p_cstr) { return hash; } -static inline uint32_t hash_djb2_buffer(const uint8_t *p_buff, int p_len,uint32_t p_prev=5381) { +static inline uint32_t hash_djb2_buffer(const uint8_t *p_buff, int p_len, uint32_t p_prev = 5381) { uint32_t hash = p_prev; - for(int i=0;i<p_len;i++) + for (int i = 0; i < p_len; i++) hash = ((hash << 5) + hash) + p_buff[i]; /* hash * 33 + c */ return hash; } -static inline uint32_t hash_djb2_one_32(uint32_t p_in,uint32_t p_prev=5381) { +static inline uint32_t hash_djb2_one_32(uint32_t p_in, uint32_t p_prev = 5381) { - return ((p_prev<<5)+p_prev)+p_in; + return ((p_prev << 5) + p_prev) + p_in; } static inline uint32_t hash_one_uint64(const uint64_t p_int) { - uint64_t v=p_int; + uint64_t v = p_int; v = (~v) + (v << 18); // v = (v << 18) - v - 1; v = v ^ (v >> 31); v = v * 21; // v = (v + (v << 2)) + (v << 4); v = v ^ (v >> 11); v = v + (v << 6); v = v ^ (v >> 22); - return (int) v; + return (int)v; } -static inline uint32_t hash_djb2_one_float(float p_in,uint32_t p_prev=5381) { +static inline uint32_t hash_djb2_one_float(float p_in, uint32_t p_prev = 5381) { union { float f; uint32_t i; } u; // Normalize +/- 0.0 and NaN values so they hash the same. - if (p_in==0.0f) - u.f=0.0; + if (p_in == 0.0f) + u.f = 0.0; else if (Math::is_nan(p_in)) - u.f=Math_NAN; + u.f = Math_NAN; else - u.f=p_in; + u.f = p_in; - return ((p_prev<<5)+p_prev)+u.i; + return ((p_prev << 5) + p_prev) + u.i; } // Overload for real_t size changes -static inline uint32_t hash_djb2_one_float(double p_in,uint32_t p_prev=5381) { +static inline uint32_t hash_djb2_one_float(double p_in, uint32_t p_prev = 5381) { union { double d; uint64_t i; } u; // Normalize +/- 0.0 and NaN values so they hash the same. - if (p_in==0.0f) - u.d=0.0; + if (p_in == 0.0f) + u.d = 0.0; else if (Math::is_nan(p_in)) - u.d=Math_NAN; + u.d = Math_NAN; else - u.d=p_in; + u.d = p_in; - return ((p_prev<<5)+p_prev) + hash_one_uint64(u.i); + return ((p_prev << 5) + p_prev) + hash_one_uint64(u.i); } -template<class T> +template <class T> static inline uint32_t make_uint32_t(T p_in) { union { T t; uint32_t _u32; } _u; - _u._u32=0; - _u.t=p_in; + _u._u32 = 0; + _u.t = p_in; return _u._u32; } +static inline uint64_t hash_djb2_one_64(uint64_t p_in, uint64_t p_prev = 5381) { -static inline uint64_t hash_djb2_one_64(uint64_t p_in,uint64_t p_prev=5381) { - - return ((p_prev<<5)+p_prev)+p_in; + return ((p_prev << 5) + p_prev) + p_in; } - -template<class T> +template <class T> static inline uint64_t make_uint64_t(T p_in) { union { T t; uint64_t _u64; } _u; - _u._u64=0; // in case p_in is smaller + _u._u64 = 0; // in case p_in is smaller - _u.t=p_in; + _u.t = p_in; return _u._u64; } - - #endif |