MAGE  v0.171.0
Matthias Advanced Game Engine
mage::SingleEndedMemoryStack Class Reference

#include <memory_stack.hpp>

Classes

class  Allocator
 

Public Member Functions

 SingleEndedMemoryStack (std::size_t size, std::size_t alignment)
 
 SingleEndedMemoryStack (const SingleEndedMemoryStack &stack)=delete
 
 SingleEndedMemoryStack (SingleEndedMemoryStack &&stack) noexcept
 
 ~SingleEndedMemoryStack ()
 
SingleEndedMemoryStackoperator= (const SingleEndedMemoryStack &stack)=delete
 
SingleEndedMemoryStackoperator= (SingleEndedMemoryStack &&stack)=delete
 
std::size_t GetAlignment () const noexcept
 
std::size_t GetSize () const noexcept
 
std::size_t GetUsedSize () const noexcept
 
std::size_t GetAvailableSize () const noexcept
 
std::uintptr_t GetCurrentPtr () const noexcept
 
void Reset () noexcept
 
void RollBack (uintptr_t ptr) noexcept
 
void * Alloc (std::size_t size) noexcept
 
template<typename T >
T * AllocData (std::size_t count=1u, bool initialization=false)
 
template<typename T >
Allocator< T > GetAllocator () noexcept
 

Private Attributes

const std::size_t m_size
 
const std::size_t m_alignment
 
std::uintptr_t m_begin
 
std::uintptr_t m_current
 

Detailed Description

A class of single-ended memory stacks.

Constructor & Destructor Documentation

◆ SingleEndedMemoryStack() [1/3]

mage::SingleEndedMemoryStack::SingleEndedMemoryStack ( std::size_t  size,
std::size_t  alignment 
)
explicit

Constructs a single-ended memory stack with given size.

Parameters
[in]sizeThe size in bytes.
[in]alignmentThe alignment in bytes.
Exceptions
std::bad_allocFailed to allocate the memory.

◆ SingleEndedMemoryStack() [2/3]

mage::SingleEndedMemoryStack::SingleEndedMemoryStack ( const SingleEndedMemoryStack stack)
delete

Constructs a single-ended memory stack from the given single-ended memory stack.

Parameters
[in]stackA reference to the single-ended memory stack to copy.

◆ SingleEndedMemoryStack() [3/3]

mage::SingleEndedMemoryStack::SingleEndedMemoryStack ( SingleEndedMemoryStack &&  stack)
defaultnoexcept

Constructs a single-ended memory stack by moving the given single-ended memory stack.

Parameters
[in]stackA reference to the single-ended memory stack to move.

◆ ~SingleEndedMemoryStack()

mage::SingleEndedMemoryStack::~SingleEndedMemoryStack ( )

Destructs this single-ended memory stack.

Member Function Documentation

◆ Alloc()

void * mage::SingleEndedMemoryStack::Alloc ( std::size_t  size)
noexcept

Allocates a block of memory of the given size on this single-ended memory stack.

Parameters
[in]sizeThe requested size in bytes to allocate in memory.
Returns
nullptr if the allocation failed.
A pointer to the memory block that was allocated. The pointer is a multiple of the alignment.

◆ AllocData()

template<typename T >
T* mage::SingleEndedMemoryStack::AllocData ( std::size_t  count = 1u,
bool  initialization = false 
)

Allocates a block of memory on this single-ended memory stack.

Template Parameters
TThe data type.
Parameters
[in]countThe number of objects of type T to allocate in memory.
[in]initializationFlag indicating whether the objects need to be initialized (i.e. the constructor needs to be called).
Returns
nullptr if the allocation failed.
A pointer to the memory block that was allocated. The pointer is a multiple of the alignment.
Note
The objects will be constructed with their default empty constructor.

◆ GetAlignment()

std::size_t mage::SingleEndedMemoryStack::GetAlignment ( ) const
noexcept

Returns the alignment of this single-ended memory stack.

Returns
The alignment in bytes of this single-ended memory stack.

◆ GetAllocator()

template<typename T >
Allocator< T > mage::SingleEndedMemoryStack::GetAllocator ( )
noexcept

Returns an allocator for this single-ended memory stack.

Template Parameters
TThe data type of the allocator.
Returns
An allocator for this single-ended memory stack.

◆ GetAvailableSize()

std::size_t mage::SingleEndedMemoryStack::GetAvailableSize ( ) const
noexcept

Returns the available size of this single-ended memory stack.

Returns
The available size in bytes of this single-ended memory stack.

◆ GetCurrentPtr()

std::uintptr_t mage::SingleEndedMemoryStack::GetCurrentPtr ( ) const
noexcept

Returns a pointer to the current position of this single-ended memory stack.

Returns
A pointer to the current position of this single-ended memory stack.

◆ GetSize()

std::size_t mage::SingleEndedMemoryStack::GetSize ( ) const
noexcept

Returns the size (used + available) of this single-ended memory stack.

Returns
The size (used + available) in bytes of this single-ended memory stack.

◆ GetUsedSize()

std::size_t mage::SingleEndedMemoryStack::GetUsedSize ( ) const
noexcept

Returns the used size of this single-ended memory stack.

Returns
The used size in bytes of this single-ended memory stack.

◆ operator=() [1/2]

SingleEndedMemoryStack& mage::SingleEndedMemoryStack::operator= ( const SingleEndedMemoryStack stack)
delete

Copies the given single-ended memory stack to this single-ended memory stack.

Parameters
[in]stackA reference to the single-ended memory stack to copy.
Returns
A reference to the copy of the given single-ended memory stack (i.e. this single-ended memory stack).

◆ operator=() [2/2]

SingleEndedMemoryStack& mage::SingleEndedMemoryStack::operator= ( SingleEndedMemoryStack &&  stack)
delete

Moves the given single-ended memory stack to this single-ended memory stack.

Parameters
[in]stackA reference to the single-ended memory stack to move.
Returns
A reference to the moved single-ended memory stack (i.e. this single-ended memory stack).

◆ Reset()

void mage::SingleEndedMemoryStack::Reset ( )
noexcept

Resets this memory stack.

The pointer to the current position of this single-ended memory stack will be reset to the begin position of this single-ended memory stack.

◆ RollBack()

void mage::SingleEndedMemoryStack::RollBack ( uintptr_t  ptr)
noexcept

Rolls this single-ended memory stack back to the given position.

Precondition
The given ptr must be in the range of this single-ended memory stack.
Parameters
[in]ptrThe pointer to the requested position of this single-ended memory stack.

Member Data Documentation

◆ m_alignment

const std::size_t mage::SingleEndedMemoryStack::m_alignment
private

The alignment in bytes of this single-ended memory stack.

◆ m_begin

std::uintptr_t mage::SingleEndedMemoryStack::m_begin
private

A pointer to the begin of this single-ended memory stack.

◆ m_current

std::uintptr_t mage::SingleEndedMemoryStack::m_current
private

A pointer to the current position of this single-ended memory stack.

◆ m_size

const std::size_t mage::SingleEndedMemoryStack::m_size
private

The size in bytes of this single-ended memory stack.