#pragma once #include #include #include #include #include #include namespace DB { class CompressedWriteBuffer : public BufferWithOwnMemory { private: WriteBuffer & out; CompressionCodecPtr codec; PODArray compressed_buffer; void nextImpl() override; public: CompressedWriteBuffer( WriteBuffer & out_, CompressionCodecPtr codec_ = CompressionCodecFactory::instance().getDefaultCodec(), size_t buf_size = DBMS_DEFAULT_BUFFER_SIZE); /// The amount of compressed data size_t getCompressedBytes() { nextIfAtEnd(); return out.count(); } /// How many uncompressed bytes were written to the buffer size_t getUncompressedBytes() { return count(); } /// How many bytes are in the buffer (not yet compressed) size_t getRemainingBytes() { nextIfAtEnd(); return offset(); } ~CompressedWriteBuffer() override; }; }