Простой поточный 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
-- Длина внутреннего буфера по умолчанию.