1
#pragma once
2

            
3
#include "envoy/compression/compressor/compressor.h"
4

            
5
#include "source/common/compression/zstd/common/base.h"
6
#include "source/common/compression/zstd/compressor/zstd_compressor_impl_base.h"
7
#include "source/extensions/compression/zstd/common/dictionary_manager.h"
8

            
9
namespace Envoy {
10
namespace Extensions {
11
namespace Compression {
12
namespace Zstd {
13
namespace Compressor {
14

            
15
using ZstdCDictManager =
16
    Common::DictionaryManager<ZSTD_CDict, ZSTD_freeCDict, ZSTD_getDictID_fromCDict>;
17
using ZstdCDictManagerPtr = std::unique_ptr<ZstdCDictManager>;
18

            
19
/**
20
 * Implementation of compressor's interface.
21
 */
22
class ZstdCompressorImpl : public Envoy::Compression::Zstd::Compressor::ZstdCompressorImplBase {
23
public:
24
  ZstdCompressorImpl(uint32_t compression_level, bool enable_checksum, uint32_t strategy,
25
                     const ZstdCDictManagerPtr& cdict_manager, uint32_t chunk_size);
26

            
27
private:
28
  void compressPreprocess(Buffer::Instance& buffer,
29
                          Envoy::Compression::Compressor::State state) override;
30

            
31
  void compressProcess(const Buffer::Instance& buffer, const Buffer::RawSlice& input_slice,
32
                       Buffer::Instance& accumulation_buffer) override;
33

            
34
  void compressPostprocess(Buffer::Instance& accumulation_buffer) override;
35

            
36
  const ZstdCDictManagerPtr& cdict_manager_;
37
};
38

            
39
} // namespace Compressor
40
} // namespace Zstd
41
} // namespace Compression
42
} // namespace Extensions
43
} // namespace Envoy