Cogs.Core
Classes | Public Types | Public Member Functions | Private Attributes | List of all members
Cogs::Collections::SmallVector< T, Size > Class Template Reference

Vector with inline storage for up to Size elements, avoiding heap allocation for small collections. More...

#include <SmallVector.h>

Inheritance diagram for Cogs::Collections::SmallVector< T, Size >:
Cogs::Collections::SmallVectorImpl< T > Cogs::Collections::SmallVectorImplBase< T, std::is_trivially_copyable< T >::value > Cogs::Collections::SmallVectorTemplateBase< T > Cogs::Collections::SmallVectorBase

Classes

struct  SmallVectorStorage
 
struct  SmallVectorStorage< Ts, 0 >
 
struct  SmallVectorStorage< Ts, 1 >
 

Public Types

using value_type = T
 
using difference_type = ptrdiff_t
 
using pointer = const T *
 
using reference = const T &
 

Public Member Functions

 SmallVector (size_t size)
 
 SmallVector (Memory::Allocator *allocator)
 
 SmallVector (SmallVector &&other) noexcept
 
 SmallVector (SmallVectorImpl< T > &&other) noexcept
 
 SmallVector (const SmallVector &other)
 
 SmallVector (const SmallVectorImpl< T > &other)
 
 SmallVector (std::initializer_list< T > il)
 
SmallVectoroperator= (const SmallVector &other)
 
SmallVectoroperator= (SmallVector &&other) noexcept
 
SmallVectoroperator= (SmallVectorImpl< T > &&other) noexcept
 
- Public Member Functions inherited from Cogs::Collections::SmallVectorImpl< T >
SmallVectorImploperator= (const SmallVectorImpl &other)
 
SmallVectorImploperator= (SmallVectorImpl &&other) noexcept
 
void resize (size_t newSize)
 
void reserve (size_t newCapacity)
 
void clear ()
 
template<typename T1 >
void assign (T1 first, T1 last)
 
void assign (std::initializer_list< T > il)
 
template<typename T1 >
void append (T1 first, T1 last)
 
void append (std::initializer_list< T > il)
 
- Public Member Functions inherited from Cogs::Collections::SmallVectorImplBase< T, std::is_trivially_copyable< T >::value >
void push_back (const T &t)
 
void push_back (T &&t)
 
void emplace_back (Args &&... args)
 
void pop_back ()
 
void erase (const T *pos)
 
- Public Member Functions inherited from Cogs::Collections::SmallVectorTemplateBase< T >
bool empty () const
 
size_t size () const
 
size_t capacity () const
 
T * data ()
 
const T * data () const
 
T * begin ()
 
T * end ()
 
const T * begin () const
 
const T * end () const
 
const T * cbegin () const
 
const T * cend () const
 
T & operator[] (const size_t index)
 
const T & operator[] (const size_t index) const
 
T & back ()
 
const T & back () const
 
T & front ()
 
const T & front () const
 

Private Attributes

SmallVectorStorage< T, Size > inlineStorage
 

Additional Inherited Members

- Protected Member Functions inherited from Cogs::Collections::SmallVectorImpl< T >
 SmallVectorImpl (size_t capacity, Memory::Allocator *allocator=Memory::Allocator::overflowAllocator())
 
void release ()
 
- Protected Member Functions inherited from Cogs::Collections::SmallVectorImplBase< T, std::is_trivially_copyable< T >::value >
 SmallVectorImplBase (size_t capacity, Memory::Allocator *allocator)
 
void grow (size_t minSize=0)
 
void initialize (T *first, const T *last)
 
void destroy (T *first, const T *last)
 
void moveNew (T1 first, T1 last, T2 dest)
 
void move (T1 first, T1 last, T2 dest)
 
void copy (T1 first, T1 last, T2 dest)
 
void copyNew (T1 first, T1 last, T2 dest)
 
- Protected Member Functions inherited from Cogs::Collections::SmallVectorTemplateBase< T >
 SmallVectorTemplateBase (size_t capacity, Memory::Allocator *allocator)
 
bool isSmall () const
 
void setSize (size_t newSize)
 
void reset ()
 
- Protected Member Functions inherited from Cogs::Collections::SmallVectorBase
 SmallVectorBase (void *data, size_t capacity, Memory::Allocator *allocator)
 
void growPod (const void *firstElement, const size_t minSizeBytes)
 
size_t sizeInBytes () const
 
size_t capacityInBytes () const
 
- Protected Attributes inherited from Cogs::Collections::SmallVectorTemplateBase< T >
uint8_t firstElement [sizeof(T)]
 
- Protected Attributes inherited from Cogs::Collections::SmallVectorBase
void * firstPtr
 
void * lastPtr
 
void * capacityPtr
 
Memory::Allocatorallocator
 

Detailed Description

template<typename T, size_t Size>
class Cogs::Collections::SmallVector< T, Size >

