static int MAPCDSF_decodeTable3Sub0(MaiBitReader mbr0, ManagedPointer<short> buf_to_read, uint num_to_read, MaiAT3PlusCoreDecoderSearchTableDes huff_table_now)
{
int rs = 0;
if (huff_table_now.uk3 == 1)
{
uint tcounter0 = 0;
for (uint b0 = 0; b0 < (num_to_read >> (huff_table_now.uk4)); b0++)
{
uint group_value = MAPCDSF_getHuffValue(huff_table_now, mbr0);
for (uint b1 = 0; b1 < huff_table_now.uk2; b1++)
{
uint value_now = (uint)(group_value >> (int)((huff_table_now.uk2 - b1 - 1) * huff_table_now.uk6));
value_now &= huff_table_now.mask;
if (0 == huff_table_now.uk5)
{
if ((value_now & ( 1 << (huff_table_now.uk6 - 1) )) != 0 )
buf_to_read[tcounter0++] = (short)(value_now | ( ~( ( 1 << (huff_table_now.uk6) ) - 1 ) ));
else
buf_to_read[tcounter0++] = (short)(value_now);
}
else
{
if ( ((value_now != 0) && (mbr0.getWithI32Buffer(1) != 0)) )
buf_to_read[tcounter0++] = (short)(((short)(value_now)) * (-1));
else
buf_to_read[tcounter0++] = (short)(value_now);
}
}
}
}
else if (huff_table_now.uk3 > 1)
{
uint tcounter0 = 0;
for (uint b0 = 0; b0 < (num_to_read >> (huff_table_now.uk4)); b0 += huff_table_now.uk3)
{
uint l320 = (uint)mbr0.getWithI32Buffer(1);
if (0 == l320)
{
for (uint b1 = 0; b1 < huff_table_now.uk3 * huff_table_now.uk2; b1++)
{
buf_to_read[tcounter0++] = 0;
}
}
else for (uint b2 = 0; b2 < huff_table_now.uk3; b2++)
{
uint group_value = MAPCDSF_getHuffValue(huff_table_now, mbr0);
for (uint b1 = 0; b1 < huff_table_now.uk2; b1++)
{
uint value_now = (uint)(group_value >> (int)((huff_table_now.uk2 - b1 - 1) * huff_table_now.uk6));
value_now &= huff_table_now.mask;
if (0 == huff_table_now.uk5)
{
if ((value_now & ( 1 << (huff_table_now.uk6 - 1) )) != 0 )
buf_to_read[tcounter0++] = (short)(value_now | ( ~( ( 1 << (huff_table_now.uk6) ) - 1 ) ));
else
buf_to_read[tcounter0++] = (short)(value_now);
}
else
{
if ( ((value_now!= 0) && (mbr0.getWithI32Buffer(1)!= 0)) )
buf_to_read[tcounter0++] = (short)(((short)(value_now)) * (-1));
else
buf_to_read[tcounter0++] = (short)(value_now);
}
}
}
}
}
else
{
rs = -20;
}
return rs;
}