private void Compress(uint[] data)
{
var compressed = new List<uint>();
uint zeros = 0;
uint ones = 0;
int count = data.Length << 5;
for (int i = 0; i < count;)
{
uint num = Take31Bits(data, i);
i += 31;
if (num == 0) // all zero
{
zeros += 31;
FlushOnes(compressed, ref ones);
}
else if (num == 0x7fffffff) // all ones
{
ones += 31;
FlushZeros(compressed, ref zeros);
}
else // literal
{
FlushOnes(compressed, ref ones);
FlushZeros(compressed, ref zeros);
compressed.Add(num);
}
}
FlushOnes(compressed, ref ones);
FlushZeros(compressed, ref zeros);
_compressed = compressed.ToArray();
}