LMMS
Loading...
Searching...
No Matches
lmms::ArrayVector< T, N > Class Template Reference

#include <ArrayVector.h>

Public Types

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

Public Member Functions

 ArrayVector ()=default
 ArrayVector (const ArrayVector &other) noexcept(std::is_nothrow_copy_constructible_v< T >)
 ArrayVector (ArrayVector &&other) noexcept(std::is_nothrow_move_constructible_v< T >)
 ArrayVector (size_type count, const T &value) noexcept(std::is_nothrow_copy_constructible_v< T >)
 ArrayVector (size_type count) noexcept(std::is_nothrow_default_constructible_v< T >)
template<std::input_iterator It>
 ArrayVector (It first, It last)
 ArrayVector (std::initializer_list< T > il) noexcept(std::is_nothrow_copy_constructible_v< T >)
 ~ArrayVector ()
ArrayVectoroperator= (const ArrayVector &other) noexcept(std::is_nothrow_copy_assignable_v< T > &&std::is_nothrow_copy_constructible_v< T >)
ArrayVectoroperator= (ArrayVector &&other) noexcept(std::is_nothrow_move_assignable_v< T > &&std::is_nothrow_move_constructible_v< T >)
ArrayVectoroperator= (std::initializer_list< T > il) noexcept(std::is_nothrow_copy_assignable_v< T > &&std::is_nothrow_copy_constructible_v< T >)
void assign (size_type count, const T &value) noexcept(std::is_nothrow_copy_assignable_v< T > &&std::is_nothrow_copy_constructible_v< T >)
template<std::input_iterator It>
void assign (It first, It last)
reference at (size_type index)
const_reference at (size_type index) const
reference operator[] (size_type index) noexcept
const_reference operator[] (size_type index) const noexcept
reference front () noexcept
const_reference front () const noexcept
reference back () noexcept
const_reference back () const noexcept
pointer data () noexcept
const_pointer data () const 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
bool full () const noexcept
size_type size () const noexcept
size_type max_size () const noexcept
size_type capacity () const noexcept
void clear () noexcept
iterator insert (const_iterator pos, const T &value)
iterator insert (const_iterator pos, T &&value)
iterator insert (const_iterator pos, size_type count, const T &value)
template<std::input_iterator It>
iterator insert (const_iterator pos, It first, It last)
iterator insert (const_iterator pos, std::initializer_list< T > il)
template<typename... Args>
iterator emplace (const_iterator pos, Args &&... args)
iterator erase (const_iterator pos)
iterator erase (const_iterator first, const_iterator last)
void push_back (const T &value)
void push_back (T &&value)
template<typename... Args>
reference emplace_back (Args &&... args)
void pop_back ()
void resize (size_type size)
void resize (size_type size, const value_type &value)
void swap (ArrayVector &other) noexcept(std::is_nothrow_swappable_v< T > &&std::is_nothrow_move_constructible_v< T >)

Private Attributes

std::byte m_data [std::max(N *sizeof(T), std::size_t{1})]
size_type m_size = 0

Friends

void swap (ArrayVector &a, ArrayVector &b) noexcept(std::is_nothrow_swappable_v< T > &&std::is_nothrow_move_constructible_v< T >)
constexpr auto operator<=> (const ArrayVector &l, const ArrayVector &r)
bool operator== (const ArrayVector &l, const ArrayVector &r)

Detailed Description

template<typename T, std::size_t N>
class lmms::ArrayVector< T, N >

A container that stores up to a maximum of N elements of type T directly within itself, rather than separately on the heap. Useful when a dynamically resizeable container is needed for use in real-time code. Can be thought of as a hybrid between std::array and std::vector. The interface follows that of std::vector - see standard C++ documentation.

TODO C++26: Replace uses of this class with std::inplace_vector

Member Typedef Documentation

◆ const_iterator

template<typename T, std::size_t N>
using lmms::ArrayVector< T, N >::const_iterator = const_pointer

◆ const_pointer

template<typename T, std::size_t N>
using lmms::ArrayVector< T, N >::const_pointer = const T*

◆ const_reference

template<typename T, std::size_t N>
using lmms::ArrayVector< T, N >::const_reference = const T&

◆ const_reverse_iterator

template<typename T, std::size_t N>
using lmms::ArrayVector< T, N >::const_reverse_iterator = std::reverse_iterator<const_iterator>

◆ difference_type

template<typename T, std::size_t N>
using lmms::ArrayVector< T, N >::difference_type = std::ptrdiff_t

◆ iterator

template<typename T, std::size_t N>
using lmms::ArrayVector< T, N >::iterator = pointer

◆ pointer

template<typename T, std::size_t N>
using lmms::ArrayVector< T, N >::pointer = T*

◆ reference

template<typename T, std::size_t N>
using lmms::ArrayVector< T, N >::reference = T&

◆ reverse_iterator

template<typename T, std::size_t N>
using lmms::ArrayVector< T, N >::reverse_iterator = std::reverse_iterator<iterator>

◆ size_type

template<typename T, std::size_t N>
using lmms::ArrayVector< T, N >::size_type = std::size_t

