Наш декомпрессор в стиле фильтра
Декомпрессор, работающий в посимвольном режиме будет выглядеть
так:
int decompressor_next(decompressor* dc)
{
if (dc->rcnt && dc->rcnt-- > 0) /* Контроль декомпрессии */
return dc->c; /* Возврат повторного символа */
if (!dc->srclen || dc->srclen-- <= 0) /* Пропуск ... */
return -1;
dc->c = *(dc->p)++; /* Обработка следующего символа буфера */
if (dc->c == 0xff) {
dc->rcnt = (*(dc->p)++)-1; /* Сброс первого символа в записи */
dc->c = *(dc->p)++; /* Здесь повторить символ */
dc->srclen -= 2;
}
return dc->c;
}