Sane C++ Libraries
C++ Platform Abstraction Libraries
SC::SmallBuffer< N > Struct Template Reference

A SC::Buffer with a dedicated custom inline buffer to avoid heap allocation. More...

#include <Buffer.h>

Inheritance diagram for SC::SmallBuffer< N >:
SC::Buffer SC::Segment< SegmentBuffer >

Public Member Functions

 SmallBuffer (const Buffer &other)
 
 SmallBuffer (Buffer &&other)
 
Bufferoperator= (const Buffer &other)
 
Bufferoperator= (Buffer &&other)
 
 SmallBuffer (const SmallBuffer &other)
 
 SmallBuffer (SmallBuffer &&other)
 
SmallBufferoperator= (const SmallBuffer &other)
 
SmallBufferoperator= (SmallBuffer &&other)
 
- Public Member Functions inherited from SC::Buffer
 Segment ()
 
 Segment (Segment &&other)
 
 Segment (const Segment &other)
 
template<typename U >
 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...
 
- Public Member Functions inherited from SC::Segment< SegmentBuffer >
 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::Segment< SegmentBuffer >
using T = typename VTable::Type
 
- Protected Attributes inherited from SC::Segment< SegmentBuffer >
SegmentHeaderheader
 

Detailed Description

template<int N>
struct SC::SmallBuffer< N >

A SC::Buffer with a dedicated custom inline buffer to avoid heap allocation.

Note
You can pass a SmallBuffer everywhere a reference to a Buffer is requested. SC::Buffer will fallback to heap allocation once the inline buffer size is exceeded.

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