24 std::vector<std::vector<T>> chunks;
32 if (size_ >= std::numeric_limits<uint32_t>::max() - ChunkSize)
34 chunks.emplace_back();
35 chunks.back().reserve(ChunkSize);
40 ChunkedVector(uint32_t reserve)
42 chunks.reserve(reserve);
46 uint32_t size()
const {
return size_; }
48 std::pair<T &, uint32_t> add(T value)
50 const auto idx = size_++;
51 auto & chunk = [&] () ->
auto & {
52 if (
auto & back = chunks.back(); back.size() < ChunkSize)
56 auto & result = chunk.emplace_back(std::move(value));
60 const T & operator[](uint32_t idx)
const
62 return chunks[idx / ChunkSize][idx % ChunkSize];
66 void forEach(Fn fn)
const
68 for (
const auto & c : chunks)
69 for (
const auto & e : c)