#pragma once #include #include #include namespace DB { /* * Считает хэш от прочитанных данных. При чтении данные записываются во вложенный ReadBuffer. * Мелкие кусочки копируются в собственную память. */ class HashingReadBuffer : public IHashingBuffer { public: HashingReadBuffer(ReadBuffer & in_, size_t block_size = DBMS_DEFAULT_HASHING_BLOCK_SIZE) : in(in_) { working_buffer = in.buffer(); pos = in.position(); /// считаем хэш от уже прочитанных данных if (working_buffer.size()) { calculateHash(pos, working_buffer.end() - pos); } } private: bool nextImpl() override { in.position() = pos; bool res = in.next(); working_buffer = in.buffer(); pos = in.position(); calculateHash(working_buffer.begin(), working_buffer.size()); return res; } private: ReadBuffer & in; }; }