Оптимизация кодирования переменной длины

У меня есть случай, когда мне нужно сжать много часто маленьких значений. Поэтому я сжимаю их с помощью байтовой кодировки переменной длины (ULEB128, если быть точным):

size_t
compress_unsigned_int(unsigned int n, char* data)
{
  size_t size = 0;
  while (n  > 127)
  {
    ++size;
    *data++ = (n & 127)|128;
    n >>= 7;
  }
  *data++ = n;
  return ++size;
}

Есть ли более эффективный способ сделать это (возможно, используя SSE)?

Edit: После этого сжатия результат сохраняется в data, занимая size байт. Затем функция сжатия вызывается на следующем unsigned int.

12
задан Alexandre Hamez 2 May 2011 в 16:02
поделиться