#pragma once #include #include #include #include #include #include namespace DB { class CompressedWriteBuffer final : public BufferWithOwnMemory { public: explicit CompressedWriteBuffer( WriteBuffer & out_, CompressionCodecPtr codec_ = CompressionCodecFactory::instance().getDefaultCodec(), size_t buf_size = DBMS_DEFAULT_BUFFER_SIZE); ~CompressedWriteBuffer() override; /// 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(); } private: void nextImpl() override; WriteBuffer & out; CompressionCodecPtr codec; PODArray compressed_buffer; }; }