Beispiel #1
0
        //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);
        }