72 #if defined (__cplusplus)    90 #if (defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)) \    91     && !defined(XXH_INLINE_ALL_31684351384)    93 #  define XXH_INLINE_ALL_31684351384    95 #  undef XXH_STATIC_LINKING_ONLY       96 #  define XXH_STATIC_LINKING_ONLY    98 #  undef XXH_PUBLIC_API    99 #  if defined(__GNUC__)   100 #    define XXH_PUBLIC_API static __inline __attribute__((unused))   101 #  elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) )   102 #    define XXH_PUBLIC_API static inline   103 #  elif defined(_MSC_VER)   104 #    define XXH_PUBLIC_API static __inline   107 #    define XXH_PUBLIC_API static   111 #  ifdef XXH_NAMESPACE   112 #    error "XXH_INLINE_ALL with XXH_NAMESPACE is not supported"   117 #  define XXH_NAMESPACE XXH_INLINE_   123 #  define XXH_IPREF(Id)   XXH_INLINE_ ## Id   124 #  define XXH_OK XXH_IPREF(XXH_OK)   125 #  define XXH_ERROR XXH_IPREF(XXH_ERROR)   126 #  define XXH_errorcode XXH_IPREF(XXH_errorcode)   127 #  define XXH32_canonical_t XXH_IPREF(XXH32_canonical_t)   128 #  define XXH64_canonical_t XXH_IPREF(XXH64_canonical_t)   129 #  define XXH128_canonical_t XXH_IPREF(XXH128_canonical_t)   130 #  define XXH32_state_s XXH_IPREF(XXH32_state_s)   131 #  define XXH32_state_t XXH_IPREF(XXH32_state_t)   132 #  define XXH64_state_s XXH_IPREF(XXH64_state_s)   133 #  define XXH64_state_t XXH_IPREF(XXH64_state_t)   134 #  define XXH3_state_s XXH_IPREF(XXH3_state_s)   135 #  define XXH3_state_t XXH_IPREF(XXH3_state_t)   136 #  define XXH128_hash_t XXH_IPREF(XXH128_hash_t)   138 #  undef XXHASH_H_5627135585666179   139 #  undef XXHASH_H_STATIC_13879238742   147 #ifndef XXHASH_H_5627135585666179   148 #define XXHASH_H_5627135585666179 1   151 #if !defined(XXH_INLINE_ALL) && !defined(XXH_PRIVATE_API)   152 #  if defined(WIN32) && defined(_MSC_VER) && (defined(XXH_IMPORT) || defined(XXH_EXPORT))   154 #      define XXH_PUBLIC_API __declspec(dllexport)   156 #      define XXH_PUBLIC_API __declspec(dllimport)   159 #    define XXH_PUBLIC_API      175 #  define XXH_CAT(A,B) A##B   176 #  define XXH_NAME2(A,B) XXH_CAT(A,B)   177 #  define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber)   178 #  define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32)   179 #  define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState)   180 #  define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState)   181 #  define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset)   182 #  define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update)   183 #  define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest)   184 #  define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState)   185 #  define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash)   186 #  define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical)   187 #  define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64)   188 #  define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState)   189 #  define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState)   190 #  define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset)   191 #  define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update)   192 #  define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest)   193 #  define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState)   194 #  define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash)   195 #  define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical)   202 #define XXH_VERSION_MAJOR    0   203 #define XXH_VERSION_MINOR    7   204 #define XXH_VERSION_RELEASE  2   205 #define XXH_VERSION_NUMBER  (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE)   219 #if !defined (__VMS) \   220   && (defined (__cplusplus) \   221   || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) ) )   223     typedef uint32_t XXH32_hash_t;
   226 #   if UINT_MAX == 0xFFFFFFFFUL   227       typedef unsigned int XXH32_hash_t;
   229 #     if ULONG_MAX == 0xFFFFFFFFUL   230         typedef unsigned long XXH32_hash_t;
   232 #       error "unsupported platform : need a 32-bit type"   298 #ifndef XXH_NO_LONG_LONG   302 #if !defined (__VMS) \   303   && (defined (__cplusplus) \   304   || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) ) )   341 #if defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742)   342 #define XXHASH_H_STATIC_13879238742   354 struct XXH32_state_s {
   355    XXH32_hash_t total_len_32;
   356    XXH32_hash_t large_len;
   361    XXH32_hash_t mem32[4];
   362    XXH32_hash_t memsize;
   363    XXH32_hash_t reserved;   
   367 #ifndef XXH_NO_LONG_LONG     369 struct XXH64_state_s {
   376    XXH32_hash_t memsize;
   377    XXH32_hash_t reserved32;  
   455 #  define XXH3_64bits XXH_NAME2(XXH_NAMESPACE, XXH3_64bits)   456 #  define XXH3_64bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecret)   457 #  define XXH3_64bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSeed)   459 #  define XXH3_createState XXH_NAME2(XXH_NAMESPACE, XXH3_createState)   460 #  define XXH3_freeState XXH_NAME2(XXH_NAMESPACE, XXH3_freeState)   461 #  define XXH3_copyState XXH_NAME2(XXH_NAMESPACE, XXH3_copyState)   463 #  define XXH3_64bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset)   464 #  define XXH3_64bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSeed)   465 #  define XXH3_64bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecret)   466 #  define XXH3_64bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_update)   467 #  define XXH3_64bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_digest)   484 #define XXH3_SECRET_SIZE_MIN 136   497 #if defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)      498 #  include <stdalign.h>   499 #  define XXH_ALIGN(n)      alignas(n)   500 #elif defined(__GNUC__)   501 #  define XXH_ALIGN(n)      __attribute__ ((aligned(n)))   502 #elif defined(_MSC_VER)   503 #  define XXH_ALIGN(n)      __declspec(align(n))   505 #  define XXH_ALIGN(n)      508 typedef struct XXH3_state_s XXH3_state_t;
   510 #define XXH3_SECRET_DEFAULT_SIZE 192      511 #define XXH3_INTERNALBUFFER_SIZE 256   512 struct XXH3_state_s {
   514    XXH_ALIGN(64) 
