CppUtils/zlib_cpp/ZlibCompressor.h

119 lines
3.7 KiB
C
Raw Permalink Normal View History

2025-06-05 10:06:43 +08:00
#pragma once
#include "ZlibBase.h"
#include <vector>
#include <string>
namespace ZlibCpp {
/**
* @brief zlib压缩器类
*/
class ZlibCompressor : public ZlibBase {
public:
/**
* @brief
* @param level
* @param format
* @param strategy
*/
ZlibCompressor(CompressionLevel level = CompressionLevel::DefaultCompression,
DataFormat format = DataFormat::Zlib,
CompressionStrategy strategy = CompressionStrategy::Default);
/**
* @brief
*/
~ZlibCompressor() override;
/**
* @brief
* @param level
* @param format
* @param strategy
*/
void Initialize(CompressionLevel level = CompressionLevel::DefaultCompression,
DataFormat format = DataFormat::Zlib,
CompressionStrategy strategy = CompressionStrategy::Default);
/**
* @brief
*/
void Reset() override;
/**
* @brief
* @param input
* @param flush
* @return
*/
std::vector<uint8_t> Compress(const std::vector<uint8_t>& input, bool flush = false);
/**
* @brief
* @param input
* @param input_size
* @param flush
* @return
*/
std::vector<uint8_t> Compress(const uint8_t* input, size_t input_size, bool flush = false);
/**
* @brief
* @return
*/
std::vector<uint8_t> Finish();
/**
* @brief
* @param input
* @param level
* @param format
* @return
*/
static std::vector<uint8_t> CompressData(const std::vector<uint8_t>& input,
CompressionLevel level = CompressionLevel::DefaultCompression,
DataFormat format = DataFormat::Zlib);
/**
* @brief
* @param input
* @param level
* @param format
* @return
*/
static std::vector<uint8_t> CompressString(const std::string& input,
CompressionLevel level = CompressionLevel::DefaultCompression,
DataFormat format = DataFormat::Zlib);
/**
* @brief
* @param dictionary
*/
void SetDictionary(const std::vector<uint8_t>& dictionary);
/**
* @brief
*/
void GetParams(CompressionLevel& level, CompressionStrategy& strategy) const;
/**
* @brief
*/
void SetParams(CompressionLevel level, CompressionStrategy strategy);
protected:
void Cleanup() override;
private:
CompressionLevel level_;
DataFormat format_;
CompressionStrategy strategy_;
bool finished_;
/**
* @brief
*/
std::vector<uint8_t> CompressInternal(const uint8_t* input, size_t input_size, int flush_mode);
};
} // namespace ZlibCpp