diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-06-12 12:50:51 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-06-12 21:39:25 +0200 |
commit | 62fbb0e42a634da08bb330fcb52aa87a6af9a17d (patch) | |
tree | 90603d563e8057e9abc2e13d6e298633f6a2f402 /document/src | |
parent | b37ec2bf0340fc6ef42b4a9a1fd7cb9d70a46398 (diff) |
Add the std compressor.
Diffstat (limited to 'document/src')
-rw-r--r-- | document/src/vespa/document/util/CMakeLists.txt | 1 | ||||
-rw-r--r-- | document/src/vespa/document/util/zstdcompressor.cpp | 35 | ||||
-rw-r--r-- | document/src/vespa/document/util/zstdcompressor.h | 18 |
3 files changed, 54 insertions, 0 deletions
diff --git a/document/src/vespa/document/util/CMakeLists.txt b/document/src/vespa/document/util/CMakeLists.txt index 8d1275d0207..ae1f7441062 100644 --- a/document/src/vespa/document/util/CMakeLists.txt +++ b/document/src/vespa/document/util/CMakeLists.txt @@ -4,6 +4,7 @@ vespa_add_library(document_util OBJECT bytebuffer.cpp compressor.cpp lz4compressor.cpp + zstdcompressor.cpp printable.cpp serializable.cpp stringutil.cpp diff --git a/document/src/vespa/document/util/zstdcompressor.cpp b/document/src/vespa/document/util/zstdcompressor.cpp new file mode 100644 index 00000000000..78ba15884f5 --- /dev/null +++ b/document/src/vespa/document/util/zstdcompressor.cpp @@ -0,0 +1,35 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "zstdcompressor.h" +#include <vespa/vespalib/util/alloc.h> +#include <zstd.h> +#include <cassert> + +using vespalib::alloc::Alloc; + +namespace document { + +size_t ZStdCompressor::adjustProcessLen(uint16_t, size_t len) const { return ZSTD_compressBound(len); } +size_t ZStdCompressor::adjustUnProcessLen(uint16_t, size_t len) const { return len; } + +bool +ZStdCompressor::process(const CompressionConfig& config, const void * inputV, size_t inputLen, void * outputV, size_t & outputLenV) +{ + size_t maxOutputLen = ZSTD_compressBound(inputLen); + size_t sz = ZSTD_compress(outputV, maxOutputLen, inputV, inputLen, config.compressionLevel); + assert( ! ZSTD_isError(sz) ); + outputLenV = sz; + return ! ZSTD_isError(sz); + +} + +bool +ZStdCompressor::unprocess(const void * inputV, size_t inputLen, void * outputV, size_t & outputLenV) +{ + size_t sz = ZSTD_decompress(outputV, outputLenV, inputV, inputLen); + assert( ! ZSTD_isError(sz) ); + outputLenV = sz; + return ! ZSTD_isError(sz); +} + +} diff --git a/document/src/vespa/document/util/zstdcompressor.h b/document/src/vespa/document/util/zstdcompressor.h new file mode 100644 index 00000000000..61b238e0bfb --- /dev/null +++ b/document/src/vespa/document/util/zstdcompressor.h @@ -0,0 +1,18 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#pragma once + +#include "compressor.h" + +namespace document { + +class ZStdCompressor : public ICompressor +{ +public: + bool process(const CompressionConfig& config, const void * input, size_t inputLen, void * output, size_t & outputLen) override; + bool unprocess(const void * input, size_t inputLen, void * output, size_t & outputLen) override; + size_t adjustProcessLen(uint16_t options, size_t len) const override; + size_t adjustUnProcessLen(uint16_t options, size_t len) const override; +}; + +} + |