32 #include <sys/types.h>
48 namespace Fnv1aImplementation {
136 #if !defined(__FNV_H__)
142 #define FNV_VERSION "5.0.2"
159 #define FNV0_32_INIT ((Fnv1aImplementation::Fnv32_t)0)
176 #define FNV1_32_INIT ((Fnv1aImplementation::Fnv32_t)0x811c9dc5)
177 #define FNV1_32A_INIT FNV1_32_INIT
184 #define HAVE_64BIT_LONG_LONG
191 #if defined(HAVE_64BIT_LONG_LONG)
208 #if defined(HAVE_64BIT_LONG_LONG)
209 #define FNV0_64_INIT ((Fnv1aImplementation::Fnv64_t)0)
211 extern const Fnv64_t fnv0_64_init;
212 #define FNV0_64_INIT (Fnv1aImplementation::fnv0_64_init)
228 #if defined(HAVE_64BIT_LONG_LONG)
229 #define FNV1_64_INIT ((Fnv1aImplementation::Fnv64_t)0xcbf29ce484222325ULL)
230 #define FNV1A_64_INIT FNV1_64_INIT
232 extern const fnv1_64_init;
233 extern const Fnv64_t fnv1a_64_init;
234 #define FNV1_64_INIT (fnv1_64_init)
235 #define FNV1A_64_INIT (fnv1a_64_init)
258 Fnv32_t
fnv_32_buf(
void *buf,
size_t len, Fnv32_t hashval);
259 Fnv32_t
fnv_32_str(
char *buf, Fnv32_t hashval);
262 Fnv32_t
fnv_32a_buf(
void *buf,
size_t len, Fnv32_t hashval);
266 Fnv64_t
fnv_64_buf(
void *buf,
size_t len, Fnv64_t hashval);
267 Fnv64_t
fnv_64_str(
char *buf, Fnv64_t hashval);
270 Fnv64_t
fnv_64a_buf(
void *buf,
size_t len, Fnv64_t hashval);
345 #define FNV_32_PRIME ((Fnv1aImplementation::Fnv32_t)0x01000193)
365 unsigned char *bp = (
unsigned char *)buf;
366 unsigned char *be = bp + len;
377 #if defined(NO_FNV_GCC_OPTIMIZATION)
380 hval += (hval<<1) + (hval<<4) + (hval<<7) + (hval<<8) + (hval<<24);
405 unsigned char *
s = (
unsigned char *)str;
416 #if defined(NO_FNV_GCC_OPTIMIZATION)
419 hval += (hval<<1) + (hval<<4) + (hval<<7) + (hval<<8) + (hval<<24);
495 #if !defined(HAVE_64BIT_LONG_LONG)
496 const Fnv64_t fnv1a_64_init = { 0x84222325, 0xcbf29ce4 };
503 #if defined(HAVE_64BIT_LONG_LONG)
504 #define FNV_64_PRIME ((Fnv1aImplementation::Fnv64_t)0x100000001b3ULL)
506 #define FNV_64_PRIME_LOW ((unsigned long)0x1b3)
507 #define FNV_64_PRIME_SHIFT (8)
528 unsigned char *bp = (
unsigned char *)buf;
529 unsigned char *be = bp + len;
531 #if defined(HAVE_64BIT_LONG_LONG)
541 #if defined(NO_FNV_GCC_OPTIMIZATION)
544 hval += (hval << 1) + (hval << 4) + (hval << 5) +
545 (hval << 7) + (hval << 8) + (hval << 40);
551 unsigned long val[4];
552 unsigned long tmp[4];
557 val[0] = hval.w32[0];
558 val[1] = (val[0] >> 16);
560 val[2] = hval.w32[1];
561 val[3] = (val[2] >> 16);
570 val[0] ^= (
unsigned long)*bp++;
584 tmp[0] = val[0] * FNV_64_PRIME_LOW;
585 tmp[1] = val[1] * FNV_64_PRIME_LOW;
586 tmp[2] = val[2] * FNV_64_PRIME_LOW;
587 tmp[3] = val[3] * FNV_64_PRIME_LOW;
589 tmp[2] += val[0] << FNV_64_PRIME_SHIFT;
590 tmp[3] += val[1] << FNV_64_PRIME_SHIFT;
592 tmp[1] += (tmp[0] >> 16);
593 val[0] = tmp[0] & 0xffff;
594 tmp[2] += (tmp[1] >> 16);
595 val[1] = tmp[1] & 0xffff;
596 val[3] = tmp[3] + (tmp[2] >> 16);
597 val[2] = tmp[2] & 0xffff;
608 hval.w32[1] = ((val[3]<<16) | val[2]);
609 hval.w32[0] = ((val[1]<<16) | val[0]);
634 unsigned char *
s = (
unsigned char *)str;
636 #if defined(HAVE_64BIT_LONG_LONG)
647 #if defined(NO_FNV_GCC_OPTIMIZATION)
650 hval += (hval << 1) + (hval << 4) + (hval << 5) +
651 (hval << 7) + (hval << 8) + (hval << 40);
657 unsigned long val[4];
658 unsigned long tmp[4];
663 val[0] = hval.w32[0];
664 val[1] = (val[0] >> 16);
666 val[2] = hval.w32[1];
667 val[3] = (val[2] >> 16);
689 tmp[0] = val[0] * FNV_64_PRIME_LOW;
690 tmp[1] = val[1] * FNV_64_PRIME_LOW;
691 tmp[2] = val[2] * FNV_64_PRIME_LOW;
692 tmp[3] = val[3] * FNV_64_PRIME_LOW;
694 tmp[2] += val[0] << FNV_64_PRIME_SHIFT;
695 tmp[3] += val[1] << FNV_64_PRIME_SHIFT;
697 tmp[1] += (tmp[0] >> 16);
698 val[0] = tmp[0] & 0xffff;
699 tmp[2] += (tmp[1] >> 16);
700 val[1] = tmp[1] & 0xffff;
701 val[3] = tmp[3] + (tmp[2] >> 16);
702 val[2] = tmp[2] & 0xffff;
708 val[0] ^= (
unsigned long)(*s++);
714 hval.w32[1] = ((val[3]<<16) | val[2]);
715 hval.w32[0] = ((val[1]<<16) | val[0]);
NS_LOG_COMPONENT_DEFINE("GrantedTimeWindowMpiInterface")
Fnv64_t fnv_64_str(char *buf, Fnv64_t hashval)
Fnv32_t fnv_32a_str(char *buf, Fnv32_t hashval)
uint32_t m_hash32
Cache last hash value, for incremental hashing.
Fnv32_t fnv_32a_buf(void *buf, size_t len, Fnv32_t hashval)
uint64_t GetHash64(const char *buffer, const size_t size)
Compute 64-bit hash of a byte buffer.
Fnv32_t fnv_32_str(char *buf, Fnv32_t hashval)
Fnv32_t fnv_32_buf(void *buf, size_t len, Fnv32_t hashval)
Fnv64_t fnv_64_buf(void *buf, size_t len, Fnv64_t hashval)
Fnv64_t fnv_64a_str(char *buf, Fnv64_t hashval)
uint32_t GetHash32(const char *buffer, const size_t size)
Compute 32-bit hash of a byte buffer.
virtual void clear(void)
Restore initial state.
uint64_t m_hash64
Cache last hash value, for incremental hashing.
Fnv64_t fnv_64a_buf(void *buf, size_t len, Fnv64_t hashval)