Beispiel #1
0
        public static ulong XXH64_digest(XXH64_state_t state_in)
        {
            //XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;

            //if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
            return(XXH64_digest_endian(state_in /*, XXH_littleEndian*/));
            //else
            //    return XXH64_digest_endian(state_in, XXH_bigEndian);
        }
Beispiel #2
0
        public static XXH_errorcode XXH64_update(XXH64_state_t state_in, void *input, size_t len)
        {
            //XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;

            //if ((endian_detected == XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
            return(XXH64_update_endian(state_in, input, len /*, XXH_littleEndian*/));
            //else
            //	return XXH64_update_endian(state_in, input, len, XXH_bigEndian);
        }
Beispiel #3
0
        public static U64 XXH64_digest_endian(XXH64_state_t state /*, XXH_endianess endian*/)
        {
            BYTE *p    = (BYTE *)state.mem64;
            BYTE *bEnd = p + state.memsize;

            U64 h64;

            if (state.total_len >= 32)
            {
                U64 v1 = state.v1;
                U64 v2 = state.v2;
                U64 v3 = state.v3;
                U64 v4 = state.v4;

                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 = state.v3 + PRIME64_5;
            }

            h64 += (U64)state.total_len;

            while (p + 8 <= bEnd)
            {
                U64 k1 = XXH64_round(0, XXH_readLE64(p /*, endian*/));
                h64 ^= k1;
                h64  = XXH_rotl64(h64, 27) * PRIME64_1 + PRIME64_4;
                p   += 8;
            }

            if (p + 4 <= bEnd)
            {
                h64 ^= (U64)(XXH_readLE32(p /*, endian*/)) * 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);
        }
Beispiel #4
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);
        }
