FE 0.6.0
A header-only C++ library for writing frontends
Loading...
Searching...
No Matches
fe::Arena Class Reference

An arena pre-allocates so-called pages of size Arena::page_size_. More...

#include <fe/arena.h>

Classes

struct  Allocator
 An allocator in order to use this Arena for containers. More...
 
struct  Deleter
 

Public Types

template<class T >
using Ptr = std::unique_ptr<T, Deleter<T>>
 
using State = std::pair<size_t, size_t>
 

Public Member Functions

Construction
 Arena (const Arena &)=delete
 
 Arena (size_t page_size=Default_Page_Size)
 
 Arena (Arena &&other) noexcept
 
Arenaoperator= (Arena)=delete
 
template<class T >
constexpr Allocator< T > allocator () noexcept
 Create Allocator from Arena.
 
template<class T , class... Args>
constexpr Ptr< T > mk (Args &&... args)
 This is a std::unique_ptr that uses the Arena under the hood and whose Deleter will only invoke the destructor but not delete anything; memory will be released upon destruction of the Arena.
 
Allocate
constexpr void * allocate (size_t num_bytes, size_t align)
 Get n bytes of fresh memory.
 
template<class T >
constexpr T * allocate (size_t num_elems)
 
Deallocate

Deallocate memory again in reverse order.

Use like this:

auto state = arena.state();
auto ptr = arena.allocate(n);
if (/* I don't want that *&zwj;/) arena.deallocate(state);
State state() const noexcept
Definition arena.h:125
Warning
Only use, if you really know what you are doing.
constexpr void deallocate (size_t num_bytes) noexcept
 Removes num_bytes again.
 
State state () const noexcept
 
void deallocate (State state) noexcept
 

Static Public Member Functions

static constexpr size_t align (size_t i, size_t a) noexcept
 Align i to a.
 

Static Public Attributes

static constexpr size_t Default_Page_Size = 1024 * 1024
 1MB.
 

Friends

void swap (Arena &a1, Arena &a2) noexcept
 

Detailed Description

An arena pre-allocates so-called pages of size Arena::page_size_.

You can use Arena::allocate to obtain memory from this. When a page runs out of memory, the next page will be (pre-)allocated. You cannot directly release memory obtained via this method. Instead, all memory acquired via this Arena will be released as soon as this Arena will be destroyed. As an exception, you can Arena::deallocate memory that just as been acquired.

Definition at line 18 of file arena.h.

Member Typedef Documentation

◆ Ptr

template<class T >
using fe::Arena::Ptr = std::unique_ptr<T, Deleter<T>>

Definition at line 54 of file arena.h.

◆ State

using fe::Arena::State = std::pair<size_t, size_t>

Definition at line 55 of file arena.h.

Constructor & Destructor Documentation

◆ Arena() [1/3]

fe::Arena::Arena ( const Arena & )
delete

◆ Arena() [2/3]

fe::Arena::Arena ( size_t page_size = Default_Page_Size)
inline

Definition at line 60 of file arena.h.

◆ Arena() [3/3]

fe::Arena::Arena ( Arena && other)
inlinenoexcept

Definition at line 64 of file arena.h.

References swap.

Member Function Documentation

◆ align()

static constexpr size_t fe::Arena::align ( size_t i,
size_t a )
inlinestaticconstexprnoexcept

Align i to a.

Definition at line 145 of file arena.h.

Referenced by allocate().

◆ allocate() [1/2]

void * fe::Arena::allocate ( size_t num_bytes,
size_t align )
inlinenodiscardconstexpr

Get n bytes of fresh memory.

Definition at line 92 of file arena.h.

References align().

Referenced by allocate(), fe::Arena::Allocator< T >::allocate(), mk(), and fe::SymPool::sym().

◆ allocate() [2/2]

template<class T >
T * fe::Arena::allocate ( size_t num_elems)
inlinenodiscardconstexpr

Definition at line 107 of file arena.h.

References allocate().

◆ allocator()

template<class T >
Allocator< T > fe::Arena::allocator ( )
inlineconstexprnoexcept

Create Allocator from Arena.

Definition at line 71 of file arena.h.

◆ deallocate() [1/2]

void fe::Arena::deallocate ( size_t num_bytes)
inlineconstexprnoexcept

Removes num_bytes again.

Definition at line 124 of file arena.h.

Referenced by fe::SymPool::sym().

◆ deallocate() [2/2]

void fe::Arena::deallocate ( State state)
inlinenoexcept

Definition at line 127 of file arena.h.

References state().

◆ mk()

template<class T , class... Args>
Ptr< T > fe::Arena::mk ( Args &&... args)
inlineconstexpr

This is a std::unique_ptr that uses the Arena under the hood and whose Deleter will only invoke the destructor but not delete anything; memory will be released upon destruction of the Arena.

Use like this:

auto ptr = arena.mk<Foo>(a, b, c); // new Foo(a, b, c) placed into arena

Definition at line 82 of file arena.h.

References allocate().

◆ operator=()

Arena & fe::Arena::operator= ( Arena )
delete

◆ state()

State fe::Arena::state ( ) const
inlinenoexcept

Definition at line 125 of file arena.h.

Referenced by deallocate(), and fe::SymPool::sym().

Friends And Related Symbol Documentation

◆ swap

void swap ( Arena & a1,
Arena & a2 )
friend

Definition at line 135 of file arena.h.

Referenced by Arena().

Member Data Documentation

◆ Default_Page_Size

size_t fe::Arena::Default_Page_Size = 1024 * 1024
staticconstexpr

1MB.

Definition at line 20 of file arena.h.


The documentation for this class was generated from the following file: