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