CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
CeresEngine::StaticVector< T, Capacity > Struct Template Reference

StaticVector is almost a drop-in replacement of std::vector, but has a fixed capacity as a template argument. More...

#include <CeresEngine/Foundation/Container/StaticVector.hpp>

Classes

struct  FakeAllocator
 

Public Types

using value_type = T
 
using size_type = size_t
 
using difference_type = ptrdiff_t
 
using reference = T &
 
using const_reference = const T &
 
using pointer = T *
 
using const_pointer = const T *
 
using iterator = T *
 
using const_iterator = const T *
 
using reverse_iterator = std::reverse_iterator< iterator >
 
using const_reverse_iterator = std::reverse_iterator< const_iterator >
 
using allocator_type = FakeAllocator
 

Public Member Functions

 StaticVector ()=default
 
 StaticVector (const size_t count)
 
 StaticVector (const size_t count, const T &value)
 
 StaticVector (std::initializer_list< T > l)
 
 StaticVector (const StaticVector &v)
 
template<size_t CapacityB>
 StaticVector (const StaticVector< T, CapacityB > &v)
 
 StaticVector (StaticVector &&v) noexcept(std::is_nothrow_move_constructible< T >::value)
 
 ~StaticVector ()
 
StaticVectoroperator= (const StaticVector &v)
 
StaticVectoroperator= (StaticVector &&v) noexcept(std::is_nothrow_move_assignable< T >::value)
 
const_reference at (size_type i) const
 
reference at (size_type i)
 
const_reference operator[] (const size_type i) const
 
reference operator[] (const size_type i)
 
const_reference front () const
 
reference front ()
 
const_reference back () const
 
reference back ()
 
const_pointer data () const noexcept
 
pointer data () noexcept
 
iterator begin () noexcept
 
const_iterator begin () const noexcept
 
const_iterator cbegin () const noexcept
 
iterator end () noexcept
 
const_iterator end () const noexcept
 
const_iterator cend () const noexcept
 
reverse_iterator rbegin () noexcept
 
const_reverse_iterator rbegin () const noexcept
 
const_reverse_iterator crbegin () const noexcept
 
reverse_iterator rend () noexcept
 
const_reverse_iterator rend () const noexcept
 
const_reverse_iterator crend () const noexcept
 
bool empty () const noexcept
 
size_t size () const noexcept
 
size_t max_size () const noexcept
 
size_t capacity () const noexcept
 
void pop_back ()
 
void clear () noexcept
 
void push_back (const_reference v)
 
void push_back (T &&v)
 
template<typename... Args>
void emplace_back (Args &&... args)
 
iterator insert (iterator position, const value_type &val)
 
template<typename... Args>
iterator emplace (iterator position, Args &&... args)
 
iterator erase (const_iterator position)
 
void resize (const size_type n)
 
void swap (StaticVector &v)
 

Private Attributes

std::aligned_storage< sizeof(T), std::alignment_of< T >::value >::type m_data [Capacity]
 
size_t m_size = 0
 

Detailed Description

template<typename T, size_t Capacity>
struct CeresEngine::StaticVector< T, Capacity >

StaticVector is almost a drop-in replacement of std::vector, but has a fixed capacity as a template argument.

It gives you the benefits of using Array (cache-locality) with the flexibility of Vector - dynamic size. However the size may never exceed its initially set capacity.

Member Typedef Documentation

◆ allocator_type

template<typename T , size_t Capacity>
using CeresEngine::StaticVector< T, Capacity >::allocator_type = FakeAllocator

◆ const_iterator

template<typename T , size_t Capacity>
using CeresEngine::StaticVector< T, Capacity >::const_iterator = const T*

◆ const_pointer

template<typename T , size_t Capacity>
using CeresEngine::StaticVector< T, Capacity >::const_pointer = const T*

◆ const_reference

template<typename T , size_t Capacity>
using CeresEngine::StaticVector< T, Capacity >::const_reference = const T&

◆ const_reverse_iterator

template<typename T , size_t Capacity>
using CeresEngine::StaticVector< T, Capacity >::const_reverse_iterator = std::reverse_iterator<const_iterator>

◆ difference_type

template<typename T , size_t Capacity>
using CeresEngine::StaticVector< T, Capacity >::difference_type = ptrdiff_t

◆ iterator