◆ value_type

template<typename T, std::size_t N>
using lmms::ArrayVector< T, N >::value_type = T

Constructor & Destructor Documentation

◆ ArrayVector() [1/7]

template<typename T, std::size_t N>
lmms::ArrayVector< T, N >::ArrayVector ( )
default

◆ ArrayVector() [2/7]

template<typename T, std::size_t N>
lmms::ArrayVector< T, N >::ArrayVector ( const ArrayVector< T, N > & other)
inlinenoexcept

◆ ArrayVector() [3/7]

template<typename T, std::size_t N>
lmms::ArrayVector< T, N >::ArrayVector ( ArrayVector< T, N > && other)
inlinenoexcept

◆ ArrayVector() [4/7]

template<typename T, std::size_t N>
lmms::ArrayVector< T, N >::ArrayVector ( size_type count,
const T & value )
inlinenoexcept

◆ ArrayVector() [5/7]

template<typename T, std::size_t N>
lmms::ArrayVector< T, N >::ArrayVector ( size_type count)
inlineexplicitnoexcept

◆ ArrayVector() [6/7]

template<typename T, std::size_t N>
template<std::input_iterator It>
lmms::ArrayVector< T, N >::ArrayVector ( It first,
It last )
inline

◆ ArrayVector() [7/7]

template<typename T, std::size_t N>
lmms::ArrayVector< T, N >::ArrayVector ( std::initializer_list< T > il)
inlinenoexcept

◆ ~ArrayVector()

template<typename T, std::size_t N>
lmms::ArrayVector< T, N >::~ArrayVector ( )
inline

Member Function Documentation

◆ assign() [1/2]

template<typename T, std::size_t N>
template<std::input_iterator It>
void lmms::ArrayVector< T, N >::assign ( It first,
It last )
inline

◆ assign() [2/2]

template<typename T, std::size_t N>
void lmms::ArrayVector< T, N >::assign ( size_type count,
const T & value )
inlinenoexcept

◆ at() [1/2]

template<typename T, std::size_t N>
reference lmms::ArrayVector< T, N >::at ( size_type index)
inline

◆ at() [2/2]

template<typename T, std::size_t N>
const_reference lmms::ArrayVector< T, N >::at ( size_type index) const
inline

◆ back() [1/2]

template<typename T, std::size_t N>
const_reference lmms::ArrayVector< T, N >::back ( ) const
inlinenoexcept

◆ back() [2/2]

template<typename T, std::size_t N>
reference lmms::ArrayVector< T, N >::back ( )
inlinenoexcept

◆ begin() [1/2]

template<typename T, std::size_t N>
const_iterator lmms::ArrayVector< T, N >::begin ( ) const
inlinenoexcept

◆ begin() [2/2]

template<typename T, std::size_t N>
iterator lmms::ArrayVector< T, N >::begin ( )
inlinenoexcept

◆ capacity()

template<typename T, std::size_t N>
size_type lmms::ArrayVector< T, N >::capacity ( ) const
inlinenoexcept

◆ cbegin()

template<typename T, std::size_t N>
const_iterator lmms::ArrayVector< T, N >::cbegin ( ) const
inlinenoexcept

◆ cend()

template<typename T, std::size_t N>
const_iterator lmms::ArrayVector< T, N >::cend ( ) const
inlinenoexcept

◆ clear()

template<typename T, std::size_t N>
void lmms::ArrayVector< T, N >::clear ( )
inlinenoexcept

◆ crbegin()

template<typename T, std::size_t N>
const_reverse_iterator lmms::ArrayVector< T, N >::crbegin ( ) const
inlinenoexcept

◆ crend()

template<typename T, std::size_t N>
const_reverse_iterator lmms::ArrayVector< T, N >::crend ( ) const
inlinenoexcept

◆ data() [1/2]

template<typename T, std::size_t N>
const_pointer lmms::ArrayVector< T, N >::data ( ) const
inlinenoexcept

◆ data() [2/2]

template<typename T, std::size_t N>
pointer lmms::ArrayVector< T, N >::data ( )
inlinenoexcept

◆ emplace()

template<typename T, std::size_t N>
template<typename... Args>
iterator lmms::ArrayVector< T, N >::emplace ( const_iterator pos,
Args &&... args )
inline

◆ emplace_back()

template<typename T, std::size_t N>
template<typename... Args>
reference lmms::ArrayVector< T, N >::emplace_back ( Args &&... args)
inline

◆ empty()

template<typename T, std::size_t N>
bool lmms::ArrayVector< T, N >::empty ( ) const
inlinenoexcept

◆ end() [1/2]

template<typename T, std::size_t N>
const_iterator lmms::ArrayVector< T, N >::end ( ) const
inlinenoexcept

◆ end() [2/2]

template<typename T, std::size_t N>
iterator lmms::ArrayVector< T, N >::end ( )
inlinenoexcept

◆ erase() [1/2]

template<typename T, std::size_t N>
iterator lmms::ArrayVector< T, N >::erase ( const_iterator first,
const_iterator last )
inline

