26 std::vector<std::vector<T>> chunks;
34 if (size_ >= std::numeric_limits<uint32_t>::max() - ChunkSize)
36 chunks.emplace_back();
37 chunks.back().reserve(ChunkSize);
42 ChunkedVector(uint32_t reserve)
44 chunks.reserve(reserve);
48 uint32_t size()
const {
return size_; }
50 std::pair<T &, uint32_t> add(T
value)
52 const auto idx = size_++;
53 auto & chunk = [&] () ->
auto & {
54 if (
auto & back = chunks.back(); back.size() < ChunkSize)
58 auto & result = chunk.emplace_back(std::move(
value));
62 const T & operator[](uint32_t idx)
const
64 return chunks[idx / ChunkSize][idx % ChunkSize];
68 void forEach(Fn fn)
const
70 for (
const auto & c : chunks)
71 for (
const auto & e : c)