#pragma once #include #include #define WRITE_BUFFER_FROM_VECTOR_INITIAL_SIZE_IF_EMPTY 32 namespace DB { /** Инициализируется вектором. Пишет данные в него. Когда вектор закончится - увеличивает его размер в два раза. * CharType - char или unsigned char. */ template > class WriteBufferFromVector : public WriteBuffer { private: VectorType & vector; void nextImpl() { size_t old_size = vector.size(); vector.resize(old_size * 2); internal_buffer = Buffer(reinterpret_cast(&vector[old_size]), reinterpret_cast(&*vector.end())); working_buffer = internal_buffer; } public: WriteBufferFromVector(VectorType & vector_) : WriteBuffer(reinterpret_cast(&vector_[0]), vector_.size()), vector(vector_) { if (vector.empty()) { vector.resize(WRITE_BUFFER_FROM_VECTOR_INITIAL_SIZE_IF_EMPTY); set(reinterpret_cast(&vector[0]), vector.size()); } } }; }