LLVM
15.0.0git
|
SmallVectorTemplateBase<TriviallyCopyable = true> - This is where we put method implementations that are designed to work with trivially copyable T's. More...
#include "llvm/ADT/SmallVector.h"
Public Member Functions | |
void | push_back (ValueParamT Elt) |
void | pop_back () |
![]() | |
iterator | begin () |
const_iterator | begin () const |
iterator | end () |
const_iterator | end () const |
reverse_iterator | rbegin () |
const_reverse_iterator | rbegin () const |
reverse_iterator | rend () |
const_reverse_iterator | rend () const |
size_type | size_in_bytes () const |
size_type | max_size () const |
size_t | capacity_in_bytes () const |
pointer | data () |
Return a pointer to the vector's buffer, even if empty(). More... | |
const_pointer | data () const |
Return a pointer to the vector's buffer, even if empty(). More... | |
reference | operator[] (size_type idx) |
const_reference | operator[] (size_type idx) const |
reference | front () |
const_reference | front () const |
reference | back () |
const_reference | back () const |
![]() | |
size_t | size () const |
size_t | capacity () const |
LLVM_NODISCARD bool | empty () const |
Protected Types | |
using | ValueParamT = typename std::conditional< TakesParamByValue, T, const T & >::type |
Either const T& or T, depending on whether it's cheap enough to take parameters by value. More... | |
Protected Member Functions | |
SmallVectorTemplateBase (size_t Size) | |
void | grow (size_t MinSize=0) |
Double the size of the allocated memory, guaranteeing space for at least one more element or MinSize if specified. More... | |
const T * | reserveForParamAndGetAddress (const T &Elt, size_t N=1) |
Reserve enough space to add one element, and return the updated element pointer in case it was a reference to the storage. More... | |
T * | reserveForParamAndGetAddress (T &Elt, size_t N=1) |
Reserve enough space to add one element, and return the updated element pointer in case it was a reference to the storage. More... | |
void | growAndAssign (size_t NumElts, T Elt) |
template<typename... ArgTypes> | |
T & | growAndEmplaceBack (ArgTypes &&... Args) |
![]() | |
SmallVectorTemplateCommon (size_t Size) | |
void | grow_pod (size_t MinSize, size_t TSize) |
bool | isSmall () const |
Return true if this is a smallvector which has not had dynamic memory allocated for it. More... | |
void | resetToSmall () |
Put this vector in a state of being small. More... | |
bool | isReferenceToRange (const void *V, const void *First, const void *Last) const |
Return true if V is an internal reference to the given range. More... | |
bool | isReferenceToStorage (const void *V) const |
Return true if V is an internal reference to this vector. More... | |
bool | isRangeInStorage (const void *First, const void *Last) const |
Return true if First and Last form a valid (possibly empty) range in this vector's storage. More... | |
bool | isSafeToReferenceAfterResize (const void *Elt, size_t NewSize) |
Return true unless Elt will be invalidated by resizing the vector to NewSize. More... | |
void | assertSafeToReferenceAfterResize (const void *Elt, size_t NewSize) |
Check whether Elt will be invalidated by resizing the vector to NewSize. More... | |
void | assertSafeToAdd (const void *Elt, size_t N=1) |
Check whether Elt will be invalidated by increasing the size of the vector by N. More... | |
void | assertSafeToReferenceAfterClear (const T *From, const T *To) |
Check whether any part of the range will be invalidated by clearing. More... | |
void | assertSafeToReferenceAfterClear (ItTy, ItTy) |
void | assertSafeToAddRange (const T *From, const T *To) |
Check whether any part of the range will be invalidated by growing. More... | |
void | assertSafeToAddRange (ItTy, ItTy) |
![]() | |
SmallVectorBase ()=delete | |
SmallVectorBase (void *FirstEl, size_t TotalCapacity) | |
void * | mallocForGrow (size_t MinSize, size_t TSize, size_t &NewCapacity) |
This is a helper for grow() that's out of line to reduce code duplication. More... | |
void | grow_pod (void *FirstEl, size_t MinSize, size_t TSize) |
This is an implementation of the grow() method which only works on POD-like data types and is out of line to reduce code duplication. More... | |
void | set_size (size_t N) |
Set the array size to N , which the current array must have enough capacity for. More... | |
Static Protected Member Functions | |
static void | destroy_range (T *, T *) |
template<typename It1 , typename It2 > | |
static void | uninitialized_move (It1 I, It1 E, It2 Dest) |
Move the range [I, E) onto the uninitialized memory starting with "Dest", constructing elements into it as needed. More... | |
template<typename It1 , typename It2 > | |
static void | uninitialized_copy (It1 I, It1 E, It2 Dest) |
Copy the range [I, E) onto the uninitialized memory starting with "Dest", constructing elements into it as needed. More... | |
template<typename T1 , typename T2 > | |
static void | uninitialized_copy (T1 *I, T1 *E, T2 *Dest, std::enable_if_t< std::is_same< typename std::remove_const< T1 >::type, T2 >::value > *=nullptr) |
Copy the range [I, E) onto the uninitialized memory starting with "Dest", constructing elements into it as needed. More... | |
static ValueParamT | forward_value_param (ValueParamT V) |
Copy V or return a reference, depending on ValueParamT. More... | |
![]() | |
static const T * | reserveForParamAndGetAddressImpl (U *This, const T &Elt, size_t N) |
Reserve enough space to add one element, and return the updated element pointer in case it was a reference to the storage. More... | |
![]() | |
static constexpr size_t | SizeTypeMax () |
The maximum value of the Size_T used. More... | |
Static Protected Attributes | |
static constexpr bool | TakesParamByValue = sizeof(T) <= 2 * sizeof(void *) |
True if it's cheap enough to take parameters by value. More... | |
Friends | |
class | SmallVectorTemplateCommon< T > |
Additional Inherited Members | |
![]() | |
using | size_type = size_t |
using | difference_type = ptrdiff_t |
using | value_type = T |
using | iterator = T * |
using | const_iterator = const T * |
using | const_reverse_iterator = std::reverse_iterator< const_iterator > |
using | reverse_iterator = std::reverse_iterator< iterator > |
using | reference = T & |
using | const_reference = const T & |
using | pointer = T * |
using | const_pointer = const T * |
![]() | |
void * | BeginX |
SmallVectorSizeType< T > | Size |
SmallVectorSizeType< T > | Capacity |
SmallVectorTemplateBase<TriviallyCopyable = true> - This is where we put method implementations that are designed to work with trivially copyable T's.
This allows using memcpy in place of copy/move construction and skipping destruction.
Definition at line 455 of file SmallVector.h.
|
protected |
Either const T& or T, depending on whether it's cheap enough to take parameters by value.
Definition at line 466 of file SmallVector.h.
|
inlineprotected |
Definition at line 468 of file SmallVector.h.
|
inlinestaticprotected |
Definition at line 471 of file SmallVector.h.
|
inlinestaticprotected |
Copy V
or return a reference, depending on ValueParamT.
Definition at line 522 of file SmallVector.h.
|
inlineprotected |
Double the size of the allocated memory, guaranteeing space for at least one more element or MinSize if specified.
Definition at line 506 of file SmallVector.h.
References llvm::SmallVectorTemplateCommon< T >::grow_pod(), and T.
|
inlineprotected |
Definition at line 524 of file SmallVector.h.
References llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallVectorTemplateBase< T, bool >::grow(), and llvm::SmallVectorBase< SmallVectorSizeType< T > >::set_size().
|
inlineprotected |
Definition at line 533 of file SmallVector.h.
References llvm::AMDGPU::HSAMD::Kernel::Key::Args, llvm::SmallVectorTemplateCommon< T >::back(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and T.
|
inline |
Definition at line 548 of file SmallVector.h.
References llvm::SmallVectorBase< SmallVectorSizeType< T > >::set_size(), and llvm::SmallVectorBase< SmallVectorSizeType< T > >::size().
|
inline |
Definition at line 542 of file SmallVector.h.
References llvm::SmallVectorTemplateCommon< T >::end(), memcpy(), llvm::SmallVectorTemplateBase< T, bool >::reserveForParamAndGetAddress(), llvm::SmallVectorBase< SmallVectorSizeType< T > >::set_size(), llvm::SmallVectorBase< SmallVectorSizeType< T > >::size(), and T.
|
inlineprotected |
Reserve enough space to add one element, and return the updated element pointer in case it was a reference to the storage.
Definition at line 510 of file SmallVector.h.
References N, and llvm::SmallVectorTemplateCommon< T >::reserveForParamAndGetAddressImpl().
|
inlineprotected |
Reserve enough space to add one element, and return the updated element pointer in case it was a reference to the storage.
Definition at line 516 of file SmallVector.h.
References N, llvm::SmallVectorTemplateCommon< T >::reserveForParamAndGetAddressImpl(), and T.
|
inlinestaticprotected |
Copy the range [I, E) onto the uninitialized memory starting with "Dest", constructing elements into it as needed.
Definition at line 484 of file SmallVector.h.
|
inlinestaticprotected |
Move the range [I, E) onto the uninitialized memory starting with "Dest", constructing elements into it as needed.
Definition at line 476 of file SmallVector.h.
References E, I, and llvm::SmallVectorTemplateBase< T, bool >::uninitialized_copy().
|
friend |
Definition at line 456 of file SmallVector.h.
|
staticconstexprprotected |
True if it's cheap enough to take parameters by value.
Doing so avoids overhead related to mitigations for reference invalidation.
Definition at line 461 of file SmallVector.h.