Простой поточный RLE-компрессор/декомпрессор
Открыто
22.03.2021, 11:32
Реализовать класс RleCodec, простое сжатие/разжатие данных с помощью алгоритма RLE.
Простой класс, по сути FIFO'шка, принимающая байты данных, и выдающая по запросу сжатые байты потока. Аналогично в обратном направлении.  
Реализовать класс RleCodec .
public и protected методы классов фиксированы, кроме спецификаторов. 
Т.е. нельзя менять названия методов, а также типы и количество аргументов.
НО в этих методах отсутствуют спецификаторы const и static, которые были удалены намеренно. Их необходимо вернуть на место.
private поля и private методы можно добавлять в класс RleCodec. 
//RleCodec.hpp
class RleCodec {
public:
  RleCodec();
  RleCodec(size_t size);
  ~RleCodec();
  RleCodec(const RleCodec&) = delete;
  RleCodec& operator=(const RleCodec&) = delete;
  size_t push_compress(const char* data, size_t size);
  size_t pop_compress(const char* buff, size_t size);
  size_t push_decompress(const char* data, size_t size);
  size_t pop_decompress(const char* buff, size_t size);
protected:
  const size_t c_default_size = 1024;
};
RleCodec() -- Конструктор по умолчанию, задаёт длину буфера по умолчанию.RleCodec(size_t size) -- Конструктор задающий длину буфера.~RleCodec() -- деструктор.RleCodec(const RleCodec& val) = delete -- запрет копирующего конструктора.RleCodec& operator=(const RleCodec&) = delete -- запрет оператора присваивания
size_t push_compress(const char* data, size_t size) -- передать (протолкнуть) на сжатие очередную порцию данных.
Читает из входного буфера данные, сжимает их, записывает сжатые данные в пустое место внутреннего буфера.
Возвращает количество забранных из буфера байт. 
Если задан размер внутреннего буфера равный нулю(0), то ничего не делает и возвращает ноль(0). 
size_t pop_compress(const char* buff, size_t size) -- забрать (вытолкнуть) сжатые данные из буфера.
Копирует данные из внутреннего буфера.
Возвращает количество записанных в буфер байт. 
size_t push_decompress(const char* data, size_t size) -- передать (протолкнуть) на разжатие очередную порцию данных.
Читает из входного буфера данные, разжимает их, записывает разжатые данные в пустое место внутреннего буфера.
Возвращает количество забранных из буфера байт. 
Если задан размер внутреннего буфера равный нулю(0), то ничего не делает и возвращает ноль(0). 
size_t pop_decompress(const char* buff, size_t size) -- забрать (вытолкнуть) разжатые данные из буфера.
Копирует данные из внутреннего буфера.
Возвращает количество записанных в буфер байт. 
const size_t c_default_size = 1024 -- Длина внутреннего буфера по умолчанию.