3#include <StormByte/buffer/consumer.hxx>
4#include <StormByte/clonable.hxx>
5#include <StormByte/crypto/typedefs.hxx>
6#include <StormByte/crypto/visibility.h>
12namespace StormByte::Crypto::Compressor {
26 class STORMBYTE_CRYPTO_PUBLIC
Generic:
public StormByte::Clonable<Generic> {
65 inline
bool Compress(const std::span<const std::
byte> input, Buffer::WriteOnly& output) const noexcept {
66 return DoCompress(input, output);
75 inline bool Compress(
const Buffer::ReadOnly& input, Buffer::WriteOnly& output)
const noexcept {
76 return DoCompress(
const_cast<Buffer::ReadOnly&
>(input), output, ReadMode::Copy);
85 inline bool Compress(Buffer::ReadOnly& input, Buffer::WriteOnly& output)
const noexcept {
86 return DoCompress(input, output, ReadMode::Move);
95 inline Buffer::Consumer
Compress(Buffer::Consumer consumer, ReadMode mode = ReadMode::Move)
const noexcept {
96 return DoCompress(consumer, mode);
105 inline bool Decompress(
const std::span<const std::byte> input, Buffer::WriteOnly& output)
const noexcept {
106 return DoDecompress(input, output);
115 inline bool Decompress(
const Buffer::ReadOnly& input, Buffer::WriteOnly& output)
const noexcept {
116 return DoDecompress(
const_cast<Buffer::ReadOnly&
>(input), output, ReadMode::Copy);
125 inline bool Decompress(Buffer::ReadOnly& input, Buffer::WriteOnly& output)
const noexcept {
126 return DoDecompress(input, output, ReadMode::Move);
135 inline Buffer::Consumer
Decompress(Buffer::Consumer consumer, ReadMode mode = ReadMode::Move)
const noexcept {
136 return DoDecompress(consumer, mode);
143 unsigned short Level() const noexcept {
151 inline enum Type
Type() const noexcept {
157 unsigned short m_level = 0;
163 inline Generic(
enum Type type,
unsigned short level = 5):
164 m_type(type), m_level(level) {}
174 virtual bool DoCompress(std::span<const std::byte> input, Buffer::WriteOnly& output)
const noexcept = 0;
183 bool DoCompress(Buffer::ReadOnly& input, Buffer::WriteOnly& output, ReadMode mode)
const noexcept;
191 virtual Buffer::Consumer DoCompress(Buffer::Consumer consumer, ReadMode mode)
const noexcept = 0;
200 virtual bool DoDecompress(std::span<const std::byte> input, Buffer::WriteOnly& output)
const noexcept = 0;
209 bool DoDecompress(Buffer::ReadOnly& input, Buffer::WriteOnly& output, ReadMode mode)
const noexcept;
217 virtual Buffer::Consumer DoDecompress(Buffer::Consumer consumer, ReadMode mode)
const noexcept = 0;
226 STORMBYTE_CRYPTO_PUBLIC Generic::PointerType Create(Type type,
unsigned short level)
noexcept;
A generic compressor class.
Definition generic.hxx:26
virtual ~Generic() noexcept=default
Virtual destructor.
enum Type Type() const noexcept
Gets the type of compressor.
Definition generic.hxx:151
bool Decompress(Buffer::ReadOnly &input, Buffer::WriteOnly &output) const noexcept
Decompress data from input buffer to output buffer, moving the input data.
Definition generic.hxx:125
Buffer::Consumer Compress(Buffer::Consumer consumer, ReadMode mode=ReadMode::Move) const noexcept
Compress data from a Consumer buffer.
Definition generic.hxx:95
Buffer::Consumer Decompress(Buffer::Consumer consumer, ReadMode mode=ReadMode::Move) const noexcept
Decompress data from a Consumer buffer.
Definition generic.hxx:135
bool Decompress(const std::span< const std::byte > input, Buffer::WriteOnly &output) const noexcept
Decompress data from input buffer to output buffer.
Definition generic.hxx:105
Generic(Generic &&other) noexcept=default
Move constructor.
Generic(const Generic &other)=default
Copy constructor.
unsigned short Level() const noexcept
Gets the compression level.
Definition generic.hxx:143
bool Compress(const Buffer::ReadOnly &input, Buffer::WriteOnly &output) const noexcept
Compress data from input buffer to output buffer.
Definition generic.hxx:75
bool Decompress(const Buffer::ReadOnly &input, Buffer::WriteOnly &output) const noexcept
Decompress data from input buffer to output buffer.
Definition generic.hxx:115
enum Type m_type
The type of compressor.
Definition generic.hxx:156
Generic(enum Type type, unsigned short level=5)
Constructor.
Definition generic.hxx:163
bool Compress(Buffer::ReadOnly &input, Buffer::WriteOnly &output) const noexcept
Compress data from input buffer to output buffer, moving the input data.
Definition generic.hxx:85