diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/http/io/compression.cpp | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/http/io/compression.cpp')
-rw-r--r-- | library/cpp/http/io/compression.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/library/cpp/http/io/compression.cpp b/library/cpp/http/io/compression.cpp new file mode 100644 index 0000000000..8fa1f62ae6 --- /dev/null +++ b/library/cpp/http/io/compression.cpp @@ -0,0 +1,66 @@ +#include "compression.h" + +#if defined(ENABLE_GPL) +#include <library/cpp/streams/lz/lz.h> +#endif + +#include <library/cpp/streams/brotli/brotli.h> +#include <library/cpp/streams/lzma/lzma.h> +#include <library/cpp/streams/bzip2/bzip2.h> + +#include <library/cpp/blockcodecs/stream.h> +#include <library/cpp/blockcodecs/codecs.h> + +#include <util/stream/zlib.h> + + +TCompressionCodecFactory::TCompressionCodecFactory() { + auto gzip = [](auto s) { + return MakeHolder<TZLibDecompress>(s); + }; + + Add("gzip", gzip, [](auto s) { return MakeHolder<TZLibCompress>(s, ZLib::GZip); }); + Add("deflate", gzip, [](auto s) { return MakeHolder<TZLibCompress>(s, ZLib::ZLib); }); + Add("br", [](auto s) { return MakeHolder<TBrotliDecompress>(s); }, [](auto s) { return MakeHolder<TBrotliCompress>(s, 4); }); + Add("x-gzip", gzip, [](auto s) { return MakeHolder<TZLibCompress>(s, ZLib::GZip); }); + Add("x-deflate", gzip, [](auto s) { return MakeHolder<TZLibCompress>(s, ZLib::ZLib); }); + +#if defined(ENABLE_GPL) + const ui16 bs = 32 * 1024; + + Add("y-lzo", [](auto s) { return MakeHolder<TLzoDecompress>(s); }, [bs](auto s) { return MakeHolder<TLazy<TLzoCompress> >(s, bs); }); + Add("y-lzf", [](auto s) { return MakeHolder<TLzfDecompress>(s); }, [bs](auto s) { return MakeHolder<TLazy<TLzfCompress> >(s, bs); }); + Add("y-lzq", [](auto s) { return MakeHolder<TLzqDecompress>(s); }, [bs](auto s) { return MakeHolder<TLazy<TLzqCompress> >(s, bs); }); +#endif + + Add("y-bzip2", [](auto s) { return MakeHolder<TBZipDecompress>(s); }, [](auto s) { return MakeHolder<TBZipCompress>(s); }); + Add("y-lzma", [](auto s) { return MakeHolder<TLzmaDecompress>(s); }, [](auto s) { return MakeHolder<TLzmaCompress>(s); }); + + for (auto codecName : NBlockCodecs::ListAllCodecs()) { + if (codecName.StartsWith("zstd06")) { + continue; + } + + if (codecName.StartsWith("zstd08")) { + continue; + } + + auto codec = NBlockCodecs::Codec(codecName); + + auto enc = [codec](auto s) { + return MakeHolder<NBlockCodecs::TCodedOutput>(s, codec, 32 * 1024); + }; + + auto dec = [codec](auto s) { + return MakeHolder<NBlockCodecs::TDecodedInput>(s, codec); + }; + + Add(TString("z-") + codecName, dec, enc); + } +} + +void TCompressionCodecFactory::Add(TStringBuf name, TDecoderConstructor d, TEncoderConstructor e) { + Strings_.emplace_back(name); + Codecs_[Strings_.back()] = TCodec{d, e}; + BestCodecs_.emplace_back(Strings_.back()); +} |