1#pragma once
2
3#include <IO/WriteBuffer.h>
4#include <IO/BufferWithOwnMemory.h>
5#include <IO/CompressionMethod.h>
6
7#include <zlib.h>
8
9
10namespace DB
11{
12
13namespace ErrorCodes
14{
15 extern const int ZLIB_DEFLATE_FAILED;
16}
17
18/// Performs compression using zlib library and writes compressed data to out_ WriteBuffer.
19class ZlibDeflatingWriteBuffer : public BufferWithOwnMemory<WriteBuffer>
20{
21public:
22 ZlibDeflatingWriteBuffer(
23 std::unique_ptr<WriteBuffer> out_,
24 CompressionMethod compression_method,
25 int compression_level,
26 size_t buf_size = DBMS_DEFAULT_BUFFER_SIZE,
27 char * existing_memory = nullptr,
28 size_t alignment = 0);
29
30 /// Flush all pending data and write zlib footer to the underlying buffer.
31 /// After the first call to this function, subsequent calls will have no effect and
32 /// an attempt to write to this buffer will result in exception.
33 void finish();
34
35 ~ZlibDeflatingWriteBuffer() override;
36
37private:
38 void nextImpl() override;
39
40 std::unique_ptr<WriteBuffer> out;
41 z_stream zstr;
42 bool finished = false;
43};
44
45}
46