summaryrefslogtreecommitdiff
path: root/core/hashfuncs.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/hashfuncs.h')
-rw-r--r--core/hashfuncs.h61
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