diff options
Diffstat (limited to 'lib/compressionctx.h')
-rw-r--r-- | lib/compressionctx.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/compressionctx.h b/lib/compressionctx.h new file mode 100644 index 0000000..2f3946a --- /dev/null +++ b/lib/compressionctx.h @@ -0,0 +1,40 @@ +#include <span> +#include <vector> + +#pragma once + +namespace embed +{ + +enum Compression { + None, + Zstd +}; + +class CompressionCtx +{ +public: + virtual ~CompressionCtx() = default; + [[nodiscard]] virtual std::vector<uint8_t> decompress(const std::span<const uint8_t> &entry) const = 0; +}; + +class ZstdCompressionCtx final : public CompressionCtx +{ +public: + ZstdCompressionCtx(const std::span<const uint8_t> &dictionary); + ~ZstdCompressionCtx(); + [[nodiscard]] std::vector<uint8_t> decompress(const std::span<const uint8_t> &entry) const override; +}; + +std::unique_ptr<CompressionCtx> make_compression_ctx(const Compression algo, const std::span<const uint8_t> &dict) +{ + switch(algo) + { + case None: + return nullptr; + case Zstd: + return std::make_unique<ZstdCompressionCtx>(dict); + } +} + +} // namespace embed |