in csharp/src/HufDecompress.cs [404:428]
public static size_t HUF_decodeStreamX4(BYTE* p, BIT_DStream_t bitDPtr, BYTE* pEnd, HUF_DEltX4* dt, U32 dtLog)
{
BYTE* pStart = p;
/* up to 8 symbols at a time */
while ((ReloadDStream(bitDPtr) == BIT_DStream_status.BIT_DStream_unfinished) & (p < pEnd - (sizeOfBitContainer - 1)))
{
HUF_DECODE_SYMBOLX4_2(ref p, bitDPtr, dt, dtLog);
HUF_DECODE_SYMBOLX4_1(ref p, bitDPtr, dt, dtLog);
HUF_DECODE_SYMBOLX4_2(ref p, bitDPtr, dt, dtLog);
HUF_DECODE_SYMBOLX4_0(ref p, bitDPtr, dt, dtLog);
}
/* closer to end : up to 2 symbols at a time */
while ((ReloadDStream(bitDPtr) == BIT_DStream_status.BIT_DStream_unfinished) & (p <= pEnd - 2))
HUF_DECODE_SYMBOLX4_0(ref p, bitDPtr, dt, dtLog);
while (p <= pEnd - 2)
HUF_DECODE_SYMBOLX4_0(ref p, bitDPtr, dt, dtLog); /* no need to reload : reached the end of DStream */
if (p < pEnd)
p += HUF_decodeLastSymbolX4(p, bitDPtr, dt, dtLog);
return (size_t)(p - pStart);
}