180 lines
3.6 KiB
C++
Raw Normal View History

2025-06-05 10:06:43 +08:00
#ifndef ZSTREAM_HPP
#define ZSTREAM_HPP
#include "zlib_cpp.hpp"
#include <cstdint>
#include <vector>
#include <memory>
#include <functional>
namespace zlib_cpp {
// 前向声明
struct ZStreamImpl;
/**
* @brief ZStream类是zlib流处理的核心类zlib的z_stream结构
*
* ZCompressor和ZDecompressor的基类
*
*/
class ZStream {
public:
using AllocFunc = std::function<void*(void*, size_t, size_t)>;
using FreeFunc = std::function<void(void*, void*)>;
protected:
std::unique_ptr<ZStreamImpl> _impl;
bool _isInitialized = false;
// 自定义内存分配器和释放器(可选)
AllocFunc _allocFunc;
FreeFunc _freeFunc;
void* _allocOpaque = nullptr;
public:
/**
* @brief
*/
ZStream();
/**
* @brief
*
* @param allocFunc
* @param freeFunc
* @param opaque /
*/
ZStream(AllocFunc allocFunc, FreeFunc freeFunc, void* opaque);
/**
* @brief
*/
virtual ~ZStream();
/**
* @brief
*/
ZStream(const ZStream&) = delete;
/**
* @brief
*/
ZStream& operator=(const ZStream&) = delete;
/**
* @brief
*/
ZStream(ZStream&& other) noexcept;
/**
* @brief
*/
ZStream& operator=(ZStream&& other) noexcept;
/**
* @brief
*
* @param data
* @param size
*/
void setInput(const uint8_t* data, size_t size);
/**
* @brief
*
* @param buffer
* @param size
*/
void setOutput(uint8_t* buffer, size_t size);
/**
* @brief
*
* @return
*/
size_t getAvailableInput() const;
/**
* @brief
*
* @return
*/
size_t getAvailableOutput() const;
/**
* @brief
*
* @return
*/
size_t getTotalInput() const;
/**
* @brief
*
* @return
*/
size_t getTotalOutput() const;
/**
* @brief
*
* @return
*/
virtual StatusCode reset() = 0;
/**
* @brief
*
* @return
*/
std::string getLastErrorMessage() const;
/**
* @brief
*
* @return
*/
DataType getDataType() const;
/**
* @brief
*
* @param type
*/
void setDataType(DataType type);
/**
* @brief Adler-32
*
* @return Adler-32
*/
uint32_t getAdler() const;
/**
* @brief Adler-32
*
* @param adler Adler-32
*/
void setAdler(uint32_t adler);
protected:
/**
* @brief
*
* @return
*/
virtual StatusCode init() = 0;
/**
* @brief
*
* @return
*/
virtual StatusCode end() = 0;
};
} // namespace zlib_cpp
#endif // ZSTREAM_HPP