unsigned char customSecret[XXH3_SECRET_DEFAULT_SIZE];  
   515    XXH_ALIGN(64) 
unsigned char buffer[XXH3_INTERNALBUFFER_SIZE];
   516    XXH32_hash_t bufferedSize;
   517    XXH32_hash_t nbStripesPerBlock;
   518    XXH32_hash_t nbStripesSoFar;
   519    XXH32_hash_t secretLimit;
   520    XXH32_hash_t reserved32;
   521    XXH32_hash_t reserved32_2;
   525    const 
unsigned char* secret;    
   559 #  define XXH128 XXH_NAME2(XXH_NAMESPACE, XXH128)   560 #  define XXH3_128bits XXH_NAME2(XXH_NAMESPACE, XXH3_128bits)   561 #  define XXH3_128bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSeed)   562 #  define XXH3_128bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecret)   564 #  define XXH3_128bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset)   565 #  define XXH3_128bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSeed)   566 #  define XXH3_128bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecret)   567 #  define XXH3_128bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_update)   568 #  define XXH3_128bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_digest)   570 #  define XXH128_isEqual XXH_NAME2(XXH_NAMESPACE, XXH128_isEqual)   571 #  define XXH128_cmp     XXH_NAME2(XXH_NAMESPACE, XXH128_cmp)   572 #  define XXH128_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH128_canonicalFromHash)   573 #  define XXH128_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH128_hashFromCanonical)   608 typedef struct { 
unsigned char digest[16]; } XXH128_canonical_t;
   615 #if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)   616 #  define XXH_IMPLEMENTATION   638 #if ( defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) \   639    || defined(XXH_IMPLEMENTATION) ) && !defined(XXH_IMPLEM_13a8737387)   640 #  define XXH_IMPLEM_13a8737387   658 #ifndef XXH_FORCE_MEMORY_ACCESS      659 #  if !defined(__clang__) && defined(__GNUC__) && defined(__ARM_FEATURE_UNALIGNED) && defined(__ARM_ARCH) && (__ARM_ARCH == 6)   660 #    define XXH_FORCE_MEMORY_ACCESS 2   661 #  elif !defined(__clang__) && ((defined(__INTEL_COMPILER) && !defined(_WIN32)) || \   662   (defined(__GNUC__) && (defined(__ARM_ARCH) && __ARM_ARCH >= 7)))   663 #    define XXH_FORCE_MEMORY_ACCESS 1   672 #ifndef XXH_ACCEPT_NULL_INPUT_POINTER      673 #  define XXH_ACCEPT_NULL_INPUT_POINTER 0   683 #ifndef XXH_FORCE_ALIGN_CHECK    684 #  if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)   685 #    define XXH_FORCE_ALIGN_CHECK 0   687 #    define XXH_FORCE_ALIGN_CHECK 1   707 #ifndef XXH_NO_INLINE_HINTS   708 #  if defined(__OPTIMIZE_SIZE__)  \   709    || defined(__NO_INLINE__)        710 #    define XXH_NO_INLINE_HINTS 1   712 #    define XXH_NO_INLINE_HINTS 0   722 #  if defined(__OPTIMIZE_SIZE__)   723 #    define XXH_REROLL 1   725 #    define XXH_REROLL 0   736 static void* XXH_malloc(
