33 #include <sys/types.h> 
   55 namespace Fnv1aImplementation {
 
  149 #if !defined(__FNV_H__) 
  156 #define FNV_VERSION "5.0.2"  
  162 typedef u_int32_t Fnv32_t; 
  172 #define FNV0_32_INIT ((Fnv1aImplementation::Fnv32_t)0) 
  188 #define FNV1_32_INIT ((Fnv1aImplementation::Fnv32_t)0x811c9dc5) 
  190 #define FNV1_32A_INIT FNV1_32_INIT 
  197 #define HAVE_64BIT_LONG_LONG   
  204 #if defined(HAVE_64BIT_LONG_LONG) 
  220 #if defined(HAVE_64BIT_LONG_LONG) 
  221 #define FNV0_64_INIT ((Fnv1aImplementation::Fnv64_t)0) 
  223 extern const Fnv64_t fnv0_64_init;
 
  224 #define FNV0_64_INIT (Fnv1aImplementation::fnv0_64_init) 
  240 #if defined(HAVE_64BIT_LONG_LONG) 
  241 #define FNV1_64_INIT ((Fnv1aImplementation::Fnv64_t)0xcbf29ce484222325ULL) 
  243 #define FNV1A_64_INIT FNV1_64_INIT 
  245 extern const fnv1_64_init;
 
  246 extern const Fnv64_t fnv1a_64_init;
 
  247 #define FNV1_64_INIT (fnv1_64_init) 
  249 #define FNV1A_64_INIT (fnv1a_64_init) 
  284  Fnv64_t 
fnv_64_buf(
void *buf, 
size_t len, Fnv64_t hval);
 
  289  Fnv64_t 
fnv_64a_buf(
void *buf, 
size_t len, Fnv64_t hashval);
 
  364 #define FNV_32_PRIME ((Fnv1aImplementation::Fnv32_t)0x01000193) 
  383     unsigned char *bp = (
unsigned char *)buf;   
 
  384     unsigned char *be = bp + len;       
 
  395 #if defined(NO_FNV_GCC_OPTIMIZATION) 
  398     hval += (hval<<1) + (hval<<4) + (hval<<7) + (hval<<8) + (hval<<24);
 
  422     unsigned char *s = (
unsigned char *)str;    
 
  433 #if defined(NO_FNV_GCC_OPTIMIZATION) 
  436     hval += (hval<<1) + (hval<<4) + (hval<<7) + (hval<<8) + (hval<<24);
 
  512 #if !defined(HAVE_64BIT_LONG_LONG) 
  513 const Fnv64_t fnv1a_64_init = { 0x84222325, 0xcbf29ce4 };
 
  521 #if defined(HAVE_64BIT_LONG_LONG) 
  522 #define FNV_64_PRIME ((Fnv1aImplementation::Fnv64_t)0x100000001b3ULL) 
  524 #define FNV_64_PRIME_LOW ((unsigned long)0x1b3)  
  525 #define FNV_64_PRIME_SHIFT (8)       
  546     unsigned char *bp = (
unsigned char *)buf;   
 
  547     unsigned char *be = bp + len;       
 
  549 #if defined(HAVE_64BIT_LONG_LONG) 
  559 #if defined(NO_FNV_GCC_OPTIMIZATION) 
  562     hval += (hval << 1) + (hval << 4) + (hval << 5) +
 
  563         (hval << 7) + (hval << 8) + (hval << 40);
 
  569     unsigned long val[4];           
 
  570     unsigned long tmp[4];           
 
  575     val[0] = hval.w32[0];
 
  576     val[1] = (val[0] >> 16);
 
  578     val[2] = hval.w32[1];
 
  579     val[3] = (val[2] >> 16);
 
  588     val[0] ^= (
unsigned long)*bp++;
 
  602     tmp[0] = val[0] * FNV_64_PRIME_LOW;
 
  603     tmp[1] = val[1] * FNV_64_PRIME_LOW;
 
  604     tmp[2] = val[2] * FNV_64_PRIME_LOW;
 
  605     tmp[3] = val[3] * FNV_64_PRIME_LOW;
 
  607     tmp[2] += val[0] << FNV_64_PRIME_SHIFT; 
 
  608     tmp[3] += val[1] << FNV_64_PRIME_SHIFT; 
 
  610     tmp[1] += (tmp[0] >> 16);
 
  611     val[0] = tmp[0] & 0xffff;
 
  612     tmp[2] += (tmp[1] >> 16);
 
  613     val[1] = tmp[1] & 0xffff;
 
  614     val[3] = tmp[3] + (tmp[2] >> 16);
 
  615     val[2] = tmp[2] & 0xffff;
 
  626     hval.w32[1] = ((val[3]<<16) | val[2]);
 
  627     hval.w32[0] = ((val[1]<<16) | val[0]);
 
  651     unsigned char *s = (
unsigned char *)str;    
 
  653 #if defined(HAVE_64BIT_LONG_LONG) 
  664 #if defined(NO_FNV_GCC_OPTIMIZATION) 
  667     hval += (hval << 1) + (hval << 4) + (hval << 5) +
 
  668         (hval << 7) + (hval << 8) + (hval << 40);
 
  674     unsigned long val[4];   
 
  675     unsigned long tmp[4];   
 
  680     val[0] = hval.w32[0];
 
  681     val[1] = (val[0] >> 16);
 
  683     val[2] = hval.w32[1];
 
  684     val[3] = (val[2] >> 16);
 
  706     tmp[0] = val[0] * FNV_64_PRIME_LOW;
 
  707     tmp[1] = val[1] * FNV_64_PRIME_LOW;
 
  708     tmp[2] = val[2] * FNV_64_PRIME_LOW;
 
  709     tmp[3] = val[3] * FNV_64_PRIME_LOW;
 
  711     tmp[2] += val[0] << FNV_64_PRIME_SHIFT; 
 
  712     tmp[3] += val[1] << FNV_64_PRIME_SHIFT; 
 
  714     tmp[1] += (tmp[0] >> 16);
 
  715     val[0] = tmp[0] & 0xffff;
 
  716     tmp[2] += (tmp[1] >> 16);
 
  717     val[1] = tmp[1] & 0xffff;
 
  718     val[3] = tmp[3] + (tmp[2] >> 16);
 
  719     val[2] = tmp[2] & 0xffff;
 
  725     val[0] ^= (
unsigned long)(*s++);
 
  731     hval.w32[1] = ((val[3]<<16) | val[2]);
 
  732     hval.w32[0] = ((val[1]<<16) | val[0]);
 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
 
#define FNV_32_PRIME
32 bit magic FNV-1a prime 
 
u_int32_t Fnv32_t
32 bit FNV-0 hash type 
 
ns3::Hash::Function::Fnv1a declaration. 
 
Fnv32_t fnv_32a_buf(void *buf, size_t len, Fnv32_t hashval)
fnv_32a_buf - perform a 32 bit Fowler/Noll/Vo FNV-1a hash on a buffer 
 
#define FNV1_32A_INIT
32 bit FNV-1 and FNV-1a non-zero initial basis 
 
uint32_t m_hash32
Cache last hash value, for incremental hashing. 
 
uint64_t GetHash64(const char *buffer, const size_t size)
Compute 64-bit hash of a byte buffer. 
 
Fnv64_t fnv_64a_buf(void *buf, size_t len, Fnv64_t hashval)
fnv_64a_buf - perform a 64 bit Fowler/Noll/Vo FNV-1a hash on a buffer 
 
Fnv32_t fnv_32a_str(char *buf, Fnv32_t hashval)
fnv_32a_str - perform a 32 bit Fowler/Noll/Vo FNV-1a hash on a string 
 
#define FNV1A_64_INIT
64 bit FNV-1 non-zero initial basis 
 
Fnv64_t fnv_64a_str(char *buf, Fnv64_t hashval)
fnv_64a_str - perform a 64 bit Fowler/Noll/Vo FNV-1a hash on a buffer 
 
#define FNV_64_PRIME
FNV-1a defines the initial basis to be non-zero. 
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
Fnv64_t fnv_64_str(char *str, Fnv64_t hval)
fnv_64a_str - perform a 64 bit Fowler/Noll/Vo FNV-1a hash on a buffer 
 
uint32_t GetHash32(const char *buffer, const size_t size)
Compute 32-bit hash of a byte buffer. 
 
Fnv32_t fnv_32_str(char *str, Fnv32_t hval)
fnv_32a_str - perform a 32 bit Fowler/Noll/Vo FNV-1a hash on a string 
 
virtual void clear(void)
Restore initial state. 
 
uint64_t m_hash64
Cache last hash value, for incremental hashing. 
 
Fnv64_t fnv_64_buf(void *buf, size_t len, Fnv64_t hval)
fnv_64a_buf - perform a 64 bit Fowler/Noll/Vo FNV-1a hash on a buffer 
 
u_int64_t Fnv64_t
64 bit FNV-0 hash 
 
Fnv32_t fnv_32_buf(void *buf, size_t len, Fnv32_t hval)
fnv_32a_buf - perform a 32 bit Fowler/Noll/Vo FNV-1a hash on a buffer