/
renath
/
organicmaps
Обзор
Документация
Войти
/
renath
/
organicmaps
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
libs/coding/var_record_reader.hpp
43 строки
1 KB
Alexander Borsuk
clang-format
24 июл 2025, 15:48
24 июл 2025, 15:48
15b66d5
Код
Авторство
О чём код?
#pragma once #include "coding/reader.hpp" #include "coding/varint.hpp" #include <string> #include <vector> // Reads records, encoded as [VarUint size] [Data] .. [VarUint size] [Data]. template <class ReaderT> class VarRecordReader { public: explicit VarRecordReader(ReaderT const & reader) : m_reader(reader) {} std::vector<uint8_t> ReadRecord(uint64_t const pos) const { ReaderSource source(m_reader); ASSERT_LESS(pos, source.Size(), ()); source.Skip(pos); uint32_t const recordSize = ReadVarUint<uint32_t>(source); std::vector<uint8_t> buffer(recordSize); source.Read(buffer.data(), recordSize); return buffer; } template <class FnT> void ForEachRecord(FnT && fn) const { ReaderSource source(m_reader); while (source.Size() > 0) { auto const pos = source.Pos(); uint32_t const recordSize = ReadVarUint<uint32_t>(source); std::vector<uint8_t> buffer(recordSize); source.Read(buffer.data(), recordSize); fn(static_cast<uint32_t>(pos), std::move(buffer)); } } private: ReaderT m_reader; };