template<typename T , size_t Capacity>
using CeresEngine::StaticVector< T, Capacity >::iterator = T*

◆ pointer

template<typename T , size_t Capacity>
using CeresEngine::StaticVector< T, Capacity >::pointer = T*

◆ reference

template<typename T , size_t Capacity>
using CeresEngine::StaticVector< T, Capacity >::reference = T&

◆ reverse_iterator

template<typename T , size_t Capacity>
using CeresEngine::StaticVector< T, Capacity >::reverse_iterator = std::reverse_iterator<iterator>

◆ size_type

template<typename T , size_t Capacity>
using CeresEngine::StaticVector< T, Capacity >::size_type = size_t

◆ value_type

template<typename T , size_t Capacity>
using CeresEngine::StaticVector< T, Capacity >::value_type = T

Constructor & Destructor Documentation

◆ StaticVector() [1/7]

template<typename T , size_t Capacity>
CeresEngine::StaticVector< T, Capacity >::StaticVector ( )
default

◆ StaticVector() [2/7]

template<typename T , size_t Capacity>
CeresEngine::StaticVector< T, Capacity >::StaticVector ( const size_t  count)
inlineexplicit

◆ StaticVector() [3/7]

template<typename T , size_t Capacity>
CeresEngine::StaticVector< T, Capacity >::StaticVector ( const size_t  count,
const T value 
)
inline

◆ StaticVector() [4/7]

template<typename T , size_t Capacity>
CeresEngine::StaticVector< T, Capacity >::StaticVector ( std::initializer_list< T l)
inline

◆ StaticVector() [5/7]

template<typename T , size_t Capacity>
CeresEngine::StaticVector< T, Capacity >::StaticVector ( const StaticVector< T, Capacity > &  v)
inline

◆ StaticVector() [6/7]

template<typename T , size_t Capacity>
template<size_t CapacityB>
CeresEngine::StaticVector< T, Capacity >::StaticVector ( const StaticVector< T, CapacityB > &  v)
inline

◆ StaticVector() [7/7]

template<typename T , size_t Capacity>
CeresEngine::StaticVector< T, Capacity >::StaticVector ( StaticVector< T, Capacity > &&  v)
inlinenoexcept

◆ ~StaticVector()

template<typename T , size_t Capacity>
CeresEngine::StaticVector< T, Capacity >::~StaticVector ( )
inline

Member Function Documentation

◆ at() [1/2]

template<typename T , size_t Capacity>
reference CeresEngine::StaticVector< T, Capacity >::at ( size_type  i)
inline

◆ at() [2/2]

template<typename T , size_t Capacity>
const_reference CeresEngine::StaticVector< T, Capacity >::at ( size_type  i) const
inline

◆ back() [1/2]

template<typename T , size_t Capacity>
reference CeresEngine::StaticVector< T, Capacity >::back ( )
inline

◆ back() [2/2]

template<typename T , size_t Capacity>
const_reference CeresEngine::StaticVector< T, Capacity >::back ( ) const
inline

◆ begin() [1/2]

template<typename T , size_t Capacity>
const_iterator CeresEngine::StaticVector< T, Capacity >::begin ( ) const
inlinenoexcept

◆ begin() [2/2]

template<typename T , size_t Capacity>
iterator CeresEngine::StaticVector< T, Capacity >::begin ( )
inlinenoexcept

◆ capacity()

template<typename T , size_t Capacity>
size_t CeresEngine::StaticVector< T, Capacity >::capacity ( ) const
inlinenoexcept

◆ cbegin()

template<typename T , size_t Capacity>
const_iterator CeresEngine::StaticVector< T, Capacity >::cbegin ( ) const
inlinenoexcept

◆ cend()

template<typename T , size_t Capacity>
const_iterator CeresEngine::StaticVector< T, Capacity >::cend ( ) const
inlinenoexcept

◆ clear()

template<typename T , size_t Capacity>
void CeresEngine::StaticVector< T, Capacity >::clear ( )
inlinenoexcept

◆ crbegin()

template<typename T , size_t Capacity>
const_reverse_iterator CeresEngine::StaticVector< T, Capacity >::crbegin ( ) const
inlinenoexcept

◆ crend()

template<typename T , size_t Capacity>
const_reverse_iterator CeresEngine::StaticVector< T, Capacity >::crend ( ) const
inlinenoexcept

◆ data() [1/2]