size_t s) { 
return malloc(s); }
   737 static void  XXH_free  (
void* p)  { free(p); }
   740 static void* XXH_memcpy(
void* dest, 
const void* src, 
size_t size) { 
return memcpy(dest,src,size); }
   749 #  pragma warning(disable : 4127)         752 #if XXH_NO_INLINE_HINTS    753 #  define XXH_FORCE_INLINE static   754 #  define XXH_NO_INLINE static   755 #elif defined(_MSC_VER)       756 #  define XXH_FORCE_INLINE static __forceinline   757 #  define XXH_NO_INLINE static __declspec(noinline)   759 #  if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L      761 #      define XXH_FORCE_INLINE static inline __attribute__((always_inline))   762 #      define XXH_NO_INLINE static __attribute__((noinline))   764 #      define XXH_FORCE_INLINE static inline   765 #      define XXH_NO_INLINE static   768 #    define XXH_FORCE_INLINE static   769 #    define XXH_NO_INLINE static   782 #  define DEBUGLEVEL 0   787 #  define XXH_ASSERT(c)   assert(c)   789 #  define XXH_ASSERT(c)   ((void)0)   793 #define XXH_STATIC_ASSERT(c)  { enum { XXH_sa = 1/(int)(!!(c)) }; }   799 #if !defined (__VMS) \   800  && (defined (__cplusplus) \   801  || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) ) )   803   typedef uint8_t  xxh_u8;
   805   typedef unsigned char      xxh_u8;
   807 typedef XXH32_hash_t xxh_u32;
   812 #if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2))   815 static xxh_u32 XXH_read32(
const void* memPtr) { 
return *(
const xxh_u32*) memPtr; }
   817 #elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1))   821 typedef union { xxh_u32 u32; } __attribute__((packed)) unalign;
   822 static xxh_u32 XXH_read32(
const void* ptr) { 
return ((
const unalign*)ptr)->u32; }
   829 static xxh_u32 XXH_read32(
const void* memPtr)
   832     memcpy(&val, memPtr, 
sizeof(val));
   840 typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess;
   843 #ifndef XXH_CPU_LITTLE_ENDIAN   844 #  if defined(_WIN32)  \   845      || defined(__LITTLE_ENDIAN__) \   846      || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)   847 #    define XXH_CPU_LITTLE_ENDIAN 1   848 #  elif defined(__BIG_ENDIAN__) \   849      || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)   850 #    define XXH_CPU_LITTLE_ENDIAN 0   852 static int XXH_isLittleEndian(
void)
   854     const union { xxh_u32 u; xxh_u8 c[4]; } one = { 1 };   
   857 #   define XXH_CPU_LITTLE_ENDIAN   XXH_isLittleEndian()   867 #define XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)   869 #ifndef __has_builtin   870 #  define __has_builtin(x) 0   873 #if !defined(NO_CLANG_BUILTIN) && __has_builtin(__builtin_rotateleft32) && __has_builtin(__builtin_rotateleft64)   874 #  define XXH_rotl32 __builtin_rotateleft32   875 #  define XXH_rotl64 __builtin_rotateleft64   877 #elif defined(_MSC_VER)   878 #  define XXH_rotl32(x,r) _rotl(x,r)   879 #  define XXH_rotl64(x,r) _rotl64(x,r)   881 #  define XXH_rotl32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))   882 #  define XXH_rotl64(x,r) (((x) << (r)) | ((x) >> (64 - (r))))   885 #if defined(_MSC_VER)        886 #  define XXH_swap32 _byteswap_ulong   887 #elif XXH_GCC_VERSION >= 403   888 #  define XXH_swap32 __builtin_bswap32   890 static xxh_u32 XXH_swap32 (xxh_u32 x)
   892     return  ((x << 24) & 0xff000000 ) |
   893             ((x <<  8) & 0x00ff0000 ) |
   894             ((x >>  8) & 0x0000ff00 ) |
   895             ((x >> 24) & 0x000000ff );
   903 typedef enum { XXH_aligned, XXH_unaligned } XXH_alignment;
   905 XXH_FORCE_INLINE xxh_u32 XXH_readLE32(
const void* ptr)
   907     return XXH_CPU_LITTLE_ENDIAN ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr));
   910 static xxh_u32 XXH_readBE32(
const void* ptr)
   912     return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr);
   915 XXH_FORCE_INLINE xxh_u32
   916 XXH_readLE32_align(
const void* ptr, XXH_alignment align)
   918     if (align==XXH_unaligned) {
   919         return XXH_readLE32(ptr);
   921         return XXH_CPU_LITTLE_ENDIAN ? *(
const xxh_u32*)ptr : XXH_swap32(*(
const xxh_u32*)ptr);
   935 static const xxh_u32 PRIME32_1 = 0x9E3779B1U;   
   936 static const xxh_u32 PRIME32_2 = 0x85EBCA77U;   
   937 static const xxh_u32 PRIME32_3 = 0xC2B2AE3DU;   
   938 static const xxh_u32 PRIME32_4 = 0x27D4EB2FU;   
   939 static const xxh_u32 PRIME32_5 = 0x165667B1U;   
   941 static xxh_u32 XXH32_round(xxh_u32 acc, xxh_u32 input)
   943     acc += input * PRIME32_2;
   944     acc  = XXH_rotl32(acc, 13);
   946 #if defined(__GNUC__) && defined(__SSE4_1__) && !defined(XXH_ENABLE_AUTOVECTORIZE)   988     __asm__(
"" : 
"+r" (acc));
   994 static xxh_u32 XXH32_avalanche(xxh_u32 h32)
  1004 #define XXH_get32bits(p) XXH_readLE32_align(p, align)  1007 XXH32_finalize(xxh_u32 h32, 
