stuff-from-scratch/src/compression/ZlibEncoder.h

56 lines
1.3 KiB
C
Raw Normal View History

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-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);
void parseExtraFlags(unsigned char extraFlags);
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;
};