2022-11-23 15:41:33 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "AbstractEncoder.h"
|
|
|
|
|
2022-11-24 16:15:41 +00:00
|
|
|
#include "DeflateElements.h"
|
|
|
|
|
2022-11-23 15:41:33 +00:00
|
|
|
#include <memory>
|
|
|
|
#include <vector>
|
|
|
|
|
2022-11-24 16:15:41 +00:00
|
|
|
class AbstractChecksumCalculator;
|
|
|
|
|
2022-11-23 15:41:33 +00:00
|
|
|
class ZlibEncoder : public AbstractEncoder
|
|
|
|
{
|
|
|
|
public:
|
2022-11-24 16:15:41 +00:00
|
|
|
|
|
|
|
enum class CompressionMethod : unsigned char
|
|
|
|
{
|
|
|
|
DEFLATE = 8,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class CompressionLevel : unsigned char
|
|
|
|
{
|
|
|
|
FASTEST,
|
|
|
|
FAST,
|
|
|
|
DEFAULT,
|
|
|
|
MAX_COMPRESSION
|
|
|
|
};
|
|
|
|
|
2022-11-23 15:41:33 +00:00
|
|
|
ZlibEncoder(BitStream* inputStream, BitStream* outputStream);
|
|
|
|
~ZlibEncoder();
|
|
|
|
|
2022-11-24 16:15:41 +00:00
|
|
|
void setWindowSize(unsigned size);
|
2022-11-28 10:16:04 +00:00
|
|
|
void setDeflateCompressionMethod(Deflate::CompressionMethod method)
|
|
|
|
{
|
|
|
|
mDeflateCompressionMethod = method;
|
|
|
|
}
|
2022-11-23 15:41:33 +00:00
|
|
|
|
|
|
|
bool encode() override;
|
|
|
|
bool decode() override;
|
|
|
|
|
2022-11-24 16:15:41 +00:00
|
|
|
std::string getData() const;
|
|
|
|
std::string toString(CompressionLevel level) const;
|
|
|
|
std::string toString(CompressionMethod method) const;
|
|
|
|
|
2022-11-23 15:41:33 +00:00
|
|
|
private:
|
2022-11-24 16:15:41 +00:00
|
|
|
void parseCompressionMethod(unsigned char method);
|
2022-11-24 17:43:31 +00:00
|
|
|
void parseExtraFlags(unsigned char extraFlags, unsigned char compression_byte);
|
2022-11-24 16:15:41 +00:00
|
|
|
|
|
|
|
CompressionMethod mCompressionMethod{CompressionMethod::DEFLATE};
|
|
|
|
Deflate::CompressionMethod mDeflateCompressionMethod{Deflate::CompressionMethod::NONE};
|
|
|
|
unsigned mWindowSize{32768}; // Window size, n in 2^(n+8) bytes
|
|
|
|
|
2022-11-23 15:41:33 +00:00
|
|
|
unsigned char mFlagCheck{0};
|
2022-11-24 16:15:41 +00:00
|
|
|
bool mUseDictionary{false};
|
|
|
|
CompressionLevel mFlagLevel{CompressionLevel::DEFAULT};
|
2022-11-23 15:41:33 +00:00
|
|
|
|
2022-11-24 16:15:41 +00:00
|
|
|
std::unique_ptr<AbstractChecksumCalculator> mChecksumCalculator;
|
2022-11-23 15:41:33 +00:00
|
|
|
std::unique_ptr<AbstractEncoder> mWorkingEncoder;
|
|
|
|
};
|