69 using Element256 = std::array<Element, 256>;
72 template<
typename... Args>
75 if (free !=
Index(-1)) {
80 pool.push_back(std::make_unique<Element256>());
82 idx =
Index(((pool.size() - 1) << 8) + cntr);
86 new(ptr) T(std::forward<Args>(args)...);
94 auto& elem = get(idx);
102 return 256 * pool.size();
106 [[nodiscard]]
const Element& get(
Index idx)
const {
return (*pool[idx >> 8])[idx & 255]; }
107 [[nodiscard]] Element& get(
Index idx) {
return (*pool[idx >> 8])[idx & 255]; }
110 std::vector<std::unique_ptr<Element256>> pool;
const T & operator[](Index idx) const
T & operator[](Index idx)
EmplaceResult emplace(Args &&...args)
uint32_t next(octet_iterator &it, octet_iterator end)