const xxh_u8* ptr, 
size_t len, XXH_alignment align)
  1010     h32 += (*ptr++) * PRIME32_5; \  1011     h32 = XXH_rotl32(h32, 11) * PRIME32_1 ;  1014     h32 += XXH_get32bits(ptr) * PRIME32_3; \  1016     h32  = XXH_rotl32(h32, 17) * PRIME32_4 ;  1029         return XXH32_avalanche(h32);
  1037                          return XXH32_avalanche(h32);
  1045                          return XXH32_avalanche(h32);
  1054                          return XXH32_avalanche(h32);
  1068            case 0:       
return XXH32_avalanche(h32);
  1075 XXH_FORCE_INLINE xxh_u32
  1076 XXH32_endian_align(
const xxh_u8* input, 
size_t len, xxh_u32 seed, XXH_alignment align)
  1078     const xxh_u8* bEnd = input + len;
  1081 #if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1)  1084         bEnd=input=(
const xxh_u8*)(
size_t)16;
  1089         const xxh_u8* 
const limit = bEnd - 15;
  1090         xxh_u32 v1 = seed + PRIME32_1 + PRIME32_2;
  1091         xxh_u32 v2 = seed + PRIME32_2;
  1092         xxh_u32 v3 = seed + 0;
  1093         xxh_u32 v4 = seed - PRIME32_1;
  1096             v1 = XXH32_round(v1, XXH_get32bits(input)); input += 4;
  1097             v2 = XXH32_round(v2, XXH_get32bits(input)); input += 4;
  1098             v3 = XXH32_round(v3, XXH_get32bits(input)); input += 4;
  1099             v4 = XXH32_round(v4, XXH_get32bits(input)); input += 4;
  1100         } 