template<typename T , size_t Capacity>
const_pointer CeresEngine::StaticVector< T, Capacity >::data ( ) const
inlinenoexcept

◆ data() [2/2]

template<typename T , size_t Capacity>
pointer CeresEngine::StaticVector< T, Capacity >::data ( )
inlinenoexcept

◆ emplace()

template<typename T , size_t Capacity>
template<typename... Args>
iterator CeresEngine::StaticVector< T, Capacity >::emplace ( iterator  position,
Args &&...  args 
)
inline

◆ emplace_back()

template<typename T , size_t Capacity>
template<typename... Args>
void CeresEngine::StaticVector< T, Capacity >::emplace_back ( Args &&...  args)
inline

◆ empty()

template<typename T , size_t Capacity>
bool CeresEngine::StaticVector< T, Capacity >::empty ( ) const
inlinenoexcept

◆ end() [1/2]

template<typename T , size_t Capacity>
const_iterator CeresEngine::StaticVector< T, Capacity >::end ( ) const
inlinenoexcept

◆ end() [2/2]

template<typename T , size_t Capacity>
iterator CeresEngine::StaticVector< T, Capacity >::end ( )
inlinenoexcept

◆ erase()

template<typename T , size_t Capacity>
iterator CeresEngine::StaticVector< T, Capacity >::erase ( const_iterator  position)
inline

◆ front() [1/2]

template<typename T , size_t Capacity>
reference CeresEngine::StaticVector< T, Capacity >::front ( )
inline

◆ front() [2/2]

template<typename T , size_t Capacity>
const_reference CeresEngine::StaticVector< T, Capacity >::front ( ) const
inline

◆ insert()

template<typename T , size_t Capacity>
iterator CeresEngine::StaticVector< T, Capacity >::insert ( iterator  position,
const value_type val 
)
inline

◆ max_size()

template<typename T , size_t Capacity>
size_t CeresEngine::StaticVector< T, Capacity >::max_size ( ) const
inlinenoexcept

◆ operator=() [1/2]

◆ operator=() [2/2]

template<typename T , size_t Capacity>
StaticVector & CeresEngine::StaticVector< T, Capacity >::operator= ( StaticVector< T, Capacity > &&  v)
inlinenoexcept

◆ operator[]() [1/2]

◆ operator[]() [2/2]

◆ pop_back()

template<typename T , size_t Capacity>
void CeresEngine::StaticVector< T, Capacity >::pop_back ( )
inline

◆ push_back() [1/2]

template<typename T , size_t Capacity>
void CeresEngine::StaticVector< T, Capacity >::push_back ( const_reference  v)
inline

◆ push_back() [2/2]

template<typename T , size_t Capacity>
void CeresEngine::StaticVector< T, Capacity >::push_back ( T &&  v)
inline

◆ rbegin() [1/2]

template<typename T , size_t Capacity>
const_reverse_iterator CeresEngine::StaticVector< T, Capacity >::rbegin ( ) const
inlinenoexcept

◆ rbegin() [2/2]

template<typename T , size_t Capacity>
reverse_iterator CeresEngine::StaticVector< T, Capacity >::rbegin ( )
inlinenoexcept

◆ rend() [1/2]

template<typename T , size_t Capacity>
const_reverse_iterator CeresEngine::StaticVector< T, Capacity >::rend ( ) const
inlinenoexcept

◆ rend() [2/2]

template<typename T , size_t Capacity>
reverse_iterator CeresEngine::StaticVector< T, Capacity >::rend ( )
inlinenoexcept

◆ resize()

template<typename T , size_t Capacity>
void CeresEngine::StaticVector< T, Capacity >::resize ( const size_type  n)
inline

◆ size()

template<typename T , size_t Capacity>
size_t CeresEngine::StaticVector< T, Capacity >::size ( ) const
inlinenoexcept

◆ swap()

template<typename T , size_t Capacity>
void CeresEngine::StaticVector< T, Capacity >::swap ( StaticVector< T, Capacity > &  v)
inline

Member Data Documentation

◆ m_data

template<typename T , size_t Capacity>
std::aligned_storage<sizeof(T),std::alignment_of<T>::value>::type CeresEngine::StaticVector< T, Capacity >::m_data[Capacity]
private

◆ m_size

template<typename T , size_t Capacity>
size_t CeresEngine::StaticVector< T, Capacity >::m_size = 0
private

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