in csharp/src/XxHash.cs [1105:1161]
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;
}