while (input < limit);
  1102         h32 = XXH_rotl32(v1, 1)  + XXH_rotl32(v2, 7)
  1103             + XXH_rotl32(v3, 12) + XXH_rotl32(v4, 18);
  1105         h32  = seed + PRIME32_5;
  1108     h32 += (xxh_u32)len;
  1110     return XXH32_finalize(h32, input, len&15, align);
  1125     if (XXH_FORCE_ALIGN_CHECK) {
  1126         if ((((
size_t)input) & 3) == 0) {   
  1127             return XXH32_endian_align((
const xxh_u8*)input, len, seed, XXH_aligned);
  1130     return XXH32_endian_align((
const xxh_u8*)input, len, seed, XXH_unaligned);
  1150     memcpy(dstState, srcState, 
sizeof(*dstState));
  1156     memset(&state, 0, 
sizeof(state));
  1157     state.v1 = seed + PRIME32_1 + PRIME32_2;
  1158     state.v2 = seed + PRIME32_2;
  1159     state.v3 = seed + 0;
  1160     state.v4 = seed - PRIME32_1;
  1162     memcpy(statePtr, &state, 
sizeof(state) - 
sizeof(state.reserved));
  1171 #if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1)  1177     {   
const xxh_u8* p = (
const xxh_u8*)input;
  1178         const xxh_u8* 
const bEnd = p + len;
  1180         state->total_len_32 += (XXH32_hash_t)len;
  1181         state->large_len |= (XXH32_hash_t)((len>=16) | (state->total_len_32>=16));
  1183         if (state->memsize + len < 16)  {   
  1184             XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, len);
  1185             state->memsize += (XXH32_hash_t)len;
  1189         if (state->memsize) {   
  1190             XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, 16-state->memsize);
  1191             {   
const xxh_u32* p32 = state->mem32;
  1192                 state->v1 = XXH32_round(state->v1, XXH_readLE32(p32)); p32++;
  1193                 state->v2 = XXH32_round(state->v2, XXH_readLE32(p32)); p32++;
  1194                 state->v3 = XXH32_round(state->v3, XXH_readLE32(p32)); p32++;
  1195                 state->v4 = XXH32_round(state->v4, XXH_readLE32(p32));
  1197             p += 16-state->memsize;
  1202             const xxh_u8* 
const limit = bEnd - 16;
  1203             xxh_u32 v1 = state->v1;
  1204             xxh_u32 v2 = state->v2;
  1205             xxh_u32 v3 = state->v3;
  1206             xxh_u32 v4 = state->v4;
  1209                 v1 = XXH32_round(v1, XXH_readLE32(p)); p+=4;
  1210                 v2 = XXH32_round(v2, XXH_readLE32(p)); p+=4;
  1211                 v3 = XXH32_round(v3, XXH_readLE32(p)); p+=4;
  1212                 v4 = XXH32_round(v4, XXH_readLE32(p)); p+=4;
  1222             XXH_memcpy(state->mem32, p, (
size_t)(bEnd-p));
  1223             state->memsize = (unsigned)(bEnd-p);
  1235     if (state->large_len) {
  1236         h32 = XXH_rotl32(state->v1, 1)
  1237             + XXH_rotl32(state->v2, 7)
  1238             + XXH_rotl32(state->v3, 12)
  1239             + XXH_rotl32(state->v4, 18);
  1241         h32 = state->v3  + PRIME32_5;
  1244     h32 += state->total_len_32;
  1246     return XXH32_finalize(h32, (
const xxh_u8*)state->mem32, state->memsize, XXH_aligned);
  1261     if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap32(hash);
  1262     memcpy(dst, &hash, 
sizeof(*dst));
  1267     return XXH_readBE32(src);
  1271 #ifndef XXH_NO_LONG_LONG  1295 #ifndef XXH_REROLL_XXH64  1296 #  if (defined(__ILP32__) || defined(_ILP32))  \  1297    || !(defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64)  \  1298      || defined(_M_ARM64) || defined(__aarch64__) || defined(__arm64__)  \  1299      || defined(__PPC64__) || defined(__PPC64LE__) || defined(__ppc64__) || defined(__powerpc64__)  \  1300      || defined(__mips64__) || defined(__mips64))  \  1301    || (!defined(SIZE_MAX) || SIZE_MAX < ULLONG_MAX)   1302 #    define XXH_REROLL_XXH64 1  1304 #    define XXH_REROLL_XXH64 0  1308 #if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2))  1311 static xxh_u64 XXH_read64(
const void* memPtr) { 
return *(
const xxh_u64*) memPtr; }
  1313 #elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1))  1317 typedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((packed)) unalign64;
  1318 static xxh_u64 XXH_read64(
const void* ptr) { 
return ((
const unalign64*)ptr)->u64; }
  1326 static xxh_u64 XXH_read64(
const void* memPtr)
  1329     memcpy(&val, memPtr, 
sizeof(val));
  1335 #if defined(_MSC_VER)       1336 #  define XXH_swap64 _byteswap_uint64  1337 #elif XXH_GCC_VERSION >= 403  1338 #  define XXH_swap64 __builtin_bswap64  1340 static xxh_u64 XXH_swap64 (xxh_u64 x)
  1342     return  ((x << 56) & 0xff00000000000000ULL) |
  1343             ((x << 40) & 0x00ff000000000000ULL) |
  1344             ((x << 24) & 0x0000ff0000000000ULL) |
  1345             ((x << 8)  & 0x000000ff00000000ULL) |
  1346             ((x >> 8)  & 0x00000000ff000000ULL) |
  1347             ((x >> 24) & 0x0000000000ff0000ULL) |
  1348             ((x >> 40) & 0x000000000000ff00ULL) |
  1349             ((x >> 56) & 0x00000000000000ffULL);
  1353 XXH_FORCE_INLINE xxh_u64 XXH_readLE64(
const void* ptr)
  1355     return XXH_CPU_LITTLE_ENDIAN ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr));
  1358 static xxh_u64 XXH_readBE64(
const void* ptr)
  1360     return XXH_CPU_LITTLE_ENDIAN ? XXH_swap64(XXH_read64(ptr)) : XXH_read64(ptr);
  1363 XXH_FORCE_INLINE xxh_u64
  1364 XXH_readLE64_align(
const void* ptr, XXH_alignment align)
  1366     if (align==XXH_unaligned)
  1367         return XXH_readLE64(ptr);
  1369         return XXH_CPU_LITTLE_ENDIAN ? *(
const xxh_u64*)ptr : XXH_swap64(*(
const xxh_u64*)ptr);
  1375 static const xxh_u64 PRIME64_1 = 0x9E3779B185EBCA87ULL;   
  1376 static const xxh_u64 PRIME64_2 = 0xC2B2AE3D27D4EB4FULL;   
  1377 static const xxh_u64 PRIME64_3 = 0x165667B19E3779F9ULL;   
  1378 static const xxh_u64 PRIME64_4 = 0x85EBCA77C2B2AE63ULL;   
  1379 static const xxh_u64 PRIME64_5 = 0x27D4EB2F165667C5ULL;   
  1381 static xxh_u64 XXH64_round(xxh_u64 acc, xxh_u64 input)
  1383     acc += input * PRIME64_2;
  1384     acc  = XXH_rotl64(acc, 31);
  1389 static xxh_u64 XXH64_mergeRound(xxh_u64 acc, xxh_u64 val)
  1391     val  = XXH64_round(0, val);
  1393     acc  = acc * PRIME64_1 + PRIME64_4;
  1397 static xxh_u64 XXH64_avalanche(xxh_u64 h64)
  1408 #define XXH_get64bits(p) XXH_readLE64_align(p, align)  1411 XXH64_finalize(xxh_u64 h64, 
const xxh_u8* ptr, 
size_t len, XXH_alignment align)
  1413 #define PROCESS1_64            \  1414     h64 ^= (*ptr++) * PRIME64_5; \  1415     h64 = XXH_rotl64(h64, 11) * PRIME64_1;  1417 #define PROCESS4_64          \  1418     h64 ^= (xxh_u64)(XXH_get32bits(ptr)) * PRIME64_1; \  1420     h64 = XXH_rotl64(h64, 23) * PRIME64_2 + PRIME64_3;  1422 #define PROCESS8_64 {        \  1423     xxh_u64 const k1 = XXH64_round(0, XXH_get64bits(ptr)); \  1426     h64  = XXH_rotl64(h64,27) * PRIME64_1 + PRIME64_4; \  1430     if (XXH_REROLL || XXH_REROLL_XXH64) {
  1444          return  XXH64_avalanche(h64);
  1447            case 24: PROCESS8_64;
  1449            case 16: PROCESS8_64;
  1451            case  8: PROCESS8_64;
  1452                     return XXH64_avalanche(h64);
  1454            case 28: PROCESS8_64;
  1456            case 20: PROCESS8_64;
  1458            case 12: PROCESS8_64;
  1460            case  4: PROCESS4_64;
  1461                     return XXH64_avalanche(h64);
  1463            case 25: PROCESS8_64;
  1465            case 17: PROCESS8_64;
  1467            case  9: PROCESS8_64;
  1469                     return XXH64_avalanche(h64);
  1471            case 29: PROCESS8_64;
  1473            case 21: PROCESS8_64;
  1475            case 13: PROCESS8_64;
  1477            case  5: PROCESS4_64;
  1479                     return XXH64_avalanche(h64);
  1481            case 26: PROCESS8_64;
  1483            case 18: PROCESS8_64;
  1485            case 10: PROCESS8_64;
  1488                     return XXH64_avalanche(h64);
  1490            case 30: PROCESS8_64;
  1492            case 22: PROCESS8_64;
  1494            case 14: PROCESS8_64;
  1496            case  6: PROCESS4_64;
  1499                     return XXH64_avalanche(h64);
  1501            case 27: PROCESS8_64;
  1503            case 19: PROCESS8_64;
  1505            case 11: PROCESS8_64;
  1509                     return XXH64_avalanche(h64);
  1511            case 31: PROCESS8_64;
  1513            case 23: PROCESS8_64;
  1515            case 15: PROCESS8_64;
  1517            case  7: PROCESS4_64;
  1519            case  3: PROCESS1_64;
  1521            case  2: PROCESS1_64;
  1523            case  1: PROCESS1_64;
  1525            case  0: 
