Sane C++ Libraries
C++ Platform Abstraction Libraries
SC::Vector< T > Struct Template Reference

A contiguous sequence of heap allocated elements. More...

#include <Vector.h>

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

Public Types

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

Public Member Functions

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

- Protected Attributes inherited from SC::Segment< SegmentVector< T > >
SegmentHeaderheader
 

Detailed Description

template<typename T>
struct SC::Vector< T >

A contiguous sequence of heap allocated elements.

Template Parameters
TType of single vector element

All methods of SC::Vector that can fail, return a [[nodiscard]] bool (example SC::Vector::push_back).
Assignment and Copy / move construct operators will just assert as they can't return a failure code.
memcpy is used to optimize copies when T is a memcpy-able object.

Note
Use SC::SmallVector everywhere a SC::Vector reference is needed if the upper bound size of required elements is known to get rid of unnecessary heap allocations.

Member Function Documentation

◆ contains()

template<typename T >
template<typename U >
bool SC::Vector< T >::contains ( const U &  value,
size_t index = nullptr 
) const
inline

Check if the current array contains a given value.

Template Parameters
UType of the object being searched
Parameters
valueValue being searched
indexif passed in != nullptr, receives index where item was found. Only written if function returns true
Returns
true if the array contains the given value.

◆ find()

template<typename T >
template<typename Lambda >
bool SC::Vector< T >::find ( Lambda &&  lambda,
size_t index = nullptr 
) const
inline

Finds the first item in array matching criteria given by the lambda.

Template Parameters
LambdaType of the Lambda passed that declares a bool operator()(const T&) operator
Parameters
lambdaThe functor or lambda called that evaluates to true when item is found
indexif passed in != nullptr, receives index where item was found.
Returns
true if the wanted value with given criteria is found.

◆ remove()

template<typename T >
template<typename U >
bool SC::Vector< T >::remove ( const U &  value)
inline

Removes all values equal to value

Template Parameters
UType of the Value
Parameters
valueValue to be removed
Returns
true if at least one item has been removed

◆ removeAll()

template<typename T >
template<typename Lambda >
bool SC::Vector< T >::removeAll ( Lambda &&  criteria)
inline

Removes all items matching criteria given by Lambda.

Template Parameters
LambdaType of the functor/lambda with a bool operator()(const T&) operator
Parameters
criteriaThe lambda/functor passed in
Returns
true if at least one item has been removed

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