1*27162e4eSAndroid Build Coastguard Worker /* 2*27162e4eSAndroid Build Coastguard Worker xxHash - Extremely Fast Hash algorithm 3*27162e4eSAndroid Build Coastguard Worker Header File 4*27162e4eSAndroid Build Coastguard Worker Copyright (C) 2012-2016, Yann Collet. 5*27162e4eSAndroid Build Coastguard Worker 6*27162e4eSAndroid Build Coastguard Worker BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) 7*27162e4eSAndroid Build Coastguard Worker 8*27162e4eSAndroid Build Coastguard Worker Redistribution and use in source and binary forms, with or without 9*27162e4eSAndroid Build Coastguard Worker modification, are permitted provided that the following conditions are 10*27162e4eSAndroid Build Coastguard Worker met: 11*27162e4eSAndroid Build Coastguard Worker 12*27162e4eSAndroid Build Coastguard Worker * Redistributions of source code must retain the above copyright 13*27162e4eSAndroid Build Coastguard Worker notice, this list of conditions and the following disclaimer. 14*27162e4eSAndroid Build Coastguard Worker * Redistributions in binary form must reproduce the above 15*27162e4eSAndroid Build Coastguard Worker copyright notice, this list of conditions and the following disclaimer 16*27162e4eSAndroid Build Coastguard Worker in the documentation and/or other materials provided with the 17*27162e4eSAndroid Build Coastguard Worker distribution. 18*27162e4eSAndroid Build Coastguard Worker 19*27162e4eSAndroid Build Coastguard Worker THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20*27162e4eSAndroid Build Coastguard Worker "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21*27162e4eSAndroid Build Coastguard Worker LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22*27162e4eSAndroid Build Coastguard Worker A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23*27162e4eSAndroid Build Coastguard Worker OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24*27162e4eSAndroid Build Coastguard Worker SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25*27162e4eSAndroid Build Coastguard Worker LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26*27162e4eSAndroid Build Coastguard Worker DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27*27162e4eSAndroid Build Coastguard Worker THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28*27162e4eSAndroid Build Coastguard Worker (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29*27162e4eSAndroid Build Coastguard Worker OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30*27162e4eSAndroid Build Coastguard Worker 31*27162e4eSAndroid Build Coastguard Worker You can contact the author at : 32*27162e4eSAndroid Build Coastguard Worker - xxHash source repository : https://github.com/Cyan4973/xxHash 33*27162e4eSAndroid Build Coastguard Worker */ 34*27162e4eSAndroid Build Coastguard Worker 35*27162e4eSAndroid Build Coastguard Worker /* Notice extracted from xxHash homepage : 36*27162e4eSAndroid Build Coastguard Worker 37*27162e4eSAndroid Build Coastguard Worker xxHash is an extremely fast Hash algorithm, running at RAM speed limits. 38*27162e4eSAndroid Build Coastguard Worker It also successfully passes all tests from the SMHasher suite. 39*27162e4eSAndroid Build Coastguard Worker 40*27162e4eSAndroid Build Coastguard Worker Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2 Duo @3GHz) 41*27162e4eSAndroid Build Coastguard Worker 42*27162e4eSAndroid Build Coastguard Worker Name Speed Q.Score Author 43*27162e4eSAndroid Build Coastguard Worker xxHash 5.4 GB/s 10 44*27162e4eSAndroid Build Coastguard Worker CrapWow 3.2 GB/s 2 Andrew 45*27162e4eSAndroid Build Coastguard Worker MumurHash 3a 2.7 GB/s 10 Austin Appleby 46*27162e4eSAndroid Build Coastguard Worker SpookyHash 2.0 GB/s 10 Bob Jenkins 47*27162e4eSAndroid Build Coastguard Worker SBox 1.4 GB/s 9 Bret Mulvey 48*27162e4eSAndroid Build Coastguard Worker Lookup3 1.2 GB/s 9 Bob Jenkins 49*27162e4eSAndroid Build Coastguard Worker SuperFastHash 1.2 GB/s 1 Paul Hsieh 50*27162e4eSAndroid Build Coastguard Worker CityHash64 1.05 GB/s 10 Pike & Alakuijala 51*27162e4eSAndroid Build Coastguard Worker FNV 0.55 GB/s 5 Fowler, Noll, Vo 52*27162e4eSAndroid Build Coastguard Worker CRC32 0.43 GB/s 9 53*27162e4eSAndroid Build Coastguard Worker MD5-32 0.33 GB/s 10 Ronald L. Rivest 54*27162e4eSAndroid Build Coastguard Worker SHA1-32 0.28 GB/s 10 55*27162e4eSAndroid Build Coastguard Worker 56*27162e4eSAndroid Build Coastguard Worker Q.Score is a measure of quality of the hash function. 57*27162e4eSAndroid Build Coastguard Worker It depends on successfully passing SMHasher test set. 58*27162e4eSAndroid Build Coastguard Worker 10 is a perfect score. 59*27162e4eSAndroid Build Coastguard Worker 60*27162e4eSAndroid Build Coastguard Worker A 64-bit version, named XXH64, is available since r35. 61*27162e4eSAndroid Build Coastguard Worker It offers much better speed, but for 64-bit applications only. 62*27162e4eSAndroid Build Coastguard Worker Name Speed on 64 bits Speed on 32 bits 63*27162e4eSAndroid Build Coastguard Worker XXH64 13.8 GB/s 1.9 GB/s 64*27162e4eSAndroid Build Coastguard Worker XXH32 6.8 GB/s 6.0 GB/s 65*27162e4eSAndroid Build Coastguard Worker */ 66*27162e4eSAndroid Build Coastguard Worker 67*27162e4eSAndroid Build Coastguard Worker #ifndef XXHASH_H_5627135585666179 68*27162e4eSAndroid Build Coastguard Worker #define XXHASH_H_5627135585666179 1 69*27162e4eSAndroid Build Coastguard Worker 70*27162e4eSAndroid Build Coastguard Worker #if defined (__cplusplus) 71*27162e4eSAndroid Build Coastguard Worker extern "C" { 72*27162e4eSAndroid Build Coastguard Worker #endif 73*27162e4eSAndroid Build Coastguard Worker 74*27162e4eSAndroid Build Coastguard Worker 75*27162e4eSAndroid Build Coastguard Worker /* **************************** 76*27162e4eSAndroid Build Coastguard Worker * Definitions 77*27162e4eSAndroid Build Coastguard Worker ******************************/ 78*27162e4eSAndroid Build Coastguard Worker #include <stddef.h> /* size_t */ 79*27162e4eSAndroid Build Coastguard Worker typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode; 80*27162e4eSAndroid Build Coastguard Worker 81*27162e4eSAndroid Build Coastguard Worker 82*27162e4eSAndroid Build Coastguard Worker /* **************************** 83*27162e4eSAndroid Build Coastguard Worker * API modifier 84*27162e4eSAndroid Build Coastguard Worker ******************************/ 85*27162e4eSAndroid Build Coastguard Worker /** XXH_INLINE_ALL (and XXH_PRIVATE_API) 86*27162e4eSAndroid Build Coastguard Worker * This is useful to include xxhash functions in `static` mode 87*27162e4eSAndroid Build Coastguard Worker * in order to inline them, and remove their symbol from the public list. 88*27162e4eSAndroid Build Coastguard Worker * Inlining can offer dramatic performance improvement on small keys. 89*27162e4eSAndroid Build Coastguard Worker * Methodology : 90*27162e4eSAndroid Build Coastguard Worker * #define XXH_INLINE_ALL 91*27162e4eSAndroid Build Coastguard Worker * #include "xxhash.h" 92*27162e4eSAndroid Build Coastguard Worker * `xxhash.c` is automatically included. 93*27162e4eSAndroid Build Coastguard Worker * It's not useful to compile and link it as a separate module. 94*27162e4eSAndroid Build Coastguard Worker */ 95*27162e4eSAndroid Build Coastguard Worker #if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) 96*27162e4eSAndroid Build Coastguard Worker # ifndef XXH_STATIC_LINKING_ONLY 97*27162e4eSAndroid Build Coastguard Worker # define XXH_STATIC_LINKING_ONLY 98*27162e4eSAndroid Build Coastguard Worker # endif 99*27162e4eSAndroid Build Coastguard Worker # if defined(__GNUC__) 100*27162e4eSAndroid Build Coastguard Worker # define XXH_PUBLIC_API static __inline __attribute__((unused)) 101*27162e4eSAndroid Build Coastguard Worker # elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) 102*27162e4eSAndroid Build Coastguard Worker # define XXH_PUBLIC_API static inline 103*27162e4eSAndroid Build Coastguard Worker # elif defined(_MSC_VER) 104*27162e4eSAndroid Build Coastguard Worker # define XXH_PUBLIC_API static __inline 105*27162e4eSAndroid Build Coastguard Worker # else 106*27162e4eSAndroid Build Coastguard Worker /* this version may generate warnings for unused static functions */ 107*27162e4eSAndroid Build Coastguard Worker # define XXH_PUBLIC_API static 108*27162e4eSAndroid Build Coastguard Worker # endif 109*27162e4eSAndroid Build Coastguard Worker #else 110*27162e4eSAndroid Build Coastguard Worker # define XXH_PUBLIC_API /* do nothing */ 111*27162e4eSAndroid Build Coastguard Worker #endif /* XXH_INLINE_ALL || XXH_PRIVATE_API */ 112*27162e4eSAndroid Build Coastguard Worker 113*27162e4eSAndroid Build Coastguard Worker /*! XXH_NAMESPACE, aka Namespace Emulation : 114*27162e4eSAndroid Build Coastguard Worker * 115*27162e4eSAndroid Build Coastguard Worker * If you want to include _and expose_ xxHash functions from within your own library, 116*27162e4eSAndroid Build Coastguard Worker * but also want to avoid symbol collisions with other libraries which may also include xxHash, 117*27162e4eSAndroid Build Coastguard Worker * 118*27162e4eSAndroid Build Coastguard Worker * you can use XXH_NAMESPACE, to automatically prefix any public symbol from xxhash library 119*27162e4eSAndroid Build Coastguard Worker * with the value of XXH_NAMESPACE (therefore, avoid NULL and numeric values). 120*27162e4eSAndroid Build Coastguard Worker * 121*27162e4eSAndroid Build Coastguard Worker * Note that no change is required within the calling program as long as it includes `xxhash.h` : 122*27162e4eSAndroid Build Coastguard Worker * regular symbol name will be automatically translated by this header. 123*27162e4eSAndroid Build Coastguard Worker */ 124*27162e4eSAndroid Build Coastguard Worker #ifdef XXH_NAMESPACE 125*27162e4eSAndroid Build Coastguard Worker # define XXH_CAT(A,B) A##B 126*27162e4eSAndroid Build Coastguard Worker # define XXH_NAME2(A,B) XXH_CAT(A,B) 127*27162e4eSAndroid Build Coastguard Worker # define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber) 128*27162e4eSAndroid Build Coastguard Worker # define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32) 129*27162e4eSAndroid Build Coastguard Worker # define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState) 130*27162e4eSAndroid Build Coastguard Worker # define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState) 131*27162e4eSAndroid Build Coastguard Worker # define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset) 132*27162e4eSAndroid Build Coastguard Worker # define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update) 133*27162e4eSAndroid Build Coastguard Worker # define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest) 134*27162e4eSAndroid Build Coastguard Worker # define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState) 135*27162e4eSAndroid Build Coastguard Worker # define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash) 136*27162e4eSAndroid Build Coastguard Worker # define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical) 137*27162e4eSAndroid Build Coastguard Worker # define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64) 138*27162e4eSAndroid Build Coastguard Worker # define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState) 139*27162e4eSAndroid Build Coastguard Worker # define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState) 140*27162e4eSAndroid Build Coastguard Worker # define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset) 141*27162e4eSAndroid Build Coastguard Worker # define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update) 142*27162e4eSAndroid Build Coastguard Worker # define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest) 143*27162e4eSAndroid Build Coastguard Worker # define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState) 144*27162e4eSAndroid Build Coastguard Worker # define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash) 145*27162e4eSAndroid Build Coastguard Worker # define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical) 146*27162e4eSAndroid Build Coastguard Worker #endif 147*27162e4eSAndroid Build Coastguard Worker 148*27162e4eSAndroid Build Coastguard Worker 149*27162e4eSAndroid Build Coastguard Worker /* ************************************* 150*27162e4eSAndroid Build Coastguard Worker * Version 151*27162e4eSAndroid Build Coastguard Worker ***************************************/ 152*27162e4eSAndroid Build Coastguard Worker #define XXH_VERSION_MAJOR 0 153*27162e4eSAndroid Build Coastguard Worker #define XXH_VERSION_MINOR 6 154*27162e4eSAndroid Build Coastguard Worker #define XXH_VERSION_RELEASE 5 155*27162e4eSAndroid Build Coastguard Worker #define XXH_VERSION_NUMBER (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE) 156*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API unsigned XXH_versionNumber (void); 157*27162e4eSAndroid Build Coastguard Worker 158*27162e4eSAndroid Build Coastguard Worker 159*27162e4eSAndroid Build Coastguard Worker /*-********************************************************************** 160*27162e4eSAndroid Build Coastguard Worker * 32-bit hash 161*27162e4eSAndroid Build Coastguard Worker ************************************************************************/ 162*27162e4eSAndroid Build Coastguard Worker typedef unsigned int XXH32_hash_t; 163*27162e4eSAndroid Build Coastguard Worker 164*27162e4eSAndroid Build Coastguard Worker /*! XXH32() : 165*27162e4eSAndroid Build Coastguard Worker Calculate the 32-bit hash of sequence "length" bytes stored at memory address "input". 166*27162e4eSAndroid Build Coastguard Worker The memory between input & input+length must be valid (allocated and read-accessible). 167*27162e4eSAndroid Build Coastguard Worker "seed" can be used to alter the result predictably. 168*27162e4eSAndroid Build Coastguard Worker Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark) : 5.4 GB/s */ 169*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t length, unsigned int seed); 170*27162e4eSAndroid Build Coastguard Worker 171*27162e4eSAndroid Build Coastguard Worker /*====== Streaming ======*/ 172*27162e4eSAndroid Build Coastguard Worker typedef struct XXH32_state_s XXH32_state_t; /* incomplete type */ 173*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void); 174*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr); 175*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dst_state, const XXH32_state_t* src_state); 176*27162e4eSAndroid Build Coastguard Worker 177*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH_errorcode XXH32_reset (XXH32_state_t* statePtr, unsigned int seed); 178*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void* input, size_t length); 179*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH32_hash_t XXH32_digest (const XXH32_state_t* statePtr); 180*27162e4eSAndroid Build Coastguard Worker 181*27162e4eSAndroid Build Coastguard Worker /* 182*27162e4eSAndroid Build Coastguard Worker * Streaming functions generate the xxHash of an input provided in multiple segments. 183*27162e4eSAndroid Build Coastguard Worker * Note that, for small input, they are slower than single-call functions, due to state management. 184*27162e4eSAndroid Build Coastguard Worker * For small inputs, prefer `XXH32()` and `XXH64()`, which are better optimized. 185*27162e4eSAndroid Build Coastguard Worker * 186*27162e4eSAndroid Build Coastguard Worker * XXH state must first be allocated, using XXH*_createState() . 187*27162e4eSAndroid Build Coastguard Worker * 188*27162e4eSAndroid Build Coastguard Worker * Start a new hash by initializing state with a seed, using XXH*_reset(). 189*27162e4eSAndroid Build Coastguard Worker * 190*27162e4eSAndroid Build Coastguard Worker * Then, feed the hash state by calling XXH*_update() as many times as necessary. 191*27162e4eSAndroid Build Coastguard Worker * The function returns an error code, with 0 meaning OK, and any other value meaning there is an error. 192*27162e4eSAndroid Build Coastguard Worker * 193*27162e4eSAndroid Build Coastguard Worker * Finally, a hash value can be produced anytime, by using XXH*_digest(). 194*27162e4eSAndroid Build Coastguard Worker * This function returns the nn-bits hash as an int or long long. 195*27162e4eSAndroid Build Coastguard Worker * 196*27162e4eSAndroid Build Coastguard Worker * It's still possible to continue inserting input into the hash state after a digest, 197*27162e4eSAndroid Build Coastguard Worker * and generate some new hashes later on, by calling again XXH*_digest(). 198*27162e4eSAndroid Build Coastguard Worker * 199*27162e4eSAndroid Build Coastguard Worker * When done, free XXH state space if it was allocated dynamically. 200*27162e4eSAndroid Build Coastguard Worker */ 201*27162e4eSAndroid Build Coastguard Worker 202*27162e4eSAndroid Build Coastguard Worker /*====== Canonical representation ======*/ 203*27162e4eSAndroid Build Coastguard Worker 204*27162e4eSAndroid Build Coastguard Worker typedef struct { unsigned char digest[4]; } XXH32_canonical_t; 205*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash); 206*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src); 207*27162e4eSAndroid Build Coastguard Worker 208*27162e4eSAndroid Build Coastguard Worker /* Default result type for XXH functions are primitive unsigned 32 and 64 bits. 209*27162e4eSAndroid Build Coastguard Worker * The canonical representation uses human-readable write convention, aka big-endian (large digits first). 210*27162e4eSAndroid Build Coastguard Worker * These functions allow transformation of hash result into and from its canonical format. 211*27162e4eSAndroid Build Coastguard Worker * This way, hash values can be written into a file / memory, and remain comparable on different systems and programs. 212*27162e4eSAndroid Build Coastguard Worker */ 213*27162e4eSAndroid Build Coastguard Worker 214*27162e4eSAndroid Build Coastguard Worker 215*27162e4eSAndroid Build Coastguard Worker #ifndef XXH_NO_LONG_LONG 216*27162e4eSAndroid Build Coastguard Worker /*-********************************************************************** 217*27162e4eSAndroid Build Coastguard Worker * 64-bit hash 218*27162e4eSAndroid Build Coastguard Worker ************************************************************************/ 219*27162e4eSAndroid Build Coastguard Worker typedef unsigned long long XXH64_hash_t; 220*27162e4eSAndroid Build Coastguard Worker 221*27162e4eSAndroid Build Coastguard Worker /*! XXH64() : 222*27162e4eSAndroid Build Coastguard Worker Calculate the 64-bit hash of sequence of length "len" stored at memory address "input". 223*27162e4eSAndroid Build Coastguard Worker "seed" can be used to alter the result predictably. 224*27162e4eSAndroid Build Coastguard Worker This function runs faster on 64-bit systems, but slower on 32-bit systems (see benchmark). 225*27162e4eSAndroid Build Coastguard Worker */ 226*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t length, unsigned long long seed); 227*27162e4eSAndroid Build Coastguard Worker 228*27162e4eSAndroid Build Coastguard Worker /*====== Streaming ======*/ 229*27162e4eSAndroid Build Coastguard Worker typedef struct XXH64_state_s XXH64_state_t; /* incomplete type */ 230*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void); 231*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr); 232*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dst_state, const XXH64_state_t* src_state); 233*27162e4eSAndroid Build Coastguard Worker 234*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH_errorcode XXH64_reset (XXH64_state_t* statePtr, unsigned long long seed); 235*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void* input, size_t length); 236*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH64_hash_t XXH64_digest (const XXH64_state_t* statePtr); 237*27162e4eSAndroid Build Coastguard Worker 238*27162e4eSAndroid Build Coastguard Worker /*====== Canonical representation ======*/ 239*27162e4eSAndroid Build Coastguard Worker typedef struct { unsigned char digest[8]; } XXH64_canonical_t; 240*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash); 241*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src); 242*27162e4eSAndroid Build Coastguard Worker #endif /* XXH_NO_LONG_LONG */ 243*27162e4eSAndroid Build Coastguard Worker 244*27162e4eSAndroid Build Coastguard Worker 245*27162e4eSAndroid Build Coastguard Worker 246*27162e4eSAndroid Build Coastguard Worker #ifdef XXH_STATIC_LINKING_ONLY 247*27162e4eSAndroid Build Coastguard Worker 248*27162e4eSAndroid Build Coastguard Worker /* ================================================================================================ 249*27162e4eSAndroid Build Coastguard Worker This section contains declarations which are not guaranteed to remain stable. 250*27162e4eSAndroid Build Coastguard Worker They may change in future versions, becoming incompatible with a different version of the library. 251*27162e4eSAndroid Build Coastguard Worker These declarations should only be used with static linking. 252*27162e4eSAndroid Build Coastguard Worker Never use them in association with dynamic linking ! 253*27162e4eSAndroid Build Coastguard Worker =================================================================================================== */ 254*27162e4eSAndroid Build Coastguard Worker 255*27162e4eSAndroid Build Coastguard Worker /* These definitions are only present to allow 256*27162e4eSAndroid Build Coastguard Worker * static allocation of XXH state, on stack or in a struct for example. 257*27162e4eSAndroid Build Coastguard Worker * Never **ever** use members directly. */ 258*27162e4eSAndroid Build Coastguard Worker 259*27162e4eSAndroid Build Coastguard Worker #if !defined (__VMS) \ 260*27162e4eSAndroid Build Coastguard Worker && (defined (__cplusplus) \ 261*27162e4eSAndroid Build Coastguard Worker || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) 262*27162e4eSAndroid Build Coastguard Worker # include <stdint.h> 263*27162e4eSAndroid Build Coastguard Worker 264*27162e4eSAndroid Build Coastguard Worker struct XXH32_state_s { 265*27162e4eSAndroid Build Coastguard Worker uint32_t total_len_32; 266*27162e4eSAndroid Build Coastguard Worker uint32_t large_len; 267*27162e4eSAndroid Build Coastguard Worker uint32_t v1; 268*27162e4eSAndroid Build Coastguard Worker uint32_t v2; 269*27162e4eSAndroid Build Coastguard Worker uint32_t v3; 270*27162e4eSAndroid Build Coastguard Worker uint32_t v4; 271*27162e4eSAndroid Build Coastguard Worker uint32_t mem32[4]; 272*27162e4eSAndroid Build Coastguard Worker uint32_t memsize; 273*27162e4eSAndroid Build Coastguard Worker uint32_t reserved; /* never read nor write, might be removed in a future version */ 274*27162e4eSAndroid Build Coastguard Worker }; /* typedef'd to XXH32_state_t */ 275*27162e4eSAndroid Build Coastguard Worker 276*27162e4eSAndroid Build Coastguard Worker struct XXH64_state_s { 277*27162e4eSAndroid Build Coastguard Worker uint64_t total_len; 278*27162e4eSAndroid Build Coastguard Worker uint64_t v1; 279*27162e4eSAndroid Build Coastguard Worker uint64_t v2; 280*27162e4eSAndroid Build Coastguard Worker uint64_t v3; 281*27162e4eSAndroid Build Coastguard Worker uint64_t v4; 282*27162e4eSAndroid Build Coastguard Worker uint64_t mem64[4]; 283*27162e4eSAndroid Build Coastguard Worker uint32_t memsize; 284*27162e4eSAndroid Build Coastguard Worker uint32_t reserved[2]; /* never read nor write, might be removed in a future version */ 285*27162e4eSAndroid Build Coastguard Worker }; /* typedef'd to XXH64_state_t */ 286*27162e4eSAndroid Build Coastguard Worker 287*27162e4eSAndroid Build Coastguard Worker # else 288*27162e4eSAndroid Build Coastguard Worker 289*27162e4eSAndroid Build Coastguard Worker struct XXH32_state_s { 290*27162e4eSAndroid Build Coastguard Worker unsigned total_len_32; 291*27162e4eSAndroid Build Coastguard Worker unsigned large_len; 292*27162e4eSAndroid Build Coastguard Worker unsigned v1; 293*27162e4eSAndroid Build Coastguard Worker unsigned v2; 294*27162e4eSAndroid Build Coastguard Worker unsigned v3; 295*27162e4eSAndroid Build Coastguard Worker unsigned v4; 296*27162e4eSAndroid Build Coastguard Worker unsigned mem32[4]; 297*27162e4eSAndroid Build Coastguard Worker unsigned memsize; 298*27162e4eSAndroid Build Coastguard Worker unsigned reserved; /* never read nor write, might be removed in a future version */ 299*27162e4eSAndroid Build Coastguard Worker }; /* typedef'd to XXH32_state_t */ 300*27162e4eSAndroid Build Coastguard Worker 301*27162e4eSAndroid Build Coastguard Worker # ifndef XXH_NO_LONG_LONG /* remove 64-bit support */ 302*27162e4eSAndroid Build Coastguard Worker struct XXH64_state_s { 303*27162e4eSAndroid Build Coastguard Worker unsigned long long total_len; 304*27162e4eSAndroid Build Coastguard Worker unsigned long long v1; 305*27162e4eSAndroid Build Coastguard Worker unsigned long long v2; 306*27162e4eSAndroid Build Coastguard Worker unsigned long long v3; 307*27162e4eSAndroid Build Coastguard Worker unsigned long long v4; 308*27162e4eSAndroid Build Coastguard Worker unsigned long long mem64[4]; 309*27162e4eSAndroid Build Coastguard Worker unsigned memsize; 310*27162e4eSAndroid Build Coastguard Worker unsigned reserved[2]; /* never read nor write, might be removed in a future version */ 311*27162e4eSAndroid Build Coastguard Worker }; /* typedef'd to XXH64_state_t */ 312*27162e4eSAndroid Build Coastguard Worker # endif 313*27162e4eSAndroid Build Coastguard Worker 314*27162e4eSAndroid Build Coastguard Worker # endif 315*27162e4eSAndroid Build Coastguard Worker 316*27162e4eSAndroid Build Coastguard Worker 317*27162e4eSAndroid Build Coastguard Worker #if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) 318*27162e4eSAndroid Build Coastguard Worker # include "xxhash.c" /* include xxhash function bodies as `static`, for inlining */ 319*27162e4eSAndroid Build Coastguard Worker #endif 320*27162e4eSAndroid Build Coastguard Worker 321*27162e4eSAndroid Build Coastguard Worker #endif /* XXH_STATIC_LINKING_ONLY */ 322*27162e4eSAndroid Build Coastguard Worker 323*27162e4eSAndroid Build Coastguard Worker 324*27162e4eSAndroid Build Coastguard Worker #if defined (__cplusplus) 325*27162e4eSAndroid Build Coastguard Worker } 326*27162e4eSAndroid Build Coastguard Worker #endif 327*27162e4eSAndroid Build Coastguard Worker 328*27162e4eSAndroid Build Coastguard Worker #endif /* XXHASH_H_5627135585666179 */ 329