return XXH64_avalanche(h64);
  1533 XXH_FORCE_INLINE xxh_u64
  1534 XXH64_endian_align(
const xxh_u8* input, 
size_t len, xxh_u64 seed, XXH_alignment align)
  1536     const xxh_u8* bEnd = input + len;
  1539 #if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1)  1542         bEnd=input=(
const xxh_u8*)(
size_t)32;
  1547         const xxh_u8* 
const limit = bEnd - 32;
  1548         xxh_u64 v1 = seed + PRIME64_1 + PRIME64_2;
  1549         xxh_u64 v2 = seed + PRIME64_2;
  1550         xxh_u64 v3 = seed + 0;
  1551         xxh_u64 v4 = seed - PRIME64_1;
  1554             v1 = XXH64_round(v1, XXH_get64bits(input)); input+=8;
  1555             v2 = XXH64_round(v2, XXH_get64bits(input)); input+=8;
  1556             v3 = XXH64_round(v3, XXH_get64bits(input)); input+=8;
  1557             v4 = XXH64_round(v4, XXH_get64bits(input)); input+=8;
  1558         } 
while (input<=limit);
  1560         h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18);
  1561         h64 = XXH64_mergeRound(h64, v1);
  1562         h64 = XXH64_mergeRound(h64, v2);
  1563         h64 = XXH64_mergeRound(h64, v3);
  1564         h64 = XXH64_mergeRound(h64, v4);
  1567         h64  = seed + PRIME64_5;
  1570     h64 += (xxh_u64) len;
  1572     return XXH64_finalize(h64, input, len, align);
  1587     if (XXH_FORCE_ALIGN_CHECK) {
  1588         if ((((
size_t)input) & 7)==0) {  
  1589             return XXH64_endian_align((
const xxh_u8*)input, len, seed, XXH_aligned);
  1592     return XXH64_endian_align((
const xxh_u8*)input, len, seed, XXH_unaligned);
  1611     memcpy(dstState, srcState, 
sizeof(*dstState));
  1617     memset(&state, 0, 
sizeof(state));
  1618     state.v1 = seed + PRIME64_1 + PRIME64_2;
  1619     state.v2 = seed + PRIME64_2;
  1620     state.v3 = seed + 0;
  1621     state.v4 = seed - PRIME64_1;
  1623     memcpy(statePtr, &state, 
sizeof(state) - 
sizeof(state.reserved64));
  1631 #if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1)  1637     {   
const xxh_u8* p = (
const xxh_u8*)input;
  1638         const xxh_u8* 
const bEnd = p + len;
  1640         state->total_len += len;
  1642         if (state->memsize + len < 32) {  
  1643             XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, len);
  1644             state->memsize += (xxh_u32)len;
  1648         if (state->memsize) {   
  1649             XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, 32-state->memsize);
  1650             state->v1 = XXH64_round(state->v1, XXH_readLE64(state->mem64+0));
  1651             state->v2 = XXH64_round(state->v2, XXH_readLE64(state->mem64+1));
  1652             state->v3 = XXH64_round(state->v3, XXH_readLE64(state->mem64+2));
  1653             state->v4 = XXH64_round(state->v4, XXH_readLE64(state->mem64+3));
  1654             p += 32-state->memsize;
  1659             const xxh_u8* 
const limit = bEnd - 32;
  1660             xxh_u64 v1 = state->v1;
  1661             xxh_u64 v2 = state->v2;
  1662             xxh_u64 v3 = state->v3;
  1663             xxh_u64 v4 = state->v4;
  1666                 v1 = XXH64_round(v1, XXH_readLE64(p)); p+=8;
  1667                 v2 = XXH64_round(v2, XXH_readLE64(p)); p+=8;
  1668                 v3 = XXH64_round(v3, XXH_readLE64(p)); p+=8;
  1669                 v4 = XXH64_round(v4, XXH_readLE64(p)); p+=8;
  1679             XXH_memcpy(state->mem64, p, (
size_t)(bEnd-p));
  1680             state->memsize = (unsigned)(bEnd-p);
  1692     if (state->total_len >= 32) {
  1693         xxh_u64 
const v1 = state->v1;
  1694         xxh_u64 
const v2 = state->v2;
  1695         xxh_u64 
const v3 = state->v3;
  1696         xxh_u64 
const v4 = state->v4;
  1698         h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18);
  1699         h64 = XXH64_mergeRound(h64, v1);
  1700         h64 = XXH64_mergeRound(h64, v2);
  1701         h64 = XXH64_mergeRound(h64, v3);
  1702         h64 = XXH64_mergeRound(h64, v4);
  1704         h64  = state->v3  + PRIME64_5;
  1707     h64 += (xxh_u64) state->total_len;
  1709     return XXH64_finalize(h64, (
const xxh_u8*)state->mem64, (size_t)state->total_len, XXH_aligned);
  1718     if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap64(hash);
  1719     memcpy(dst, &hash, 
sizeof(*dst));
  1724     return XXH_readBE64(src);
  1743 #if defined (__cplusplus) XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t *dst_state, const XXH32_state_t *src_state)
 
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest(const XXH3_state_t *state)
 
XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset(XXH3_state_t *statePtr)
 
struct XXH64_state_s XXH64_state_t
 
XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t *dst, XXH64_hash_t hash)
 
XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset(XXH3_state_t *statePtr)
 
static void h2(float r, float r2, float ri, float rc, float r0, float rs, float &h)
 
XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void *input, size_t len)
 