Beispiel #5
0
        //FORCE_INLINE_TEMPLATE XXH_errorcode XXH32_update_endian (XXH32_state_t* state,  void* input, size_t len, XXH_endianess endian)
        //{
        //     BYTE* p = ( BYTE*)input;
        //     BYTE*  bEnd = p + len;

        //#ifdef XXH_ACCEPT_NULL_INPUT_POINTER
        //    if (input==NULL) return XXH_ERROR;
        //#endif

        //    state->total_len_32 += (unsigned)len;
        //    state->large_len |= (len>=16) | (state->total_len_32>=16);

        //    if (state->memsize + len < 16)  {   /* fill in tmp buffer */
        //        XXH_memcpy((BYTE*)(state->mem32) + state->memsize, input, len);
        //        state->memsize += (unsigned)len;
        //        return XXH_OK;
        //    }

        //    if (state->memsize) {   /* some data left from previous update */
        //        XXH_memcpy((BYTE*)(state->mem32) + state->memsize, input, 16-state->memsize);
        //        {    U32* p32 = state->mem32;
        //            state->v1 = XXH32_round(state->v1, XXH_readLE32(p32, endian)); p32++;
        //            state->v2 = XXH32_round(state->v2, XXH_readLE32(p32, endian)); p32++;
        //            state->v3 = XXH32_round(state->v3, XXH_readLE32(p32, endian)); p32++;
        //            state->v4 = XXH32_round(state->v4, XXH_readLE32(p32, endian)); p32++;
        //        }
        //        p += 16-state->memsize;
        //        state->memsize = 0;
        //    }

        //    if (p <= bEnd-16) {
        //         BYTE*  limit = bEnd - 16;
        //        U32 v1 = state->v1;
        //        U32 v2 = state->v2;
        //        U32 v3 = state->v3;
        //        U32 v4 = state->v4;

        //        do {
        //            v1 = XXH32_round(v1, XXH_readLE32(p, endian)); p+=4;
        //            v2 = XXH32_round(v2, XXH_readLE32(p, endian)); p+=4;
        //            v3 = XXH32_round(v3, XXH_readLE32(p, endian)); p+=4;
        //            v4 = XXH32_round(v4, XXH_readLE32(p, endian)); p+=4;
        //        } while (p<=limit);

        //        state->v1 = v1;
        //        state->v2 = v2;
        //        state->v3 = v3;
        //        state->v4 = v4;
        //    }

        //    if (p < bEnd) {
        //        XXH_memcpy(state->mem32, p, (size_t)(bEnd-p));
        //        state->memsize = (unsigned)(bEnd-p);
        //    }

        //    return XXH_OK;
        //}

        //XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* state_in,  void* input, size_t len)
        //{
        //    XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;

        //    if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
        //        return XXH32_update_endian(state_in, input, len, XXH_littleEndian);
        //    else
        //        return XXH32_update_endian(state_in, input, len, XXH_bigEndian);
        //}



        //FORCE_INLINE_TEMPLATE U32 XXH32_digest_endian ( XXH32_state_t* state, XXH_endianess endian)
        //{
        //     BYTE * p = ( BYTE*)state->mem32;
        //     BYTE*  bEnd = ( BYTE*)(state->mem32) + state->memsize;
        //    U32 h32;

        //    if (state->large_len) {
        //        h32 = XXH_rotl32(state->v1, 1) + XXH_rotl32(state->v2, 7) + XXH_rotl32(state->v3, 12) + XXH_rotl32(state->v4, 18);
        //    } else {
        //        h32 = state->v3 /* == seed */ + PRIME32_5;
        //    }

        //    h32 += state->total_len_32;

        //    while (p+4<=bEnd) {
        //        h32 += XXH_readLE32(p, endian) * PRIME32_3;
        //        h32  = XXH_rotl32(h32, 17) * PRIME32_4;
        //        p+=4;
        //    }

        //    while (p<bEnd) {
        //        h32 += (*p) * PRIME32_5;
        //        h32  = XXH_rotl32(h32, 11) * PRIME32_1;
        //        p++;
        //    }

        //    h32 ^= h32 >> 15;
        //    h32 *= PRIME32_2;
        //    h32 ^= h32 >> 13;
        //    h32 *= PRIME32_3;
        //    h32 ^= h32 >> 16;

        //    return h32;
        //}


        //XXH_PUBLIC_API unsigned int XXH32_digest ( XXH32_state_t* state_in)
        //{
        //    XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;

        //    if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
        //        return XXH32_digest_endian(state_in, XXH_littleEndian);
        //    else
        //        return XXH32_digest_endian(state_in, XXH_bigEndian);
        //}



        ///* **** XXH64 **** */

        public static XXH_errorcode XXH64_update_endian(XXH64_state_t state, void *input, size_t len /*, XXH_endianess endian*/)
        {
            BYTE *p    = (BYTE *)input;
            BYTE *bEnd = p + len;

            //#ifdef XXH_ACCEPT_NULL_INPUT_POINTER
            //    if (input==NULL) return XXH_ERROR;
            //#endif

            state.total_len += len;

            if (state.memsize + len < 32)
            {
                /* fill in tmp buffer */
                XXH_memcpy(((BYTE *)state.mem64) + state.memsize, input, len);
                state.memsize += (U32)len;
                return(XXH_errorcode.XXH_OK);
            }

            if (state.memsize != 0)
            {
                /* tmp buffer is full */
                XXH_memcpy(((BYTE *)state.mem64) + state.memsize, input, 32 - state.memsize);
                state.v1      = XXH64_round(state.v1, XXH_readLE64(state.mem64 + 0 /*, endian*/));
                state.v2      = XXH64_round(state.v2, XXH_readLE64(state.mem64 + 1 /*, endian*/));
                state.v3      = XXH64_round(state.v3, XXH_readLE64(state.mem64 + 2 /*, endian*/));
                state.v4      = XXH64_round(state.v4, XXH_readLE64(state.mem64 + 3 /*, endian*/));
                p            += 32 - state.memsize;
                state.memsize = 0;
            }

            if (p + 32 <= bEnd)
            {
                BYTE *limit = bEnd - 32;
                U64   v1    = state.v1;
                U64   v2    = state.v2;
                U64   v3    = state.v3;
                U64   v4    = state.v4;

                do
                {
                    v1 = XXH64_round(v1, XXH_readLE64(p /*, endian*/));
                    p += 8;
                    v2 = XXH64_round(v2, XXH_readLE64(p /*, endian*/));
                    p += 8;
                    v3 = XXH64_round(v3, XXH_readLE64(p /*, endian*/));
                    p += 8;
                    v4 = XXH64_round(v4, XXH_readLE64(p /*, endian*/));
                    p += 8;
                } while (p <= limit);

                state.v1 = v1;
                state.v2 = v2;
                state.v3 = v3;
                state.v4 = v4;
            }

            if (p < bEnd)
            {
                XXH_memcpy(state.mem64, p, (size_t)(bEnd - p));
                state.memsize = (uint)(bEnd - p);
            }

            return(XXH_errorcode.XXH_OK);
        }