53 #include <initializer_list>
58 #include <type_traits>
67 #ifndef LLVM_NODISCARD
68 #define LLVM_NODISCARD
70 #ifndef LLVM_GSL_OWNER
71 #define LLVM_GSL_OWNER
78 void *Result = std::malloc(Sz);
79 if (Result ==
nullptr) {
84 throw std::bad_alloc();
90 void *Result = std::realloc(Ptr, Sz);
91 if (Result ==
nullptr) {
96 throw std::bad_alloc();
101 template <
typename IteratorT>
112 template <
class Size_T>
120 return std::numeric_limits<Size_T>::max();
130 void *
mallocForGrow(
size_t MinSize,
size_t TSize,
size_t &NewCapacity);
135 void grow_pod(
void *FirstEl,
size_t MinSize,
size_t TSize);
156 typename std::conditional<
sizeof(T) < 4 &&
sizeof(
void *) >= 8,
161 template <
class T,
typename =
void>
171 template <
typename T,
typename =
void>
179 void *getFirstEl()
const {
180 return const_cast<void *
>(
reinterpret_cast<const void *
>(
181 reinterpret_cast<const char *
>(
this) +
200 this->
BeginX = getFirstEl();
208 const void *Last)
const {
210 std::less<> LessThan;
211 return !LessThan(V, First) && LessThan(V, Last);
223 std::less<> LessThan;
224 return !LessThan(First, this->
begin()) && !LessThan(Last, First) &&
225 !LessThan(this->
end(), Last);
235 if (NewSize <= this->
size())
return Elt < this->
begin() + NewSize;
244 "Attempting to reference an element of the vector in an "
246 "that invalidates it");
257 if (From ==
To)
return;
261 template <
class ItTy,
263 !std::is_same<std::remove_const_t<ItTy>, T *>::value,
269 if (From ==
To)
return;
273 template <
class ItTy,
275 !std::is_same<std::remove_const_t<ItTy>, T *>::value,
285 size_t NewSize = This->size() + N;
288 bool ReferencesStorage =
false;
290 if (!U::TakesParamByValue) {
292 ReferencesStorage =
true;
293 Index = &Elt - This->begin();
297 return ReferencesStorage ? This->begin() + Index : &Elt;
348 assert(idx <
size());
352 assert(idx <
size());
383 template <
typename T,
384 bool = (std::is_trivially_copy_constructible<T>::value) &&
385 (std::is_trivially_move_constructible<T>::value) &&
386 std::is_trivially_destructible<T>::value>
405 template <
typename It1,
typename It2>
407 std::uninitialized_copy(std::make_move_iterator(I),
408 std::make_move_iterator(E), Dest);
413 template <
typename It1,
typename It2>
415 std::uninitialized_copy(I, E, Dest);
421 void grow(
size_t MinSize = 0);
426 return static_cast<T *
>(
428 MinSize,
sizeof(T), NewCapacity));
447 return const_cast<T *
>(
458 std::uninitialized_fill_n(NewElts, NumElts, Elt);
464 template <
typename... ArgTypes>
469 ::new ((
void *)(NewElts + this->
size()))
470 T(std::forward<ArgTypes>(Args)...);
480 ::new ((
void *)this->
end()) T(*EltPtr);
486 ::new ((
void *)this->
end()) T(::std::move(*EltPtr));
497 template <
typename T,
bool TriviallyCopyable>
500 T *NewElts = mallocForGrow(MinSize, NewCapacity);
501 moveElementsForGrow(NewElts);
502 takeAllocationForGrow(NewElts, NewCapacity);
506 template <
typename T,
bool TriviallyCopyable>
510 this->uninitialized_move(this->begin(), this->end(), NewElts);
513 destroy_range(this->begin(), this->end());
517 template <
typename T,
bool TriviallyCopyable>
519 T *NewElts,
size_t NewCapacity) {
521 if (!this->isSmall()) free(this->begin());
523 this->BeginX = NewElts;
524 this->Capacity = NewCapacity;
531 template <
typename T>
552 template <
typename It1,
typename It2>
560 template <
typename It1,
typename It2>
563 std::uninitialized_copy(I, E, Dest);
568 template <
typename T1,
typename T2>
574 T2>::value> * =
nullptr) {
580 memcpy(
reinterpret_cast<void *
>(Dest), I, (E - I) *
sizeof(T));
596 return const_cast<T *
>(
609 std::uninitialized_fill_n(this->
begin(), NumElts, Elt);
613 template <
typename... ArgTypes>
618 push_back(T(std::forward<ArgTypes>(Args)...));
625 memcpy(
reinterpret_cast<void *
>(this->
end()), EltPtr,
sizeof(T));
634 template <
typename T>
654 this->
BeginX = RHS.BeginX;
655 this->
Size = RHS.Size;
678 template <
bool ForOverwrite>
680 if (N == this->
size())
return;
682 if (N < this->
size()) {
688 for (
auto I = this->
end(), E = this->
begin() + N; I != E; ++I)
704 assert(this->
size() >= N &&
"Cannot increase size with truncate");
710 if (N == this->
size())
return;
712 if (N < this->
size()) {
726 assert(this->
size() >= NumItems);
731 T Result = ::std::move(this->
back());
739 template <
typename in_iter,
740 typename = std::enable_if_t<std::is_convertible<
741 typename std::iterator_traits<in_iter>::iterator_category,
742 std::input_iterator_tag>::value>>
743 void append(in_iter in_start, in_iter in_end) {
745 size_type NumInputs = std::distance(in_start, in_end);
754 std::uninitialized_fill_n(this->
end(), NumInputs, *EltPtr);
758 void append(std::initializer_list<T> IL) {
append(IL.begin(), IL.end()); }
770 std::fill_n(this->
begin(), std::min(NumElts, this->
size()), Elt);
771 if (NumElts > this->
size())
772 std::uninitialized_fill_n(this->
end(), NumElts - this->
size(), Elt);
773 else if (NumElts < this->
size())
781 template <
typename in_iter,
782 typename = std::enable_if_t<std::is_convertible<
783 typename std::iterator_traits<in_iter>::iterator_category,
784 std::input_iterator_tag>::value>>
785 void assign(in_iter in_start, in_iter in_end) {
791 void assign(std::initializer_list<T> IL) {
803 "Iterator to erase is out of bounds.");
807 std::move(I + 1, this->
end(), I);
819 "Range to erase is out of bounds.");
831 template <
class ArgType>
836 std::remove_const_t<std::remove_reference_t<ArgType>>,
838 "ArgType must be derived from T!");
840 if (I == this->
end()) {
841 this->
push_back(::std::forward<ArgType>(Elt));
842 return this->
end() - 1;
846 "Insertion iterator is out of bounds.");
849 size_t Index = I - this->
begin();
850 std::remove_reference_t<ArgType> *EltPtr =
852 I = this->
begin() + Index;
854 ::new ((
void *)this->
end()) T(::
std::move(this->
back()));
856 std::move_backward(I, this->
end() - 1, this->
end());
862 "ArgType must be 'T' when taking by value!");
867 *I = ::
std::forward<ArgType>(*EltPtr);
883 size_t InsertElt = I - this->
begin();
885 if (I == this->
end()) {
887 return this->
begin() + InsertElt;
891 "Insertion iterator is out of bounds.");
898 I = this->
begin() + InsertElt;
904 if (
size_t(this->
end() - I) >= NumToInsert) {
905 T *OldEnd = this->
end();
906 append(std::move_iterator<iterator>(this->
end() - NumToInsert),
907 std::move_iterator<iterator>(this->
end()));
910 std::move_backward(I, OldEnd - NumToInsert, OldEnd);
915 EltPtr += NumToInsert;
917 std::fill_n(I, NumToInsert, *EltPtr);
925 T *OldEnd = this->
end();
927 size_t NumOverwritten = OldEnd - I;
933 EltPtr += NumToInsert;
936 std::fill_n(I, NumOverwritten, *EltPtr);
939 std::uninitialized_fill_n(OldEnd, NumToInsert - NumOverwritten,
944 template <
typename ItTy,
945 typename = std::enable_if_t<std::is_convertible<
946 typename std::iterator_traits<ItTy>::iterator_category,
947 std::input_iterator_tag>::value>>
951 size_t InsertElt = I - this->
begin();
953 if (I == this->
end()) {
955 return this->
begin() + InsertElt;
959 "Insertion iterator is out of bounds.");
964 size_t NumToInsert = std::distance(From,
To);
970 I = this->
begin() + InsertElt;
976 if (
size_t(this->
end() - I) >= NumToInsert) {
977 T *OldEnd = this->
end();
978 append(std::move_iterator<iterator>(this->
end() - NumToInsert),
979 std::move_iterator<iterator>(this->
end()));
982 std::move_backward(I, OldEnd - NumToInsert, OldEnd);
992 T *OldEnd = this->
end();
994 size_t NumOverwritten = OldEnd - I;
998 for (T *J = I; NumOverwritten > 0; --NumOverwritten) {
1010 insert(I, IL.begin(), IL.end());
1013 template <
typename... ArgTypes>
1018 ::new ((
void *)this->
end()) T(std::forward<ArgTypes>(Args)...);
1020 return this->
back();
1028 if (this->
size() != RHS.
size())
return false;
1032 return !(*
this == RHS);
1036 return std::lexicographical_compare(this->
begin(), this->
end(),
1044 template <
typename T>
1046 if (
this == &RHS)
return;
1059 size_t NumShared = this->
size();
1060 if (NumShared > RHS.
size()) NumShared = RHS.
size();
1065 size_t EltDiff = this->
size() - RHS.
size();
1071 }
else if (RHS.
size() > this->size()) {
1072 size_t EltDiff = RHS.
size() - this->
size();
1081 template <
typename T>
1085 if (
this == &RHS)
return *
this;
1089 size_t RHSSize = RHS.
size();
1090 size_t CurSize = this->
size();
1091 if (CurSize >= RHSSize) {
1098 NewEnd = this->
begin();
1115 this->
grow(RHSSize);
1116 }
else if (CurSize) {
1123 this->begin() + CurSize);
1130 template <
typename T>
1133 if (
this == &RHS)
return *
this;
1136 if (!RHS.isSmall()) {
1143 size_t RHSSize = RHS.size();
1144 size_t CurSize = this->
size();
1145 if (CurSize >= RHSSize) {
1148 if (RHSSize) NewEnd = std::move(RHS.begin(), RHS.end(), NewEnd);
1168 this->
grow(RHSSize);
1169 }
else if (CurSize) {
1171 std::move(RHS.begin(), RHS.begin() + CurSize, this->begin());
1176 this->begin() + CurSize);
1187 template <
typename T,
unsigned N>
1189 alignas(T)
char InlineElts[N *
sizeof(T)];
1195 template <
typename T>
1201 template <
typename T,
unsigned N>
1209 template <
typename T>
1218 static constexpr
size_t kPreferredSmallVectorSizeof = 64;
1245 "You are trying to use a default number of inlined elements for "
1246 "`SmallVector<T>` but `sizeof(T)` is really big! Please use an "
1247 "explicit number of inlined elements with `SmallVector<T, N>` to "
1249 "sure you really want that much inline storage.");
1253 static constexpr
size_t PreferredInlineBytes =
1255 static constexpr
size_t NumElementsThatFit =
1256 PreferredInlineBytes /
sizeof(T);
1257 static constexpr
size_t value =
1258 NumElementsThatFit == 0 ? 1 : NumElementsThatFit;
1277 template <
typename T,
1291 this->
assign(Size, Value);
1294 template <
typename ItTy,
1295 typename = std::enable_if_t<std::is_convertible<
1296 typename std::iterator_traits<ItTy>::iterator_category,
1297 std::input_iterator_tag>::value>>
1302 template <
typename RangeTy>
1305 this->
append(R.begin(), R.end());
1336 if (
this == &RHS)
return *
this;
1357 template <
typename T,
unsigned N>
1359 return X.capacity_in_bytes();
1362 template <
typename RangeType>
1364 typename std::remove_const<
typename std::remove_reference<decltype(
1365 *std::begin(std::declval<RangeType &>()))>
::type>
::type;
1370 template <
unsigned Size,
typename R>
1372 return {std::begin(Range), std::end(Range)};
1374 template <
typename R>
1375 SmallVector<ValueTypeFromRangeType<R>,
1376 CalculateSmallVectorDefaultInlinedElements<
1377 ValueTypeFromRangeType<R>>::value>
1379 return {std::begin(Range), std::end(Range)};
1388 template <
typename T>
1395 template <
typename T,
unsigned N>
void * X
Definition: SmallVector.cpp:64
#define LLVM_LIKELY
Definition: SmallVector.h:62
#define LLVM_GSL_OWNER
Definition: SmallVector.h:71
#define LLVM_NODISCARD
Definition: SmallVector.h:68
#define LLVM_UNLIKELY
Definition: SmallVector.h:65
bool copy
Definition: VtkUtils.cpp:89
Definition: SmallVector.h:113
LLVM_NODISCARD bool empty() const
Definition: SmallVector.h:141
size_t capacity() const
Definition: SmallVector.h:139
size_t size() const
Definition: SmallVector.h:138
static constexpr size_t SizeTypeMax()
The maximum value of the Size_T used.
Definition: SmallVector.h:119
SmallVectorBase(void *FirstEl, size_t TotalCapacity)
Definition: SmallVector.h:124
void * BeginX
Definition: SmallVector.h:115
Size_T Capacity
Definition: SmallVector.h:116
void * mallocForGrow(size_t MinSize, size_t TSize, size_t &NewCapacity)
Definition: SmallVector.cpp:144
void set_size(size_t N)
Definition: SmallVector.h:148
Size_T Size
Definition: SmallVector.h:116
void grow_pod(void *FirstEl, size_t MinSize, size_t TSize)
Definition: SmallVector.cpp:153
Definition: SmallVector.h:1280
SmallVector(size_t Size, const T &Value=T())
Definition: SmallVector.h:1289
SmallVector & operator=(SmallVector &&RHS)
Definition: SmallVector.h:1329
SmallVector & operator=(SmallVectorImpl< T > &&RHS)
Definition: SmallVector.h:1346
SmallVector(const SmallVector &RHS)
Definition: SmallVector.h:1312
SmallVector(SmallVectorImpl< T > &&RHS)
Definition: SmallVector.h:1325
SmallVector()
Definition: SmallVector.h:1282
~SmallVector()
Definition: SmallVector.h:1284
SmallVector(const iterator_range< RangeTy > &R)
Definition: SmallVector.h:1303
SmallVector(std::initializer_list< T > IL)
Definition: SmallVector.h:1308
SmallVector & operator=(const SmallVector &RHS)
Definition: SmallVector.h:1316
SmallVector & operator=(std::initializer_list< T > IL)
Definition: SmallVector.h:1351
SmallVector(SmallVector &&RHS)
Definition: SmallVector.h:1321
SmallVector(ItTy S, ItTy E)
Definition: SmallVector.h:1298
Definition: SmallVector.h:635
LLVM_NODISCARD T pop_back_val()
Definition: SmallVector.h:730
bool operator<(const SmallVectorImpl &RHS) const
Definition: SmallVector.h:1035
void resize_for_overwrite(size_type N)
Like resize, but T is POD, the new values won't be initialized.
Definition: SmallVector.h:700
void swap(SmallVectorImpl &RHS)
Definition: SmallVector.h:1045
void assign(const SmallVectorImpl &RHS)
Definition: SmallVector.h:796
void resize(size_type N)
Definition: SmallVector.h:697
typename SuperClass::iterator iterator
Definition: SmallVector.h:639
iterator insert(iterator I, size_type NumToInsert, ValueParamT Elt)
Definition: SmallVector.h:880
SmallVectorImpl(const SmallVectorImpl &)=delete
void assign(in_iter in_start, in_iter in_end)
Definition: SmallVector.h:785
iterator insert(iterator I, ItTy From, ItTy To)
Definition: SmallVector.h:948
void append(std::initializer_list< T > IL)
Definition: SmallVector.h:758
void insert(iterator I, std::initializer_list< T > IL)
Definition: SmallVector.h:1009
SmallVectorImpl & operator=(const SmallVectorImpl &RHS)
Definition: SmallVector.h:1082
void append(size_type NumInputs, ValueParamT Elt)
Append NumInputs copies of Elt to the end.
Definition: SmallVector.h:752
void truncate(size_type N)
Like resize, but requires that N is less than size().
Definition: SmallVector.h:703
void reserve(size_type N)
Definition: SmallVector.h:721
bool operator!=(const SmallVectorImpl &RHS) const
Definition: SmallVector.h:1031
iterator insert(iterator I, const T &Elt)
Definition: SmallVector.h:876
bool operator>(const SmallVectorImpl &RHS) const
Definition: SmallVector.h:1039
void assign(size_type NumElts, ValueParamT Elt)
Definition: SmallVector.h:762
void append(const SmallVectorImpl &RHS)
Definition: SmallVector.h:760
typename SuperClass::size_type size_type
Definition: SmallVector.h:642
bool operator>=(const SmallVectorImpl &RHS) const
Definition: SmallVector.h:1041
void assign(std::initializer_list< T > IL)
Definition: SmallVector.h:791
bool operator<=(const SmallVectorImpl &RHS) const
Definition: SmallVector.h:1040
iterator erase(const_iterator CS, const_iterator CE)
Definition: SmallVector.h:813
~SmallVectorImpl()
Definition: SmallVector.h:663
void assignRemote(SmallVectorImpl &&RHS)
Definition: SmallVector.h:651
reference emplace_back(ArgTypes &&... Args)
Definition: SmallVector.h:1014
iterator insert(iterator I, T &&Elt)
Definition: SmallVector.h:872
SmallVectorImpl(unsigned N)
Definition: SmallVector.h:649
iterator erase(const_iterator CI)
Definition: SmallVector.h:798
void clear()
Definition: SmallVector.h:669
void resize(size_type N, ValueParamT NV)
Definition: SmallVector.h:709
void pop_back_n(size_type NumItems)
Definition: SmallVector.h:725
void append(in_iter in_start, in_iter in_end)
Add the specified range to the end of the SmallVector.
Definition: SmallVector.h:743
bool operator==(const SmallVectorImpl &RHS) const
Definition: SmallVector.h:1027
typename std::conditional< TakesParamByValue, T, const T & >::type ValueParamT
Definition: SmallVector.h:543
SmallVectorTemplateBase(size_t Size)
Definition: SmallVector.h:545
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:569
T * reserveForParamAndGetAddress(T &Elt, size_t N=1)
Definition: SmallVector.h:595
void push_back(ValueParamT Elt)
Definition: SmallVector.h:623
const T * reserveForParamAndGetAddress(const T &Elt, size_t N=1)
Definition: SmallVector.h:589
void grow(size_t MinSize=0)
Definition: SmallVector.h:585
static void uninitialized_copy(It1 I, It1 E, It2 Dest)
Definition: SmallVector.h:561
static void uninitialized_move(It1 I, It1 E, It2 Dest)
Definition: SmallVector.h:553
void growAndAssign(size_t NumElts, T Elt)
Definition: SmallVector.h:603
void pop_back()
Definition: SmallVector.h:629
static ValueParamT forward_value_param(ValueParamT V)
Copy V or return a reference, depending on ValueParamT.
Definition: SmallVector.h:601
T & growAndEmplaceBack(ArgTypes &&... Args)
Definition: SmallVector.h:614
static void destroy_range(T *, T *)
Definition: SmallVector.h:548
Definition: SmallVector.h:387
static void uninitialized_move(It1 I, It1 E, It2 Dest)
Definition: SmallVector.h:406
SmallVectorTemplateBase(size_t Size)
Definition: SmallVector.h:394
static void destroy_range(T *S, T *E)
Definition: SmallVector.h:396
static void uninitialized_copy(It1 I, It1 E, It2 Dest)
Definition: SmallVector.h:414
T & growAndEmplaceBack(ArgTypes &&... Args)
Definition: SmallVector.h:465
void takeAllocationForGrow(T *NewElts, size_t NewCapacity)
Transfer ownership of the allocation, finishing up grow().
Definition: SmallVector.h:518
void push_back(T &&Elt)
Definition: SmallVector.h:484
T * mallocForGrow(size_t MinSize, size_t &NewCapacity)
Definition: SmallVector.h:425
const T & ValueParamT
Definition: SmallVector.h:392
void pop_back()
Definition: SmallVector.h:490
void moveElementsForGrow(T *NewElts)
Definition: SmallVector.h:507
static constexpr bool TakesParamByValue
Definition: SmallVector.h:391
void growAndAssign(size_t NumElts, const T &Elt)
Definition: SmallVector.h:454
static const T & forward_value_param(const T &V)
Definition: SmallVector.h:452
const T * reserveForParamAndGetAddress(const T &Elt, size_t N=1)
Definition: SmallVector.h:440
static T && forward_value_param(T &&V)
Definition: SmallVector.h:451
void push_back(const T &Elt)
Definition: SmallVector.h:478
T * reserveForParamAndGetAddress(T &Elt, size_t N=1)
Definition: SmallVector.h:446
void grow(size_t MinSize=0)
Definition: SmallVector.h:498
Definition: SmallVector.h:173
void assertSafeToReferenceAfterClear(ItTy, ItTy)
Definition: SmallVector.h:265
const_reverse_iterator rbegin() const
Definition: SmallVector.h:327
SmallVectorTemplateCommon(size_t Size)
Definition: SmallVector.h:188
const T & const_reference
Definition: SmallVector.h:311
size_t capacity_in_bytes() const
Definition: SmallVector.h:340
const_iterator begin() const
Definition: SmallVector.h:321
bool isSafeToReferenceAfterResize(const void *Elt, size_t NewSize)
Definition: SmallVector.h:230
void assertSafeToReferenceAfterResize(const void *Elt, size_t NewSize)
Check whether Elt will be invalidated by resizing the vector to NewSize.
Definition: SmallVector.h:242
bool isRangeInStorage(const void *First, const void *Last) const
Definition: SmallVector.h:221
const T * const_iterator
Definition: SmallVector.h:305
size_type max_size() const
Definition: SmallVector.h:336
size_t size_type
Definition: SmallVector.h:301
reference operator[](size_type idx)
Definition: SmallVector.h:347
const_pointer data() const
Return a pointer to the vector's buffer, even if empty().
Definition: SmallVector.h:345
void resetToSmall()
Put this vector in a state of being small.
Definition: SmallVector.h:199
reverse_iterator rbegin()
Definition: SmallVector.h:326
static const T * reserveForParamAndGetAddressImpl(U *This, const T &Elt, size_t N)
Definition: SmallVector.h:282
void assertSafeToReferenceAfterClear(const T *From, const T *To)
Check whether any part of the range will be invalidated by clearing.
Definition: SmallVector.h:256
const_reference operator[](size_type idx) const
Definition: SmallVector.h:351
const_iterator end() const
Definition: SmallVector.h:323
iterator begin()
Definition: SmallVector.h:320
reference front()
Definition: SmallVector.h:356
reference back()
Definition: SmallVector.h:365
T & reference
Definition: SmallVector.h:310
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: SmallVector.h:307
bool isReferenceToStorage(const void *V) const
Return true if V is an internal reference to this vector.
Definition: SmallVector.h:215
pointer data()
Return a pointer to the vector's buffer, even if empty().
Definition: SmallVector.h:343
bool isSmall() const
Definition: SmallVector.h:196
void grow_pod(size_t MinSize, size_t TSize)
Definition: SmallVector.h:190
size_type size_in_bytes() const
Definition: SmallVector.h:335
const T * const_pointer
Definition: SmallVector.h:313
void assertSafeToAddRange(const T *From, const T *To)
Check whether any part of the range will be invalidated by growing.
Definition: SmallVector.h:268
const_reference front() const
Definition: SmallVector.h:360
T value_type
Definition: SmallVector.h:303
void assertSafeToAdd(const void *Elt, size_t N=1)
Definition: SmallVector.h:251
iterator end()
Definition: SmallVector.h:322
ptrdiff_t difference_type
Definition: SmallVector.h:302
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:206
T * pointer
Definition: SmallVector.h:312
const_reverse_iterator rend() const
Definition: SmallVector.h:331
std::reverse_iterator< iterator > reverse_iterator
Definition: SmallVector.h:308
T * iterator
Definition: SmallVector.h:304
reverse_iterator rend()
Definition: SmallVector.h:330
const_reference back() const
Definition: SmallVector.h:369
void assertSafeToAddRange(ItTy, ItTy)
Definition: SmallVector.h:277
Definition: SmallVector.h:102
typename std::remove_const< typename std::remove_reference< decltype(*std::begin(std::declval< RangeType & >()))>::type >::type ValueTypeFromRangeType
Definition: SmallVector.h:1365
void * safe_realloc(void *Ptr, size_t Sz)
Definition: SmallVector.h:89
typename std::conditional< sizeof(T)< 4 &&sizeof(void *) >=8, uint64_t, uint32_t >::type SmallVectorSizeType
Definition: SmallVector.h:158
void * safe_malloc(size_t Sz)
Definition: SmallVector.h:77
SmallVector< ValueTypeFromRangeType< R >, Size > to_vector(R &&Range)
Definition: SmallVector.h:1371
const char const char value recording_handle imu_sample recording_handle uint8_t size_t data_size k4a_record_configuration_t config target_format k4a_capture_t capture_handle k4a_imu_sample_t imu_sample playback_handle k4a_logging_message_cb_t void min_level device_handle k4a_imu_sample_t timeout_in_ms capture_handle capture_handle capture_handle image_handle temperature_c k4a_image_t image_handle uint8_t image_handle image_handle image_handle image_handle uint32_t
Definition: K4aPlugin.cpp:567
const char const char value recording_handle imu_sample recording_handle uint8_t size_t data_size k4a_record_configuration_t config target_format k4a_capture_t capture_handle k4a_imu_sample_t imu_sample playback_handle k4a_logging_message_cb_t void min_level device_handle k4a_imu_sample_t timeout_in_ms capture_handle capture_handle capture_handle image_handle temperature_c k4a_image_t image_handle uint8_t image_handle image_handle image_handle image_handle image_handle timestamp_usec white_balance image_handle k4a_device_configuration_t config device_handle char size_t serial_number_size bool int32_t int32_t int32_t int32_t k4a_color_control_mode_t default_mode value const const k4a_calibration_t calibration char size_t
Definition: K4aPlugin.cpp:738
const char const char value recording_handle imu_sample recording_handle uint8_t size_t data_size k4a_record_configuration_t config target_format k4a_capture_t capture_handle k4a_imu_sample_t imu_sample uint64_t
Definition: K4aPlugin.cpp:362
void To(const core::Tensor &src, core::Tensor &dst, double scale, double offset)
Definition: Image.cpp:36
Definition: PinholeCameraIntrinsic.cpp:35
void swap(open3d::core::SmallVector< T, N > &LHS, open3d::core::SmallVector< T, N > &RHS)
Implement std::swap in terms of SmallVector swap.
Definition: SmallVector.h:1396
void swap(open3d::core::SmallVectorImpl< T > &LHS, open3d::core::SmallVectorImpl< T > &RHS)
Implement std::swap in terms of SmallVector swap.
Definition: SmallVector.h:1389
Definition: SmallVector.h:1210
Figure out the offset of the first element.
Definition: SmallVector.h:162
char FirstEl[sizeof(T)]
Definition: SmallVector.h:165
char Base[sizeof(SmallVectorBase< SmallVectorSizeType< T >>)]
Definition: SmallVector.h:164
Definition: SmallVector.h:1188