35#include <initializer_list>
60 void *Result = std::malloc(Sz);
61 if (Result ==
nullptr) {
66 throw std::bad_alloc();
72 void *Result = std::realloc(Ptr, Sz);
73 if (Result ==
nullptr) {
78 throw std::bad_alloc();
83template <
typename IteratorT>
94template <
class Size_T>
102 return std::numeric_limits<Size_T>::max();
117 void grow_pod(
void *FirstEl,
size_t MinSize,
size_t TSize);
138 typename std::conditional<
sizeof(T) < 4 &&
sizeof(
void *) >= 8,
143template <
class T,
typename =
void>
153template <
typename T,
typename =
void>
161 void *getFirstEl()
const {
162 return const_cast<void *
>(
reinterpret_cast<const void *
>(
163 reinterpret_cast<const char *
>(
this) +
182 this->
BeginX = getFirstEl();
190 const void *Last)
const {
192 std::less<> LessThan;
193 return !LessThan(V, First) && LessThan(V, Last);
205 std::less<> LessThan;
206 return !LessThan(First, this->
begin()) && !LessThan(Last, First) &&
207 !LessThan(this->
end(), Last);
217 if (NewSize <= this->
size())
return Elt < this->
begin() + NewSize;
226 "Attempting to reference an element of the vector in an "
228 "that invalidates it");
239 if (From == To)
return;
243 template <
class ItTy,
245 !std::is_same<std::remove_const_t<ItTy>, T *>::value,
251 if (From == To)
return;
255 template <
class ItTy,
257 !std::is_same<std::remove_const_t<ItTy>, T *>::value,
267 size_t NewSize = This->size() + N;
270 bool ReferencesStorage =
false;
272 if (!U::TakesParamByValue) {
274 ReferencesStorage =
true;
275 Index = &Elt - This->begin();
279 return ReferencesStorage ? This->begin() + Index : &Elt;
330 assert(idx <
size());
334 assert(idx <
size());
366 bool = (std::is_trivially_copy_constructible<T>::value) &&
367 (std::is_trivially_move_constructible<T>::value) &&
368 std::is_trivially_destructible<T>::value>
387 template <
typename It1,
typename It2>
389 std::uninitialized_copy(std::make_move_iterator(I),
390 std::make_move_iterator(E), Dest);
395 template <
typename It1,
typename It2>
397 std::uninitialized_copy(I, E, Dest);
403 void grow(
size_t MinSize = 0);
408 return static_cast<T *
>(
410 MinSize,
sizeof(T), NewCapacity));
429 return const_cast<T *
>(
440 std::uninitialized_fill_n(NewElts, NumElts, Elt);
446 template <
typename... ArgTypes>
451 ::new ((
void *)(NewElts + this->
size()))
452 T(std::forward<ArgTypes>(Args)...);
462 ::new ((
void *)this->
end()) T(*EltPtr);
468 ::new ((
void *)this->
end()) T(::std::move(*EltPtr));
479template <
typename T,
bool TriviallyCopyable>
488template <
typename T,
bool TriviallyCopyable>
499template <
typename T,
bool TriviallyCopyable>
501 T *NewElts,
size_t NewCapacity) {
525 typename std::conditional<TakesParamByValue, T, const T &>::type;
534 template <
typename It1,
typename It2>
542 template <
typename It1,
typename It2>
545 std::uninitialized_copy(I, E, Dest);
550 template <
typename T1,
typename T2>
555 std::enable_if_t<std::is_same<
typename std::remove_const<T1>::type,
556 T2>::value> * =
nullptr) {
562 memcpy(
reinterpret_cast<void *
>(Dest), I, (E - I) *
sizeof(T));
578 return const_cast<T *
>(
591 std::uninitialized_fill_n(this->
begin(), NumElts, Elt);
595 template <
typename... ArgTypes>
600 push_back(T(std::forward<ArgTypes>(Args)...));
607 memcpy(
reinterpret_cast<void *
>(this->
end()), EltPtr,
sizeof(T));
636 this->
BeginX = RHS.BeginX;
637 this->
Size = RHS.Size;
660 template <
bool ForOverwrite>
662 if (N == this->
size())
return;
664 if (N < this->
size()) {
670 for (
auto I = this->
end(), E = this->
begin() + N; I != E; ++I)
686 assert(this->
size() >= N &&
"Cannot increase size with truncate");
692 if (N == this->
size())
return;
694 if (N < this->
size()) {
708 assert(this->
size() >= NumItems);
713 T Result = ::std::move(this->
back());
721 template <
typename in_iter,
722 typename = std::enable_if_t<std::is_convertible<
723 typename std::iterator_traits<in_iter>::iterator_category,
724 std::input_iterator_tag>::value>>
725 void append(in_iter in_start, in_iter in_end) {
727 size_type NumInputs = std::distance(in_start, in_end);
736 std::uninitialized_fill_n(this->
end(), NumInputs, *EltPtr);
740 void append(std::initializer_list<T> IL) {
append(IL.begin(), IL.end()); }
752 std::fill_n(this->
begin(), std::min(NumElts, this->
size()), Elt);
753 if (NumElts > this->
size())
754 std::uninitialized_fill_n(this->
end(), NumElts - this->
size(), Elt);
755 else if (NumElts < this->
size())
763 template <
typename in_iter,
764 typename = std::enable_if_t<std::is_convertible<
765 typename std::iterator_traits<in_iter>::iterator_category,
766 std::input_iterator_tag>::value>>
767 void assign(in_iter in_start, in_iter in_end) {
773 void assign(std::initializer_list<T> IL) {
785 "Iterator to erase is out of bounds.");
789 std::move(I + 1, this->
end(), I);
801 "Range to erase is out of bounds.");
813 template <
class ArgType>
818 std::remove_const_t<std::remove_reference_t<ArgType>>,
820 "ArgType must be derived from T!");
822 if (I == this->
end()) {
823 this->
push_back(::std::forward<ArgType>(Elt));
824 return this->
end() - 1;
828 "Insertion iterator is out of bounds.");
831 size_t Index = I - this->
begin();
832 std::remove_reference_t<ArgType> *EltPtr =
834 I = this->
begin() + Index;
836 ::new ((
void *)this->
end()) T(::
std::move(this->
back()));
838 std::move_backward(I, this->
end() - 1, this->
end());
844 "ArgType must be 'T' when taking by value!");
849 *I = ::
std::forward<ArgType>(*EltPtr);
865 size_t InsertElt = I - this->
begin();
867 if (I == this->
end()) {
869 return this->
begin() + InsertElt;
873 "Insertion iterator is out of bounds.");
880 I = this->
begin() + InsertElt;
886 if (
size_t(this->
end() - I) >= NumToInsert) {
887 T *OldEnd = this->
end();
888 append(std::move_iterator<iterator>(this->
end() - NumToInsert),
889 std::move_iterator<iterator>(this->
end()));
892 std::move_backward(I, OldEnd - NumToInsert, OldEnd);
897 EltPtr += NumToInsert;
899 std::fill_n(I, NumToInsert, *EltPtr);
907 T *OldEnd = this->
end();
909 size_t NumOverwritten = OldEnd - I;
915 EltPtr += NumToInsert;
918 std::fill_n(I, NumOverwritten, *EltPtr);
921 std::uninitialized_fill_n(OldEnd, NumToInsert - NumOverwritten,
926 template <
typename ItTy,
927 typename = std::enable_if_t<std::is_convertible<
928 typename std::iterator_traits<ItTy>::iterator_category,
929 std::input_iterator_tag>::value>>
933 size_t InsertElt = I - this->
begin();
935 if (I == this->
end()) {
937 return this->
begin() + InsertElt;
941 "Insertion iterator is out of bounds.");
946 size_t NumToInsert = std::distance(From, To);
952 I = this->
begin() + InsertElt;
958 if (
size_t(this->
end() - I) >= NumToInsert) {
959 T *OldEnd = this->
end();
960 append(std::move_iterator<iterator>(this->
end() - NumToInsert),
961 std::move_iterator<iterator>(this->
end()));
964 std::move_backward(I, OldEnd - NumToInsert, OldEnd);
966 std::copy(From, To, I);
974 T *OldEnd = this->
end();
976 size_t NumOverwritten = OldEnd - I;
980 for (T *J = I; NumOverwritten > 0; --NumOverwritten) {
992 insert(I, IL.begin(), IL.end());
995 template <
typename... ArgTypes>
1000 ::new ((
void *)this->
end()) T(std::forward<ArgTypes>(Args)...);
1002 return this->
back();
1010 if (this->
size() != RHS.
size())
return false;
1014 return !(*
this == RHS);
1018 return std::lexicographical_compare(this->
begin(), this->
end(),
1026template <
typename T>
1028 if (
this == &RHS)
return;
1041 size_t NumShared = this->
size();
1042 if (NumShared > RHS.
size()) NumShared = RHS.
size();
1047 size_t EltDiff = this->
size() - RHS.
size();
1053 }
else if (RHS.
size() > this->size()) {
1054 size_t EltDiff = RHS.
size() - this->
size();
1063template <
typename T>
1067 if (
this == &RHS)
return *
this;
1071 size_t RHSSize = RHS.
size();
1072 size_t CurSize = this->
size();
1073 if (CurSize >= RHSSize) {
1077 NewEnd = std::copy(RHS.
begin(), RHS.
begin() + RHSSize,
1080 NewEnd = this->
begin();
1097 this->
grow(RHSSize);
1098 }
else if (CurSize) {
1100 std::copy(RHS.
begin(), RHS.
begin() + CurSize, this->begin());
1105 this->begin() + CurSize);
1112template <
typename T>
1115 if (
this == &RHS)
return *
this;
1118 if (!RHS.isSmall()) {
1125 size_t RHSSize = RHS.
size();
1126 size_t CurSize = this->
size();
1127 if (CurSize >= RHSSize) {
1130 if (RHSSize) NewEnd = std::move(RHS.begin(), RHS.end(), NewEnd);
1150 this->
grow(RHSSize);
1151 }
else if (CurSize) {
1153 std::move(RHS.begin(), RHS.begin() + CurSize, this->begin());
1158 this->begin() + CurSize);
1169template <
typename T,
unsigned N>
1177template <
typename T>
1183template <
typename T,
unsigned N>
1191template <
typename T>
1227 "You are trying to use a default number of inlined elements for "
1228 "`SmallVector<T>` but `sizeof(T)` is really big! Please use an "
1229 "explicit number of inlined elements with `SmallVector<T, N>` to "
1231 "sure you really want that much inline storage.");
1259template <
typename T,
1276 template <
typename ItTy,
1277 typename = std::enable_if_t<std::is_convertible<
1278 typename std::iterator_traits<ItTy>::iterator_category,
1279 std::input_iterator_tag>::value>>
1284 template <
typename RangeTy>
1287 this->
append(R.begin(), R.end());
1318 if (
this == &RHS)
return *
this;
1339template <
typename T,
unsigned N>
1344template <
typename RangeType>
1346 typename std::remove_const<
typename std::remove_reference<
decltype(
1347 *std::begin(std::declval<RangeType &>()))>::type>::type;
1352template <
unsigned Size,
typename R>
1354 return {std::begin(Range), std::end(Range)};
1356template <
typename R>
1357SmallVector<ValueTypeFromRangeType<R>,
1358 CalculateSmallVectorDefaultInlinedElements<
1359 ValueTypeFromRangeType<R>>::value>
1361 return {std::begin(Range), std::end(Range)};
1370template <
typename T>
1377template <
typename T,
unsigned N>
#define LLVM_LIKELY
Definition SmallVector.h:44
#define LLVM_GSL_OWNER
Definition SmallVector.h:53
#define LLVM_NODISCARD
Definition SmallVector.h:50
#define LLVM_UNLIKELY
Definition SmallVector.h:47
Definition SmallVector.h:95
LLVM_NODISCARD bool empty() const
Definition SmallVector.h:123
size_t capacity() const
Definition SmallVector.h:121
size_t size() const
Definition SmallVector.h:120
static constexpr size_t SizeTypeMax()
The maximum value of the Size_T used.
Definition SmallVector.h:101
SmallVectorBase(void *FirstEl, size_t TotalCapacity)
Definition SmallVector.h:106
void * BeginX
Definition SmallVector.h:97
SmallVectorSizeType< T > Capacity
Definition SmallVector.h:98
void * mallocForGrow(size_t MinSize, size_t TSize, size_t &NewCapacity)
Definition SmallVector.cpp:125
void set_size(size_t N)
Definition SmallVector.h:130
SmallVectorSizeType< T > Size
Definition SmallVector.h:98
void grow_pod(void *FirstEl, size_t MinSize, size_t TSize)
Definition SmallVector.cpp:134
Definition SmallVector.h:1262
SmallVector(size_t Size, const T &Value=T())
Definition SmallVector.h:1271
SmallVector(const SmallVector &RHS)
Definition SmallVector.h:1294
SmallVector & operator=(SmallVectorImpl< T > &&RHS)
Definition SmallVector.h:1328
SmallVector & operator=(SmallVector &&RHS)
Definition SmallVector.h:1311
SmallVector(SmallVectorImpl< T > &&RHS)
Definition SmallVector.h:1307
SmallVector()
Definition SmallVector.h:1264
~SmallVector()
Definition SmallVector.h:1266
SmallVector & operator=(std::initializer_list< T > IL)
Definition SmallVector.h:1333
SmallVector(const iterator_range< RangeTy > &R)
Definition SmallVector.h:1285
SmallVector(std::initializer_list< T > IL)
Definition SmallVector.h:1290
SmallVector(SmallVector &&RHS)
Definition SmallVector.h:1303
SmallVector & operator=(const SmallVector &RHS)
Definition SmallVector.h:1298
SmallVector(ItTy S, ItTy E)
Definition SmallVector.h:1280
Definition SmallVector.h:617
LLVM_NODISCARD T pop_back_val()
Definition SmallVector.h:712
bool operator<(const SmallVectorImpl &RHS) const
Definition SmallVector.h:1017
void resize_for_overwrite(size_type N)
Like resize, but T is POD, the new values won't be initialized.
Definition SmallVector.h:682
void swap(SmallVectorImpl &RHS)
Definition SmallVector.h:1027
void assign(const SmallVectorImpl &RHS)
Definition SmallVector.h:778
void resize(size_type N)
Definition SmallVector.h:679
typename SuperClass::iterator iterator
Definition SmallVector.h:621
typename SuperClass::ValueParamT ValueParamT
Definition SmallVector.h:628
iterator insert(iterator I, size_type NumToInsert, ValueParamT Elt)
Definition SmallVector.h:862
SmallVectorImpl(const SmallVectorImpl &)=delete
void assign(in_iter in_start, in_iter in_end)
Definition SmallVector.h:767
iterator insert(iterator I, ItTy From, ItTy To)
Definition SmallVector.h:930
void append(std::initializer_list< T > IL)
Definition SmallVector.h:740
void insert(iterator I, std::initializer_list< T > IL)
Definition SmallVector.h:991
SmallVectorImpl & operator=(const SmallVectorImpl &RHS)
Definition SmallVector.h:1064
void append(size_type NumInputs, ValueParamT Elt)
Append NumInputs copies of Elt to the end.
Definition SmallVector.h:734
void truncate(size_type N)
Like resize, but requires that N is less than size().
Definition SmallVector.h:685
void reserve(size_type N)
Definition SmallVector.h:703
bool operator!=(const SmallVectorImpl &RHS) const
Definition SmallVector.h:1013
iterator insert(iterator I, const T &Elt)
Definition SmallVector.h:858
bool operator>(const SmallVectorImpl &RHS) const
Definition SmallVector.h:1021
typename SuperClass::reference reference
Definition SmallVector.h:623
void assign(size_type NumElts, ValueParamT Elt)
Definition SmallVector.h:744
void append(const SmallVectorImpl &RHS)
Definition SmallVector.h:742
typename SuperClass::size_type size_type
Definition SmallVector.h:624
bool operator>=(const SmallVectorImpl &RHS) const
Definition SmallVector.h:1023
void assign(std::initializer_list< T > IL)
Definition SmallVector.h:773
bool operator<=(const SmallVectorImpl &RHS) const
Definition SmallVector.h:1022
iterator erase(const_iterator CS, const_iterator CE)
Definition SmallVector.h:795
~SmallVectorImpl()
Definition SmallVector.h:645
void assignRemote(SmallVectorImpl &&RHS)
Definition SmallVector.h:633
reference emplace_back(ArgTypes &&... Args)
Definition SmallVector.h:996
iterator insert(iterator I, T &&Elt)
Definition SmallVector.h:854
SmallVectorImpl(unsigned N)
Definition SmallVector.h:631
iterator erase(const_iterator CI)
Definition SmallVector.h:780
void clear()
Definition SmallVector.h:651
void resize(size_type N, ValueParamT NV)
Definition SmallVector.h:691
void pop_back_n(size_type NumItems)
Definition SmallVector.h:707
typename SuperClass::const_iterator const_iterator
Definition SmallVector.h:622
void append(in_iter in_start, in_iter in_end)
Add the specified range to the end of the SmallVector.
Definition SmallVector.h:725
bool operator==(const SmallVectorImpl &RHS) const
Definition SmallVector.h:1009
SmallVectorTemplateBase(size_t Size)
Definition SmallVector.h:527
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)
Definition SmallVector.h:551
typename std::conditional< TakesParamByValue, T, const T & >::type ValueParamT
Definition SmallVector.h:524
const T * reserveForParamAndGetAddress(const T &Elt, size_t N=1)
Definition SmallVector.h:571
void push_back(ValueParamT Elt)
Definition SmallVector.h:605
void grow(size_t MinSize=0)
Definition SmallVector.h:567
static void uninitialized_copy(It1 I, It1 E, It2 Dest)
Definition SmallVector.h:543
static void uninitialized_move(It1 I, It1 E, It2 Dest)
Definition SmallVector.h:535
void growAndAssign(size_t NumElts, T Elt)
Definition SmallVector.h:585
void pop_back()
Definition SmallVector.h:611
static ValueParamT forward_value_param(ValueParamT V)
Copy V or return a reference, depending on ValueParamT.
Definition SmallVector.h:583
static constexpr bool TakesParamByValue
Definition SmallVector.h:520
static void destroy_range(T *, T *)
Definition SmallVector.h:530
T * reserveForParamAndGetAddress(T &Elt, size_t N=1)
Definition SmallVector.h:577
T & growAndEmplaceBack(ArgTypes &&... Args)
Definition SmallVector.h:596
static void uninitialized_move(It1 I, It1 E, It2 Dest)
Definition SmallVector.h:388
SmallVectorTemplateBase(size_t Size)
Definition SmallVector.h:376
static T && forward_value_param(T &&V)
Definition SmallVector.h:433
static void destroy_range(T *S, T *E)
Definition SmallVector.h:378
T * mallocForGrow(size_t MinSize, size_t &NewCapacity)
Definition SmallVector.h:407
static void uninitialized_copy(It1 I, It1 E, It2 Dest)
Definition SmallVector.h:396
void takeAllocationForGrow(T *NewElts, size_t NewCapacity)
Transfer ownership of the allocation, finishing up grow().
Definition SmallVector.h:500
void push_back(T &&Elt)
Definition SmallVector.h:466
const T & ValueParamT
Definition SmallVector.h:374
void pop_back()
Definition SmallVector.h:472
T & growAndEmplaceBack(ArgTypes &&... Args)
Definition SmallVector.h:447
void moveElementsForGrow(T *NewElts)
Definition SmallVector.h:489
static const T & forward_value_param(const T &V)
Definition SmallVector.h:434
static constexpr bool TakesParamByValue
Definition SmallVector.h:373
void growAndAssign(size_t NumElts, const T &Elt)
Definition SmallVector.h:436
T * reserveForParamAndGetAddress(T &Elt, size_t N=1)
Definition SmallVector.h:428
void push_back(const T &Elt)
Definition SmallVector.h:460
const T * reserveForParamAndGetAddress(const T &Elt, size_t N=1)
Definition SmallVector.h:422
void grow(size_t MinSize=0)
Definition SmallVector.h:480
void assertSafeToReferenceAfterClear(ItTy, ItTy)
Definition SmallVector.h:247
const_reverse_iterator rbegin() const
Definition SmallVector.h:309
SmallVectorTemplateCommon(size_t Size)
Definition SmallVector.h:170
const T & const_reference
Definition SmallVector.h:293
size_t capacity_in_bytes() const
Definition SmallVector.h:322
const_iterator begin() const
Definition SmallVector.h:303
bool isSafeToReferenceAfterResize(const void *Elt, size_t NewSize)
Definition SmallVector.h:212
void assertSafeToReferenceAfterResize(const void *Elt, size_t NewSize)
Check whether Elt will be invalidated by resizing the vector to NewSize.
Definition SmallVector.h:224
bool isRangeInStorage(const void *First, const void *Last) const
Definition SmallVector.h:203
const T * const_iterator
Definition SmallVector.h:287
static const T * reserveForParamAndGetAddressImpl(U *This, const T &Elt, size_t N)
Definition SmallVector.h:264
size_type max_size() const
Definition SmallVector.h:318
size_t size_type
Definition SmallVector.h:283
reference operator[](size_type idx)
Definition SmallVector.h:329
const_pointer data() const
Return a pointer to the vector's buffer, even if empty().
Definition SmallVector.h:327
void resetToSmall()
Put this vector in a state of being small.
Definition SmallVector.h:181
size_t size() const
Definition SmallVector.h:120
reverse_iterator rbegin()
Definition SmallVector.h:308
void assertSafeToReferenceAfterClear(const T *From, const T *To)
Check whether any part of the range will be invalidated by clearing.
Definition SmallVector.h:238
const_reference operator[](size_type idx) const
Definition SmallVector.h:333
const_iterator end() const
Definition SmallVector.h:305
iterator begin()
Definition SmallVector.h:302
reference front()
Definition SmallVector.h:338
reference back()
Definition SmallVector.h:347
T & reference
Definition SmallVector.h:292
LLVM_NODISCARD bool empty() const
Definition SmallVector.h:123
size_t capacity() const
Definition SmallVector.h:121
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition SmallVector.h:289
bool isReferenceToStorage(const void *V) const
Return true if V is an internal reference to this vector.
Definition SmallVector.h:197
pointer data()
Return a pointer to the vector's buffer, even if empty().
Definition SmallVector.h:325
bool isSmall() const
Definition SmallVector.h:178
void grow_pod(size_t MinSize, size_t TSize)
Definition SmallVector.h:172
size_type size_in_bytes() const
Definition SmallVector.h:317
const T * const_pointer
Definition SmallVector.h:295
void assertSafeToAddRange(const T *From, const T *To)
Check whether any part of the range will be invalidated by growing.
Definition SmallVector.h:250
const_reference front() const
Definition SmallVector.h:342
T value_type
Definition SmallVector.h:285
void assertSafeToAdd(const void *Elt, size_t N=1)
Definition SmallVector.h:233
iterator end()
Definition SmallVector.h:304
ptrdiff_t difference_type
Definition SmallVector.h:284
bool isReferenceToRange(const void *V, const void *First, const void *Last) const
Return true if V is an internal reference to the given range.
Definition SmallVector.h:188
T * pointer
Definition SmallVector.h:294
const_reverse_iterator rend() const
Definition SmallVector.h:313
std::reverse_iterator< iterator > reverse_iterator
Definition SmallVector.h:290
T * iterator
Definition SmallVector.h:286
reverse_iterator rend()
Definition SmallVector.h:312
const_reference back() const
Definition SmallVector.h:351
void assertSafeToAddRange(ItTy, ItTy)
Definition SmallVector.h:259
Definition SmallVector.h:84
void * safe_realloc(void *Ptr, size_t Sz)
Definition SmallVector.h:71
typename std::conditional< sizeof(T)< 4 &&sizeof(void *) >=8, uint64_t, uint32_t >::type SmallVectorSizeType
Definition SmallVector.h:137
SmallVector< ValueTypeFromRangeType< R >, Size > to_vector(R &&Range)
Definition SmallVector.h:1353
size_t capacity_in_bytes(const SmallVector< T, N > &X)
Definition SmallVector.h:1340
void * safe_malloc(size_t Sz)
Definition SmallVector.h:59
typename std::remove_const< typename std::remove_reference< decltype( *std::begin(std::declval< RangeType & >()))>::type >::type ValueTypeFromRangeType
Definition SmallVector.h:1345
Definition PinholeCameraIntrinsic.cpp:16
void swap(open3d::core::SmallVectorImpl< T > &LHS, open3d::core::SmallVectorImpl< T > &RHS)
Implement std::swap in terms of SmallVector swap.
Definition SmallVector.h:1371
Definition SmallVector.h:1192
static constexpr size_t value
Definition SmallVector.h:1239
static constexpr size_t kPreferredSmallVectorSizeof
Definition SmallVector.h:1200
static constexpr size_t NumElementsThatFit
Definition SmallVector.h:1237
static constexpr size_t PreferredInlineBytes
Definition SmallVector.h:1235
Figure out the offset of the first element.
Definition SmallVector.h:144
char FirstEl[sizeof(T)]
Definition SmallVector.h:147
char Base[sizeof(SmallVectorBase< SmallVectorSizeType< T > >)]
Definition SmallVector.h:146
Definition SmallVector.h:1170
char InlineElts[N *sizeof(T)]
Definition SmallVector.h:1171