Vector with inline storage for up to Size elements, avoiding heap allocation for small collections.

Falls back to heap (via the overflow allocator) when the inline budget is exceeded. Trivially-copyable element types use memcpy for growth; non-trivial types use move/copy constructors.

Supports the same interface as std::vector: push_back, emplace_back, pop_back, erase, resize, reserve, assign, append, random-access via operator[], front, back, begin/end, and data.

Template Parameters
TElement type. Must be at least pointer-sized when stored in a pool.
SizeNumber of elements to store inline on the stack. Choose based on the expected common case.
#include "Foundation/Collections/SmallVector.h"
// Up to 8 elements on the stack; spills to the heap beyond that.
vec.push_back(1);
vec.push_back(2);
for (int v : vec) { printf("%d\n", v); }
// Assign from iterator range or initializer list
vec.assign({10, 20, 30});
// Append a range
std::array<int, 3> src = {4, 5, 6};
vec.append(src.begin(), src.end());
Vector with inline storage for up to Size elements, avoiding heap allocation for small collections.
Definition: SmallVector.h:460

Definition at line 459 of file SmallVector.h.

Member Typedef Documentation

◆ difference_type

template<typename T , size_t Size>
using Cogs::Collections::SmallVector< T, Size >::difference_type = ptrdiff_t

Definition at line 473 of file SmallVector.h.

◆ pointer

template<typename T , size_t Size>
using Cogs::Collections::SmallVector< T, Size >::pointer = const T*

Definition at line 474 of file SmallVector.h.

◆ reference

template<typename T , size_t Size>
using Cogs::Collections::SmallVector< T, Size >::reference = const T&

Definition at line 475 of file SmallVector.h.

◆ value_type

template<typename T , size_t Size>
using Cogs::Collections::SmallVector< T, Size >::value_type = T

Definition at line 472 of file SmallVector.h.

Constructor & Destructor Documentation

◆ SmallVector() [1/8]

template<typename T , size_t Size>
Cogs::Collections::SmallVector< T, Size >::SmallVector ( )
inline

Definition at line 477 of file SmallVector.h.

◆ SmallVector() [2/8]

template<typename T , size_t Size>
Cogs::Collections::SmallVector< T, Size >::SmallVector ( size_t  size)
inlineexplicit

Definition at line 478 of file SmallVector.h.

◆ SmallVector() [3/8]

template<typename T , size_t Size>
Cogs::Collections::SmallVector< T, Size >::SmallVector ( Memory::Allocator allocator)
inline

Definition at line 479 of file SmallVector.h.

◆ SmallVector() [4/8]

template<typename T , size_t Size>
Cogs::Collections::SmallVector< T, Size >::SmallVector ( SmallVector< T, Size > &&  other)
inlinenoexcept

Definition at line 481 of file SmallVector.h.

◆ SmallVector() [5/8]

template<typename T , size_t Size>
Cogs::Collections::SmallVector< T, Size >::SmallVector ( SmallVectorImpl< T > &&  other)
inlinenoexcept

Definition at line 486 of file SmallVector.h.

◆ SmallVector() [6/8]

template<typename T , size_t Size>
Cogs::Collections::SmallVector< T, Size >::SmallVector ( const SmallVector< T, Size > &  other)
inline

Definition at line 491 of file SmallVector.h.

◆ SmallVector() [7/8]

template<typename T , size_t Size>
Cogs::Collections::SmallVector< T, Size >::SmallVector ( const SmallVectorImpl< T > &  other)
inline

Definition at line 496 of file SmallVector.h.

◆ SmallVector() [8/8]

template<typename T , size_t Size>
Cogs::Collections::SmallVector< T, Size >::SmallVector ( std::initializer_list< T >  il)
inline

Definition at line 501 of file SmallVector.h.

Member Function Documentation

◆ operator=() [1/3]

template<typename T , size_t Size>
SmallVector & Cogs::Collections::SmallVector< T, Size >::operator= ( const SmallVector< T, Size > &  other)
inline

Definition at line 506 of file SmallVector.h.

◆ operator=() [2/3]

template<typename T , size_t Size>
SmallVector & Cogs::Collections::SmallVector< T, Size >::operator= ( SmallVector< T, Size > &&  other)
inlinenoexcept

Definition at line 512 of file SmallVector.h.

◆ operator=() [3/3]

template<typename T , size_t Size>
SmallVector & Cogs::Collections::SmallVector< T, Size >::operator= ( SmallVectorImpl< T > &&  other)
inlinenoexcept

Definition at line 518 of file SmallVector.h.

Member Data Documentation

◆ inlineStorage

template<typename T , size_t Size>
SmallVectorStorage<T, Size> Cogs::Collections::SmallVector< T, Size >::inlineStorage
private

Definition at line 525 of file SmallVector.h.


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