Template Class Arena

Nested Relationships

Nested Types

Class Documentation

template<class T, class A = std::allocator<T>>
class Arena

an arena of objects of type T in blocks of n

Public Types

using value_type = T
using size_type = std::size_t
using difference_type = std::ptrdiff_t
using reference = T&
using const_reference = const T&
using iterator = Iterator<false>
using const_iterator = Iterator<true>

Public Functions

explicit Arena(std::size_t n = std::size_t(1) << 12, const A &alloc = A())

an empty arena whose blocks hold n objects

Pre:

n >= 1

Arena(const Arena&) = delete
Arena &operator=(const Arena&) = delete
~Arena()

destroys all the objects and frees the blocks

template<class ...Args>
T *make(Args&&... args)

a new object built from the arguments, whose address never changes

std::size_t size(void) const

the number of objects made

std::size_t bytes(void) const

the memory of the blocks, in bytes

inline iterator begin(void)
inline iterator end(void)
inline const_iterator begin(void) const
inline const_iterator end(void) const
inline const_iterator cbegin(void) const
inline const_iterator cend(void) const
template<bool Const>
class Iterator

the iterator, on objects const if Const

Public Types

using iterator_category = std::random_access_iterator_tag
using value_type = T
using difference_type = std::ptrdiff_t
using reference = std::conditional_t<Const, const T&, T&>
using pointer = std::conditional_t<Const, const T*, T*>

Public Functions

Iterator(void) = default
inline Iterator(Blocks B, std::size_t n, std::size_t i)
template<bool K>
inline Iterator(const Iterator<K> &o)
inline reference operator*(void) const
inline pointer operator->(void) const
inline reference operator[](difference_type k) const
inline Iterator &operator++(void)
inline Iterator &operator--(void)
inline Iterator operator++(int)
inline Iterator operator--(int)
inline Iterator &operator+=(difference_type k)
inline Iterator &operator-=(difference_type k)
inline bool operator==(const Iterator &o) const
inline auto operator<=>(const Iterator &o) const

Friends

inline friend Iterator operator+(Iterator a, difference_type k)
inline friend Iterator operator+(difference_type k, Iterator a)
inline friend Iterator operator-(Iterator a, difference_type k)
inline friend difference_type operator-(const Iterator &a, const Iterator &b)