1
#pragma once
2

            
3
#include <memory>
4

            
5
#include "envoy/buffer/buffer.h"
6

            
7
namespace Envoy {
8
namespace Extensions {
9
namespace Compression {
10
namespace Brotli {
11
namespace Common {
12

            
13
// Keeps a `Brotli` compression stream's state.
14
struct BrotliContext {
15
  BrotliContext(uint32_t chunk_size, uint32_t max_output_size = 0);
16

            
17
  void updateOutput(Buffer::Instance& output_buffer);
18
  void finalizeOutput(Buffer::Instance& output_buffer);
19

            
20
  const uint32_t max_output_size_;
21
  const uint32_t chunk_size_;
22
  std::unique_ptr<uint8_t[]> chunk_ptr_;
23
  const uint8_t* next_in_{};
24
  uint8_t* next_out_;
25
  size_t avail_in_{0};
26
  size_t avail_out_;
27

            
28
private:
29
  void resetOut();
30
};
31

            
32
} // namespace Common
33
} // namespace Brotli
34
} // namespace Compression
35
} // namespace Extensions
36
} // namespace Envoy