◆ erase() [2/2]

template<typename T, std::size_t N>
iterator lmms::ArrayVector< T, N >::erase ( const_iterator pos)
inline

◆ front() [1/2]

template<typename T, std::size_t N>
const_reference lmms::ArrayVector< T, N >::front ( ) const
inlinenoexcept

◆ front() [2/2]

template<typename T, std::size_t N>
reference lmms::ArrayVector< T, N >::front ( )
inlinenoexcept

◆ full()

template<typename T, std::size_t N>
bool lmms::ArrayVector< T, N >::full ( ) const
inlinenoexcept

◆ insert() [1/5]

template<typename T, std::size_t N>
iterator lmms::ArrayVector< T, N >::insert ( const_iterator pos,
const T & value )
inline

◆ insert() [2/5]

template<typename T, std::size_t N>
template<std::input_iterator It>
iterator lmms::ArrayVector< T, N >::insert ( const_iterator pos,
It first,
It last )
inline

◆ insert() [3/5]

template<typename T, std::size_t N>
iterator lmms::ArrayVector< T, N >::insert ( const_iterator pos,
size_type count,
const T & value )
inline

◆ insert() [4/5]

template<typename T, std::size_t N>
iterator lmms::ArrayVector< T, N >::insert ( const_iterator pos,
std::initializer_list< T > il )
inline

◆ insert() [5/5]

template<typename T, std::size_t N>
iterator lmms::ArrayVector< T, N >::insert ( const_iterator pos,
T && value )
inline

◆ max_size()

template<typename T, std::size_t N>
size_type lmms::ArrayVector< T, N >::max_size ( ) const
inlinenoexcept

◆ operator=() [1/3]

template<typename T, std::size_t N>
ArrayVector & lmms::ArrayVector< T, N >::operator= ( ArrayVector< T, N > && other)
inlinenoexcept

◆ operator=() [2/3]

template<typename T, std::size_t N>
ArrayVector & lmms::ArrayVector< T, N >::operator= ( const ArrayVector< T, N > & other)
inlinenoexcept

◆ operator=() [3/3]

template<typename T, std::size_t N>
ArrayVector & lmms::ArrayVector< T, N >::operator= ( std::initializer_list< T > il)
inlinenoexcept

◆ operator[]() [1/2]

template<typename T, std::size_t N>
const_reference lmms::ArrayVector< T, N >::operator[] ( size_type index) const
inlinenoexcept

◆ operator[]() [2/2]

template<typename T, std::size_t N>
reference lmms::ArrayVector< T, N >::operator[] ( size_type index)
inlinenoexcept

◆ pop_back()

template<typename T, std::size_t N>
void lmms::ArrayVector< T, N >::pop_back ( )
inline

◆ push_back() [1/2]

template<typename T, std::size_t N>
void lmms::ArrayVector< T, N >::push_back ( const T & value)
inline

◆ push_back() [2/2]

template<typename T, std::size_t N>
void lmms::ArrayVector< T, N >::push_back ( T && value)
inline

◆ rbegin() [1/2]

template<typename T, std::size_t N>
const_reverse_iterator lmms::ArrayVector< T, N >::rbegin ( ) const
inlinenoexcept

◆ rbegin() [2/2]

template<typename T, std::size_t N>
reverse_iterator lmms::ArrayVector< T, N >::rbegin ( )
inlinenoexcept

◆ rend() [1/2]

template<typename T, std::size_t N>
const_reverse_iterator lmms::ArrayVector< T, N >::rend ( ) const
inlinenoexcept

◆ rend() [2/2]

template<typename T, std::size_t N>
reverse_iterator lmms::ArrayVector< T, N >::rend ( )
inlinenoexcept

◆ resize() [1/2]

template<typename T, std::size_t N>
void lmms::ArrayVector< T, N >::resize ( size_type size)
inline

◆ resize() [2/2]

template<typename T, std::size_t N>
void lmms::ArrayVector< T, N >::resize ( size_type size,
const value_type & value )
inline

◆ size()

template<typename T, std::size_t N>
size_type lmms::ArrayVector< T, N >::size ( ) const
inlinenoexcept

◆ swap()

template<typename T, std::size_t N>
void lmms::ArrayVector< T, N >::swap ( ArrayVector< T, N > & other)
inlinenoexcept

◆ operator<=>

template<typename T, std::size_t N>
auto operator<=> ( const ArrayVector< T, N > & l,
const ArrayVector< T, N > & r )
friend

◆ operator==

template<typename T, std::size_t N>
bool operator== ( const ArrayVector< T, N > & l,
const ArrayVector< T, N > & r )
friend

◆ swap

template<typename T, std::size_t N>
void swap ( ArrayVector< T, N > & a,
ArrayVector< T, N > & b )
friend

Member Data Documentation

◆ m_data

template<typename T, std::size_t N>
std::byte lmms::ArrayVector< T, N >::m_data[std::max(N *sizeof(T), std::size_t{1})]
private

◆ m_size

template<typename T, std::size_t N>
size_type lmms::ArrayVector< T, N >::m_size = 0
private

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