2525#ifndef KEYVI_COMPRESSION_COMPRESSION_SELECTOR_H_
2626#define KEYVI_COMPRESSION_COMPRESSION_SELECTOR_H_
2727
28+ #include < memory>
2829#include < string>
2930
3031#include < boost/algorithm/string.hpp>
3132#include < boost/lexical_cast.hpp>
3233
34+ #include " keyvi/compression/compression_algorithm.h"
3335#include " keyvi/compression/compression_strategy.h"
3436#include " keyvi/compression/snappy_compression_strategy.h"
3537#include " keyvi/compression/zlib_compression_strategy.h"
@@ -64,8 +66,8 @@ inline CompressionStrategy* compression_strategy(const std::string& name = "") {
6466typedef std::string (*decompress_func_t )(const std::string&);
6567typedef void (CompressionStrategy::*compress_mem_fn_t )(buffer_t *, const char *, size_t );
6668
67- inline decompress_func_t decompressor_by_code (const std::string& s ) {
68- switch (s[ 0 ] ) {
69+ inline decompress_func_t decompressor_by_code (const CompressionAlgorithm algorithm ) {
70+ switch (algorithm ) {
6971 case NO_COMPRESSION:
7072 TRACE (" unpack uncompressed string" );
7173 return RawCompressionStrategy::DoDecompress;
@@ -79,8 +81,29 @@ inline decompress_func_t decompressor_by_code(const std::string& s) {
7981 TRACE (" unpack zstd compressed string" );
8082 return ZstdCompressionStrategy::DoDecompress;
8183 default :
82- throw std::invalid_argument (" Invalid compression code " +
83- boost::lexical_cast<std::string>(static_cast <int >(s[0 ])));
84+ throw std::invalid_argument (" Invalid compression algorithm " +
85+ boost::lexical_cast<std::string>(static_cast <int >(algorithm)));
86+ }
87+ }
88+
89+ inline decompress_func_t decompressor_from_string (const std::string& s) {
90+ return decompressor_by_code (static_cast <CompressionAlgorithm>(s[0 ]));
91+ }
92+
93+ /* * Returns an instance of a compression strategy by enum. */
94+ inline compression_strategy_t compression_strategy_by_code (const CompressionAlgorithm algorithm) {
95+ switch (algorithm) {
96+ case NO_COMPRESSION:
97+ return std::make_unique<RawCompressionStrategy>();
98+ case ZLIB_COMPRESSION:
99+ return std::make_unique<ZlibCompressionStrategy>();
100+ case SNAPPY_COMPRESSION:
101+ return std::make_unique<SnappyCompressionStrategy>();
102+ case ZSTD_COMPRESSION:
103+ return std::make_unique<ZstdCompressionStrategy>();
104+ default :
105+ throw std::invalid_argument (" Invalid compression algorithm " +
106+ boost::lexical_cast<std::string>(static_cast <int >(algorithm)));
84107 }
85108}
86109
0 commit comments