diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2020-03-29 22:59:04 +0300 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2020-03-29 22:59:04 +0300 |
commit | 13771971cfaef6356ba47668cae6ce25c5c2071f (patch) | |
tree | f2706c35edb06cbf43fc18a7c30608dfea67587f /lib/compressionctx.h | |
parent | Change rcc command line (diff) | |
download | rcc-13771971cfaef6356ba47668cae6ce25c5c2071f.tar.xz |
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
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 |