in csharp/src/HufDecompress.cs [222:245]
public static size_t HUF_decodeStreamX2(BYTE* p, BIT_DStream_t bitDPtr, BYTE* pEnd, HUF_DEltX2* dt, U32 dtLog)
{
BYTE* pStart = p;
/* up to 4 symbols at a time */
while ((ReloadDStream(bitDPtr) == BIT_DStream_status.BIT_DStream_unfinished) & (p < pEnd - 3))
{
HUF_DECODE_SYMBOLX2_2(ref p, bitDPtr, dt, dtLog);
HUF_DECODE_SYMBOLX2_1(ref p, bitDPtr, dt, dtLog);
HUF_DECODE_SYMBOLX2_2(ref p, bitDPtr, dt, dtLog);
HUF_DECODE_SYMBOLX2_0(ref p, bitDPtr, dt, dtLog);
}
/* [0-3] symbols remaining */
if (MEM_32bits())
while ((ReloadDStream(bitDPtr) == BIT_DStream_status.BIT_DStream_unfinished) & (p < pEnd))
HUF_DECODE_SYMBOLX2_0(ref p, bitDPtr, dt, dtLog);
/* no more data to retrieve from bitstream, no need to reload */
while (p < pEnd)
HUF_DECODE_SYMBOLX2_0(ref p, bitDPtr, dt, dtLog);
return (size_t)(pEnd - pStart);
}