XXH_PUBLIC_API XXH_errorcode XXH64_update(XXH64_state_t *statePtr, const void *input, size_t length)
 
XXH_PUBLIC_API XXH64_hash_t XXH64_digest(const XXH64_state_t *statePtr)
 
XXH_PUBLIC_API unsigned XXH_versionNumber(void)
 
#define XXH_VERSION_NUMBER
 
XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSeed(XXH3_state_t *statePtr, XXH64_hash_t seed)
 
XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t *dst, XXH32_hash_t hash)
 
XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t *src)
 
XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSeed(const void *input, size_t len, XXH64_hash_t seed)
 
static void h1(float r, float r2, float ri, float rc, float r0, float rs, float &h)
 
XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSecret(XXH3_state_t *statePtr, const void *secret, size_t secretSize)
 
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSecret(const void *input, size_t len, const void *secret, size_t secretSize)
 
unsigned long long XXH64_hash_t
 
XXH_PUBLIC_API XXH64_hash_t XXH64(const void *input, size_t length, XXH64_hash_t seed)
 
XXH_ALIGN(64) static const xxh_u8 kSecret[XXH_SECRET_DEFAULT_SIZE]
 
XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t *statePtr, XXH64_hash_t seed)
 
XXH_PUBLIC_API XXH_errorcode XXH3_64bits_update(XXH3_state_t *state, const void *input, size_t len)
 
