151 lines
2.8 KiB
C++
151 lines
2.8 KiB
C++
|
#ifndef ZDECOMPRESSOR_HPP
|
|||
|
#define ZDECOMPRESSOR_HPP
|
|||
|
|
|||
|
#include "zstream.hpp"
|
|||
|
#include "zcompressor.hpp"
|
|||
|
|
|||
|
namespace zlib_cpp {
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 解压缩器类,处理数据解压功能
|
|||
|
*/
|
|||
|
class ZDecompressor : public ZStream {
|
|||
|
private:
|
|||
|
int _windowBits = 15; // 默认windowBits
|
|||
|
bool _expectGzip = false;
|
|||
|
|
|||
|
public:
|
|||
|
/**
|
|||
|
* @brief 默认构造函数
|
|||
|
*/
|
|||
|
ZDecompressor();
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 带参数的构造函数
|
|||
|
*
|
|||
|
* @param windowBits 窗口大小,负值表示不使用zlib头/尾
|
|||
|
*/
|
|||
|
ZDecompressor(int windowBits);
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 析构函数
|
|||
|
*/
|
|||
|
virtual ~ZDecompressor();
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 使用默认参数解压数据
|
|||
|
*
|
|||
|
* @param data 压缩后的数据
|
|||
|
* @return 解压后的数据
|
|||
|
*/
|
|||
|
std::vector<uint8_t> decompress(const std::vector<uint8_t>& data);
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 解压数据块
|
|||
|
*
|
|||
|
* @param flush 刷新模式
|
|||
|
* @return 处理状态
|
|||
|
*/
|
|||
|
StatusCode inflate(FlushMode flush = FlushMode::NO_FLUSH);
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 设置字典
|
|||
|
*
|
|||
|
* @param dictionary 字典数据
|
|||
|
* @return 状态码
|
|||
|
*/
|
|||
|
StatusCode setDictionary(const std::vector<uint8_t>& dictionary);
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 获取字典
|
|||
|
*
|
|||
|
* @return 字典数据
|
|||
|
*/
|
|||
|
std::vector<uint8_t> getDictionary();
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 重置解压缩器
|
|||
|
*
|
|||
|
* @return 状态码
|
|||
|
*/
|
|||
|
virtual StatusCode reset() override;
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 与解压同步
|
|||
|
*
|
|||
|
* @return 状态码
|
|||
|
*/
|
|||
|
StatusCode sync();
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 获取同步点
|
|||
|
*
|
|||
|
* @return 是否在同步点
|
|||
|
*/
|
|||
|
bool syncPoint();
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 获取GZip头信息
|
|||
|
*
|
|||
|
* @return GZip头信息
|
|||
|
*/
|
|||
|
GZipHeader getHeader();
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 预设输入位
|
|||
|
*
|
|||
|
* @param bits 位数
|
|||
|
* @param value 值
|
|||
|
* @return 状态码
|
|||
|
*/
|
|||
|
StatusCode prime(int bits, int value);
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 获取标记位置
|
|||
|
*
|
|||
|
* @return 标记位置
|
|||
|
*/
|
|||
|
long getMark();
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 设置是否期望GZip格式
|
|||
|
*
|
|||
|
* @param expectGzip 是否期望GZip格式
|
|||
|
*/
|
|||
|
void setExpectGZip(bool expectGzip = true);
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 验证
|
|||
|
*
|
|||
|
* @param check 是否检查
|
|||
|
* @return 状态码
|
|||
|
*/
|
|||
|
StatusCode validate(bool check);
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 获取已使用的代码数
|
|||
|
*
|
|||
|
* @return 已使用的代码数
|
|||
|
*/
|
|||
|
size_t getCodesUsed();
|
|||
|
|
|||
|
protected:
|
|||
|
/**
|
|||
|
* @brief 初始化解压缩器
|
|||
|
*
|
|||
|
* @return 状态码
|
|||
|
*/
|
|||
|
virtual StatusCode init() override;
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 清理解压缩器资源
|
|||
|
*
|
|||
|
* @return 状态码
|
|||
|
*/
|
|||
|
virtual StatusCode end() override;
|
|||
|
};
|
|||
|
|
|||
|
} // namespace zlib_cpp
|
|||
|
|
|||
|
#endif // ZDECOMPRESSOR_HPP
|