| al_zatv ( |
Это худший случай. Классически, мы должны были бы:
1. Найти наименее используемый символ
(положим, они все одинаково используются и это будет символ A)
2. Закодировать.
Вышло бы:
AA2BBCCDDEE...
Что в буфер бы не полезло, не говоря уж о перехлёсте.
С этим надо бороться, думаю, так.
RLE_Encoder всё равно работает в два прохода (хотя мне это и не нравится). Раз так, на первом проходе считаем ещё и размер, который будет у буфера после сжатия - PrognosedSize.
Ну а потом:
ежели (PrognosedSize>=BufferSize)
Ничего_Сжимать_Не_надо;
1. Найти наименее используемый символ
(положим, они все одинаково используются и это будет символ A)
2. Закодировать.
Вышло бы:
AA2BBCCDDEE...
Что в буфер бы не полезло, не говоря уж о перехлёсте.
С этим надо бороться, думаю, так.
RLE_Encoder всё равно работает в два прохода (хотя мне это и не нравится). Раз так, на первом проходе считаем ещё и размер, который будет у буфера после сжатия - PrognosedSize.
Ну а потом:
ежели (PrognosedSize>=BufferSize)
Ничего_Сжимать_Не_надо;