#include <Containers/SmallVector.h>
template<typename T, bool = (std:: is_trivially_copy_constructible<T>::value)&& (std:: is_trivially_move_constructible<T>::value)&& std:: is_trivially_destructible<T>::value>
SmallVectorTemplateBase class
SmallVector method implementations that are designed to work with non-trivial types
Base classes
-
template<typename T>class SmallVectorTemplateCommon<T>
- SmallVector part which does not depend on whether the type is a POD
Derived classes
-
template<typename T>class SmallVectorImpl
- Consists of common code of SmallVector class to reduce code duplication based on
N
template parameter.
Constructors, destructors, conversion operators
-
SmallVectorTemplateBase(std::
size_t size) protected
Public functions
Protected types
- using ValueParamT = const T&
Protected static functions
- static void destroy_range(T* s, T* e)
-
template<typename It1, typename It2>static void uninitialized_move(It1 i, It1 e, It2 dest)
- Moves the range [I, E) into the uninitialized memory starting with
Dest
, constructing elements as needed. -
template<typename It1, typename It2>static void uninitialized_copy(It1 i, It1 e, It2 dest)
- Copies the range [I, E) onto the uninitialized memory starting with
Dest
, constructing elements as needed. - static auto forward_value_param(T&& v) -> T&&
- static auto forward_value_param(const T& v) -> const T&
Protected functions
-
void grow(std::
size_t minSize = 0) - Grows the allocated memory (without initializing new elements), doubling the size of the allocated memory.
-
auto mallocForGrow(std::
size_t minSize, std:: size_t& newCapacity) -> T* - Creates a new allocation big enough for
MinSize
and pass back its size inNewCapacity
. - void moveElementsForGrow(T* newElts)
- Move existing elements over to the new allocation
NewElts
. -
void takeAllocationForGrow(T* newElts,
std::
size_t newCapacity) - Transfers ownership of the allocation.
-
auto reserveForParamAndGetAddress(const T& elt,
std::
size_t n = 1) -> const T* -
auto reserveForParamAndGetAddress(T& elt,
std::
size_t n = 1) -> T* - Reserves enough space to add one element, and returns the updated element pointer in case it was a reference to the storage.
-
void growAndAssign(std::
size_t numElts, const T& elt) -
template<typename ... ArgTypes>auto growAndEmplaceBack(ArgTypes && ... args) -> T&
Protected static variables
- static bool TakesParamByValue constexpr