A Vector that can hold up to N
elements inline and > N
on heap.
More...
#include <SmallVector.h>
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) | |
SmallVector & | operator= (const SmallVector &other) |
SmallVector & | operator= (SmallVector &&other) |
![]() | |
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... | |
![]() | |
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... | |
Segment & | operator= (Segment &&other) |
Segment & | operator= (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... | |
SegmentHeader * | unsafeGetHeader () const |
Get the internal header handled by this class. More... | |
Additional Inherited Members | |
![]() | |
using | Parent = Segment< SegmentVector< T > > |
![]() | |
using | T = typename VTable::Type |
![]() | |
SegmentHeader * | header |
A Vector that can hold up to N
elements inline and > N
on heap.
T | Type of single vector element |
N | Number 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.