XXH_PUBLIC_API XXH32_hash_t XXH32_digest(const XXH32_state_t *statePtr)
 
XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t *statePtr)
 
XXH_PUBLIC_API int XXH128_cmp(const void *h128_1, const void *h128_2)
 
XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest(const XXH3_state_t *state)
 
XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t *src)
 
XXH_PUBLIC_API XXH_errorcode XXH3_128bits_update(XXH3_state_t *state, const void *input, size_t len)
 
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSeed(const void *input, size_t len, XXH64_hash_t seed)
 
XXH_PUBLIC_API XXH32_hash_t XXH32(const void *input, size_t length, XXH32_hash_t seed)
 
XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSeed(XXH3_state_t *statePtr, XXH64_hash_t seed)
 
XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t *dst_state, const XXH64_state_t *src_state)
 
XXH_PUBLIC_API XXH3_state_t * XXH3_createState(void)
 
XXH_PUBLIC_API XXH64_state_t * XXH64_createState(void)
 
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void *input, size_t len)
 
XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2)
 
XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t *statePtr)
 
XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t *statePtr, XXH32_hash_t seed)
 
XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t *statePtr)
 
XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSecret(const void *input, size_t len, const void *secret, size_t secretSize)
 
XXH_PUBLIC_API XXH128_hash_t XXH128(const void *input, size_t len, XXH64_hash_t seed)
 
XXH_PUBLIC_API XXH_errorcode XXH32_update(XXH32_state_t *statePtr, const void *input, size_t length)
 
struct XXH32_state_s XXH32_state_t
 
XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t *src)
 
XXH_PUBLIC_API void XXH3_copyState(XXH3_state_t *dst_state, const XXH3_state_t *src_state)
 
XXH_PUBLIC_API XXH32_state_t * XXH32_createState(void)
 
XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSecret(XXH3_state_t *statePtr, const void *secret, size_t secretSize)
 
XXH_PUBLIC_API void XXH128_canonicalFromHash(XXH128_canonical_t *dst, XXH128_hash_t hash)