Sane C++ Libraries
C++ Platform Abstraction Libraries
SC::SmallVector< T, N > Struct Template Reference

A Vector that can hold up to N elements inline and > N on heap. More...

#include <SmallVector.h>

Inheritance diagram for SC::SmallVector< T, N >:
SC::Vector< T > SC::Segment< SegmentVector< T > >

Public Member Functions

 SmallVector (const Vector< T > &other)
 
 SmallVector (Vector< T > &&other)
 
Vector< T > & operator= (const Vector< T > &other)
 
Vector< T > & operator= (Vector< T > &&other)
 
 SmallVector (const SmallVector &other)
 
 SmallVector (SmallVector &&other)
 
SmallVectoroperator= (const SmallVector &other)
 
SmallVectoroperator= (SmallVector &&other)
 
- Public Member Functions inherited from SC::Vector< T >
template<typename U >
bool contains (const U &value, size_t *index=nullptr) const
 Check if the current array contains a given value. More...
 
template<typename Lambda >
bool find (Lambda &&lambda, size_t *index=nullptr) const
 Finds the first item in array matching criteria given by the lambda. More...
 
template<typename Lambda >
bool removeAll (Lambda &&criteria)
 Removes all items matching criteria given by Lambda. More...
 
template<typename U >
bool remove (const U &value)
 Removes all values equal to value More...
 
- Public Member Functions inherited from SC::Segment< SegmentVector< T > >
 Segment (Segment &&other)
 
 Segment (const Segment &other)
 
 Segment (Span< const U > span)
 
 Segment (Span< const T > span)
 
 Segment (std::initializer_list< T > list)
 
 Segment (SegmentHeader &inlineHeader, uint32_t capacityInBytes)
 Builds a Segment with an inlineHeader of given capacity in bytes. More...
 
Segmentoperator= (Segment &&other)
 
Segmentoperator= (const Segment &other)
 
bool resizeWithoutInitializing (size_t newSize)
 Re-allocates to the requested new size, preserving its contents. More...
 
bool resize (size_t newSize, const T &value=T())
 Re-allocates to the requested new size, preserving its contents and setting new items to value. More...
 
bool reserve (size_t newCapacity)
 Reserves capacity to avoid heap-allocation during a future append, assign or resize. More...
 
bool append (Span< const T > span)
 Appends a Span to the end of the segment. More...
 
bool append (Span< const U > span)
 Appends a Span of items convertible to T to the end of the segment. More...
 
bool appendMove (Segment &&other)
 Moves contents of another segment to the end of this segment. More...
 
bool shrink_to_fit ()
 Ensures capacity == size re-allocating (if capacity>size) or freeing ( if size==0) memory. More...
 
void clear ()
 Sets size to zero without freeing any memory (use shrink_to_fit() to free memory) More...
 
bool assign (Span< const T > span)
 Replaces contents with contents of the span. More...
 
bool assignMove (Segment &&other)
 Replaces content moving (possibly "stealing") content of another segment. More...
 
bool push_back (const T &value)
 Appends a single element to the end of the segment. More...
 
bool push_back (T &&value)
 Moves a single element to the end of the segment. More...
 
bool push_front (const T &value)
 Appends a single element to the start of the segment. More...
 
bool pop_back (T *removedValue=nullptr)
 Removes the last element of the segment. More...
 
bool pop_front (T *removedValue=nullptr)
 Removes the first element of the segment. More...
 
const T * data () const SC_LANGUAGE_LIFETIME_BOUND
 Access data owned by the segment or nullptr if segment is empty. More...
 
T * data () SC_LANGUAGE_LIFETIME_BOUND
 Access data owned by the segment or nullptr if segment is empty. More...
 
T * begin () SC_LANGUAGE_LIFETIME_BOUND
 
const T * begin () const SC_LANGUAGE_LIFETIME_BOUND
 
T * end () SC_LANGUAGE_LIFETIME_BOUND
 
const T * end () const SC_LANGUAGE_LIFETIME_BOUND
 
T & back () SC_LANGUAGE_LIFETIME_BOUND
 
const T & back () const SC_LANGUAGE_LIFETIME_BOUND
 
T & front () SC_LANGUAGE_LIFETIME_BOUND
 
const T & front () const SC_LANGUAGE_LIFETIME_BOUND
 
T & operator[] (size_t idx) SC_LANGUAGE_LIFETIME_BOUND
 
const T & operator[] (size_t idx) const SC_LANGUAGE_LIFETIME_BOUND
 
bool isInlineBuffer () const
 Returns true if an inline buffer is in use (false if segment is heap allocated). More...
 
bool isEmpty () const
 Check if is empty (size() == 0) More...
 
Span< T > toSpan () SC_LANGUAGE_LIFETIME_BOUND
 Obtains a Span of internal contents. More...
 
Span< const T > toSpanConst () const SC_LANGUAGE_LIFETIME_BOUND
 Obtains a Span of internal contents. More...
 
size_t size () const
 Returns current size. More...
 
size_t capacity ()
 Returns current capacity (always >= of size()) More...
 
bool removeRange (size_t start, size_t length)
 Removes the range [start, start + length] from the segment. More...
 
bool removeAt (size_t index)
 Removes the element at index. More...
 
bool insert (size_t index, Span< const T > data)
 Insert a span at the given index. More...
 
void unsafeSetHeader (SegmentHeader *newHeader)
 Sets the internal header handled by this class. More...
 
SegmentHeaderunsafeGetHeader () const
 Get the internal header handled by this class. More...
 

Additional Inherited Members

- Public Types inherited from SC::Vector< T >
using Parent = Segment< SegmentVector< T > >
 
- Public Types inherited from SC::Segment< SegmentVector< T > >
using T = typename VTable::Type
 
- Protected Attributes inherited from SC::Segment< SegmentVector< T > >
SegmentHeaderheader
 

Detailed Description

template<typename T, int N>
struct SC::SmallVector< T, N >

A Vector that can hold up to N elements inline and > N on heap.

Template Parameters
TType of single vector element
NNumber of elements kept inline to avoid heap allocation

SC::SmallVector is like SC::Vector but it will do heap allocation once more than N elements are needed.
When the size() becomes less than N the container will switch back using memory coming from inline storage.

Note
SC::SmallVector derives from SC::Vector and it can be passed everywhere a reference to SC::Vector is needed. It can be used to get rid of unnecessary allocations where the upper bound of required elements is known or it can be predicted.

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