//FORCE_INLINE_TEMPLATE U64 XXH64_endian_align( void* input, size_t len, U64 seed, XXH_endianess endian, XXH_alignment align) //{ // BYTE* p = ( BYTE*)input; // BYTE* bEnd = p + len; // U64 h64; //#define XXH_get64bits(p) XXH_readLE64_align(p, endian, align) //#ifdef XXH_ACCEPT_NULL_INPUT_POINTER // if (p==NULL) { // len=0; // bEnd=p=( BYTE*)(size_t)32; // } //#endif // if (len>=32) { // BYTE* limit = bEnd - 32; // U64 v1 = seed + PRIME64_1 + PRIME64_2; // U64 v2 = seed + PRIME64_2; // U64 v3 = seed + 0; // U64 v4 = seed - PRIME64_1; // do { // v1 = XXH64_round(v1, XXH_get64bits(p)); p+=8; // v2 = XXH64_round(v2, XXH_get64bits(p)); p+=8; // v3 = XXH64_round(v3, XXH_get64bits(p)); p+=8; // v4 = XXH64_round(v4, XXH_get64bits(p)); p+=8; // } while (p<=limit); // h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18); // h64 = XXH64_mergeRound(h64, v1); // h64 = XXH64_mergeRound(h64, v2); // h64 = XXH64_mergeRound(h64, v3); // h64 = XXH64_mergeRound(h64, v4); // } else { // h64 = seed + PRIME64_5; // } // h64 += (U64) len; // while (p+8<=bEnd) { // U64 k1 = XXH64_round(0, XXH_get64bits(p)); // h64 ^= k1; // h64 = XXH_rotl64(h64,27) * PRIME64_1 + PRIME64_4; // p+=8; // } // if (p+4<=bEnd) { // h64 ^= (U64)(XXH_get32bits(p)) * PRIME64_1; // h64 = XXH_rotl64(h64, 23) * PRIME64_2 + PRIME64_3; // p+=4; // } // while (p<bEnd) { // h64 ^= (*p) * PRIME64_5; // h64 = XXH_rotl64(h64, 11) * PRIME64_1; // p++; // } // h64 ^= h64 >> 33; // h64 *= PRIME64_2; // h64 ^= h64 >> 29; // h64 *= PRIME64_3; // h64 ^= h64 >> 32; // return h64; //} //XXH_PUBLIC_API unsigned long long XXH64 ( void* input, size_t len, unsigned long long seed) //{ //#if 0 // /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ // XXH64_CREATESTATE_STATIC(state); // XXH64_reset(state, seed); // XXH64_update(state, input, len); // return XXH64_digest(state); //#else // XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN; // if (XXH_FORCE_ALIGN_CHECK) { // if ((((size_t)input) & 7)==0) { /* Input is aligned, let's leverage the speed advantage */ // if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT) // return XXH64_endian_align(input, len, seed, XXH_littleEndian, XXH_aligned); // else // return XXH64_endian_align(input, len, seed, XXH_bigEndian, XXH_aligned); // } } // if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT) // return XXH64_endian_align(input, len, seed, XXH_littleEndian, XXH_unaligned); // else // return XXH64_endian_align(input, len, seed, XXH_bigEndian, XXH_unaligned); //#endif //} ///* ************************************************** //* Advanced Hash Functions //****************************************************/ //XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void) //{ // return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t)); //} //XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr) //{ // XXH_free(statePtr); // return XXH_OK; //} //XXH_PUBLIC_API XXH64_state_t XXH64_createState(void) //{ // return (XXH64_state_t)XXH_malloc(sizeof(XXH64_state_t)); //} //XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t statePtr) //{ // XXH_free(statePtr); // return XXH_OK; //} ///*** Hash feed ***/ //XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, unsigned int seed) //{ // XXH32_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */ // memset(&state, 0, sizeof(state)-4); /* do not write into reserved, for future removal */ // state.v1 = seed + PRIME32_1 + PRIME32_2; // state.v2 = seed + PRIME32_2; // state.v3 = seed + 0; // state.v4 = seed - PRIME32_1; // memcpy(statePtr, &state, sizeof(state)); // return XXH_OK; //} public static XXH_errorcode XXH64_reset(XXH64_state_t statePtr, ulong seed) { XXH64_state_t state = statePtr; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */ state.FillZero(); // memset(&state, 0, sizeof(state) - 8); /* do not write into reserved, for future removal */ state.v1 = seed + PRIME64_1 + PRIME64_2; state.v2 = seed + PRIME64_2; state.v3 = seed + 0; state.v4 = seed - PRIME64_1; // memcpy(statePtr, &state, sizeof(state)); return(XXH_errorcode.XXH_OK); }