Сообщение от
Hrumer
2lvd: интересно было бы посмотреть на таблицу результатов.
Ща ещё чуть-чуть причешу код - и будет релиз =) там и таблицы рекламные будут, и файлы тестовые даже =) Если не заломает меня...
Следующим этапом, видимо, будет рассмотрение других кодов - просто для эксперимента.
Мне уже скорее всего влом будет =)
У тебя какие именно коды используются? (долго смотреть в распаковщике)
типа вот такого:
Код:
Формат пакованного файла:
первый байт копируется в выход
второй - ид¬т в биты
биты в байте битов - со старшего.
Если нужен бит, а его уже нет (все 8 кончились) - то новый байт выбирается
из потока. Оттуда же выбираются и байты, обозначенные <byte> - но только
после выборки всех битов ссылки.
В формате ссылок: <byte> - байт, который выбирается из потока
1<byte> - копировать <byte> в выход.
000abc - копировать 1 старый байт по смещению FFF8+[abc] от текущей позиции в выходе
(abc==000 - смещение FFF8, abc==111 - FFFF)
001<byte> - копировать 2 байта по смещению FF00+<byte> (-1..-256)
0100<byte> - копировать 3 байта по смещению FF00+<byte>
0101abcd<byte> - копировать 3 байта по смещению (F[abcd]-1)*256+<byte> (-257..-4352)
более длинные ссылки удобно представить в виде 3 частей:
префикс: 011
длина ссылки:
1a -> 4+[a]
01ab -> 6+[ab]
001abc -> 10+[abc]
0001abcd -> 18+[abcd]
00001abcde -> 34+[abcde]
000001abcdef -> 66+[abcdef]
0000001abcdefg -> 130+[abcdefg] (тут длина не более 255!)
смещение:
0<byte> - FF00+<byte> назад (-1..-256)
1abcd<byte> - (F[abcd]-1)*256+<byte> (-257..-4352)
Метка конца потока:
011000000001
примеры:
000111 - повторить последний байт
001<byte=FF> - повторить последний байт дважды (смещение=-1, длина 2) - совмещение LZ и RLE!!!!!
011 001101 10000<byte=0> - ссылка длиной %101+10 = 15 байт со смещением -4352