1
#pragma once
2

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

            
5
#include "source/common/compression/zstd/common/base.h"
6

            
7
namespace Envoy {
8
namespace Compression {
9
namespace Zstd {
10
namespace Compressor {
11

            
12
/**
13
 * Implementation of compressor's interface.
14
 */
15
class ZstdCompressorImplBase : public Common::Base,
16
                               public Envoy::Compression::Compressor::Compressor,
17
                               NonCopyable {
18
public:
19
  ZstdCompressorImplBase(uint32_t compression_level, bool enable_checksum, uint32_t strategy,
20
                         uint32_t chunk_size);
21

            
22
  // Compression::Compressor::Compressor
23
  void compress(Buffer::Instance& buffer, Envoy::Compression::Compressor::State state) override;
24

            
25
  void process(Buffer::Instance& output_buffer, ZSTD_EndDirective mode);
26

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

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

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

            
36
  std::unique_ptr<ZSTD_CCtx, decltype(&ZSTD_freeCCtx)> cctx_;
37
  const uint32_t compression_level_;
38
};
39

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