From 13771971cfaef6356ba47668cae6ce25c5c2071f Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sun, 29 Mar 2020 22:59:04 +0300 Subject: Drop dependency on serge-sans-paille/frozen format: - instead of frozen::unordered_map, create two std::arrays with the aliased names (entries) and respective data (values) libembed: - Resources and CompressedResources convenience classes for raw and compressed resources respectively - Resources can be constexpr in regular usage - Annotate Resources::decompress accordingly --- lib/compressionctx.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 lib/compressionctx.h (limited to 'lib/compressionctx.h') 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 +#include + +#pragma once + +namespace embed +{ + +enum Compression { + None, + Zstd +}; + +class CompressionCtx +{ +public: + virtual ~CompressionCtx() = default; + [[nodiscard]] virtual std::vector decompress(const std::span &entry) const = 0; +}; + +class ZstdCompressionCtx final : public CompressionCtx +{ +public: + ZstdCompressionCtx(const std::span &dictionary); + ~ZstdCompressionCtx(); + [[nodiscard]] std::vector decompress(const std::span &entry) const override; +}; + +std::unique_ptr make_compression_ctx(const Compression algo, const std::span &dict) +{ + switch(algo) + { + case None: + return nullptr; + case Zstd: + return std::make_unique(dict); + } +} + +} // namespace embed -- cgit v1.2.1