34 #include <initializer_list>
39 #include <type_traits>
48 #ifndef LLVM_NODISCARD
49 #define LLVM_NODISCARD
51 #ifndef LLVM_GSL_OWNER
52 #define LLVM_GSL_OWNER
59 void *Result = std::malloc(Sz);
60 if (Result ==
nullptr) {
65 throw std::bad_alloc();
71 void *Result = std::realloc(Ptr, Sz);
72 if (Result ==
nullptr) {
77 throw std::bad_alloc();
82 template <
typename IteratorT>
93 template <
class Size_T>
101 return std::numeric_limits<Size_T>::max();
111 void *
mallocForGrow(
size_t MinSize,
size_t TSize,
size_t &NewCapacity);
116 void grow_pod(
void *FirstEl,
size_t MinSize,
size_t TSize);
137 typename std::conditional<
sizeof(T) < 4 &&
sizeof(
void *) >= 8,
142 template <
class T,
typename =
void>
152 template <
typename T,
typename =
void>
160 void *getFirstEl()
const {
161 return const_cast<void *
>(
reinterpret_cast<const void *
>(
162 reinterpret_cast<const char *
>(
this) +
181 this->
BeginX = getFirstEl();
189 const void *Last)
const {
191 std::less<> LessThan;
192 return !LessThan(V, First) && LessThan(V, Last);
204 std::less<> LessThan;
205 return !LessThan(First, this->
begin()) && !LessThan(Last, First) &&
206 !LessThan(this->
end(), Last);
216 if (NewSize <= this->
size())
return Elt < this->
begin() + NewSize;
225 "Attempting to reference an element of the vector in an "
227 "that invalidates it");
238 if (From ==
To)
return;
242 template <
class ItTy,
244 !std::is_same<std::remove_const_t<ItTy>, T *>::value,
250 if (From ==
To)
return;
254 template <
class ItTy,
256 !std::is_same<std::remove_const_t<ItTy>, T *>::value,
266 size_t NewSize = This->size() + N;
269 bool ReferencesStorage =
false;
271 if (!U::TakesParamByValue) {
273 ReferencesStorage =
true;
274 Index = &Elt - This->begin();
278 return ReferencesStorage ? This->begin() + Index : &Elt;
329 assert(idx <
size());
333 assert(idx <
size());
364 template <
typename T,
365 bool = (std::is_trivially_copy_constructible<T>::value) &&
366 (std::is_trivially_move_constructible<T>::value) &&
367 std::is_trivially_destructible<T>::value>
386 template <
typename It1,
typename It2>
388 std::uninitialized_copy(std::make_move_iterator(I),
389 std::make_move_iterator(E), Dest);
394 template <
typename It1,
typename It2>
396 std::uninitialized_copy(I, E, Dest);
402 void grow(
size_t MinSize = 0);
407 return static_cast<T *
>(
409 MinSize,
sizeof(T), NewCapacity));
428 return const_cast<T *
>(
439 std::uninitialized_fill_n(NewElts, NumElts, Elt);
445 template <
typename... ArgTypes>
450 ::new ((
void *)(NewElts + this->
size()))
451 T(std::forward<ArgTypes>(Args)...);
461 ::new ((
void *)this->
end()) T(*EltPtr);
467 ::new ((
void *)this->
end()) T(::std::move(*EltPtr));
478 template <
typename T,
bool TriviallyCopyable>
481 T *NewElts = mallocForGrow(MinSize, NewCapacity);
482 moveElementsForGrow(NewElts);
483 takeAllocationForGrow(NewElts, NewCapacity);
487 template <
typename T,
bool TriviallyCopyable>
491 this->uninitialized_move(this->begin(), this->end(), NewElts);
494 destroy_range(this->begin(), this->end());
498 template <
typename T,
bool TriviallyCopyable>
500 T *NewElts,
size_t NewCapacity) {
502 if (!this->isSmall()) free(this->begin());
504 this->BeginX = NewElts;
505 this->Capacity = NewCapacity;
512 template <
typename T>
533 template <
typename It1,
typename It2>
541 template <
typename It1,
typename It2>
544 std::uninitialized_copy(I, E, Dest);
549 template <
typename T1,
typename T2>
555 T2>::value> * =
nullptr) {
561 memcpy(
reinterpret_cast<void *
>(Dest), I, (E - I) *
sizeof(T));
577 return const_cast<T *
>(
590 std::uninitialized_fill_n(this->
begin(), NumElts, Elt);
594 template <
typename... ArgTypes>
599 push_back(T(std::forward<ArgTypes>(Args)...));
606 memcpy(
reinterpret_cast<void *
>(this->
end()), EltPtr,
sizeof(T));
615 template <
typename T>
635 this->
BeginX = RHS.BeginX;
636 this->
Size = RHS.Size;
659 template <
bool ForOverwrite>
661 if (N == this->
size())
return;
663 if (N < this->
size()) {
669 for (
auto I = this->
end(), E = this->
begin() + N; I != E; ++I)
685 assert(this->
size() >= N &&
"Cannot increase size with truncate");
691 if (N == this->
size())
return;
693 if (N < this->
size()) {
707 assert(this->
size() >= NumItems);
712 T Result = ::std::move(this->
back());
720 template <
typename in_iter,
721 typename = std::enable_if_t<std::is_convertible<
722 typename std::iterator_traits<in_iter>::iterator_category,
723 std::input_iterator_tag>::value>>
724 void append(in_iter in_start, in_iter in_end) {
726 size_type NumInputs = std::distance(in_start, in_end);
735 std::uninitialized_fill_n(this->
end(), NumInputs, *EltPtr);
739 void append(std::initializer_list<T> IL) {
append(IL.begin(), IL.end()); }
751 std::fill_n(this->
begin(), std::min(NumElts, this->
size()), Elt);
752 if (NumElts > this->
size())
753 std::uninitialized_fill_n(this->
end(), NumElts - this->
size(), Elt);
754 else if (NumElts < this->
size())
762 template <
typename in_iter,
763 typename = std::enable_if_t<std::is_convertible<
764 typename std::iterator_traits<in_iter>::iterator_category,
765 std::input_iterator_tag>::value>>
766 void assign(in_iter in_start, in_iter in_end) {
772 void assign(std::initializer_list<T> IL) {
784 "Iterator to erase is out of bounds.");
788 std::move(I + 1, this->
end(), I);
800 "Range to erase is out of bounds.");
812 template <
class ArgType>
817 std::remove_const_t<std::remove_reference_t<ArgType>>,
819 "ArgType must be derived from T!");
821 if (I == this->
end()) {
822 this->
push_back(::std::forward<ArgType>(Elt));
823 return this->
end() - 1;
827 "Insertion iterator is out of bounds.");
830 size_t Index = I - this->
begin();
831 std::remove_reference_t<ArgType> *EltPtr =
833 I = this->
begin() + Index;
835 ::new ((
void *)this->
end()) T(::
std::move(this->
back()));
837 std::move_backward(I, this->
end() - 1, this->
end());
843 "ArgType must be 'T' when taking by value!");
848 *I = ::
std::forward<ArgType>(*EltPtr);
864 size_t InsertElt = I - this->
begin();
866 if (I == this->
end()) {
868 return this->
begin() + InsertElt;
872 "Insertion iterator is out of bounds.");
879 I = this->
begin() + InsertElt;
885 if (
size_t(this->
end() - I) >= NumToInsert) {
886 T *OldEnd = this->
end();
887 append(std::move_iterator<iterator>(this->
end() - NumToInsert),
888 std::move_iterator<iterator>(this->
end()));
891 std::move_backward(I, OldEnd - NumToInsert, OldEnd);
896 EltPtr += NumToInsert;
898 std::fill_n(I, NumToInsert, *EltPtr);
906 T *OldEnd = this->
end();
908 size_t NumOverwritten = OldEnd - I;
914 EltPtr += NumToInsert;
917 std::fill_n(I, NumOverwritten, *EltPtr);
920 std::uninitialized_fill_n(OldEnd, NumToInsert - NumOverwritten,
925 template <
typename ItTy,
926 typename = std::enable_if_t<std::is_convertible<
927 typename std::iterator_traits<ItTy>::iterator_category,
928 std::input_iterator_tag>::value>>
932 size_t InsertElt = I - this->
begin();
934 if (I == this->
end()) {
936 return this->
begin() + InsertElt;
940 "Insertion iterator is out of bounds.");
945 size_t NumToInsert = std::distance(From,
To);
951 I = this->
begin() + InsertElt;
957 if (
size_t(this->
end() - I) >= NumToInsert) {
958 T *OldEnd = this->
end();
959 append(std::move_iterator<iterator>(this->
end() - NumToInsert),
960 std::move_iterator<iterator>(this->
end()));
963 std::move_backward(I, OldEnd - NumToInsert, OldEnd);
973 T *OldEnd = this->
end();
975 size_t NumOverwritten = OldEnd - I;
979 for (T *J = I; NumOverwritten > 0; --NumOverwritten) {
991 insert(I, IL.begin(), IL.end());
994 template <
typename... ArgTypes>
999 ::new ((
void *)this->
end()) T(std::forward<ArgTypes>(Args)...);
1001 return this->
back();
1009 if (this->
size() != RHS.
size())
return false;
1013 return !(*
this == RHS);
1017 return std::lexicographical_compare(this->
begin(), this->
end(),
1025 template <
typename T>
1027 if (
this == &RHS)
return;
1040 size_t NumShared = this->
size();
1041 if (NumShared > RHS.
size()) NumShared = RHS.
size();
1046 size_t EltDiff = this->
size() - RHS.
size();
1052 }
else if (RHS.
size() > this->size()) {
1053 size_t EltDiff = RHS.
size() - this->
size();
1062 template <
typename T>
1066 if (
this == &RHS)
return *
this;
1070 size_t RHSSize = RHS.
size();
1071 size_t CurSize = this->
size();
1072 if (CurSize >= RHSSize) {
1079 NewEnd = this->
begin();
1096 this->
grow(RHSSize);
1097 }
else if (CurSize) {
1104 this->begin() + CurSize);
1111 template <
typename T>
1114 if (
this == &RHS)
return *
this;
1117 if (!RHS.isSmall()) {
1124 size_t RHSSize = RHS.size();
1125 size_t CurSize = this->
size();
1126 if (CurSize >= RHSSize) {
1129 if (RHSSize) NewEnd = std::move(RHS.begin(), RHS.end(), NewEnd);
1149 this->
grow(RHSSize);
1150 }
else if (CurSize) {
1152 std::move(RHS.begin(), RHS.begin() + CurSize, this->begin());
1157 this->begin() + CurSize);
1168 template <
typename T,
unsigned N>
1170 alignas(T)
char InlineElts[N *
sizeof(T)];
1176 template <
typename T>
1182 template <
typename T,
unsigned N>
1190 template <
typename T>
1199 static constexpr
size_t kPreferredSmallVectorSizeof = 64;
1226 "You are trying to use a default number of inlined elements for "
1227 "`SmallVector<T>` but `sizeof(T)` is really big! Please use an "
1228 "explicit number of inlined elements with `SmallVector<T, N>` to "
1230 "sure you really want that much inline storage.");
1234 static constexpr
size_t PreferredInlineBytes =
1236 static constexpr
size_t NumElementsThatFit =
1237 PreferredInlineBytes /
sizeof(T);
1238 static constexpr
size_t value =
1239 NumElementsThatFit == 0 ? 1 : NumElementsThatFit;
1258 template <
typename T,
1272 this->
assign(Size, Value);
1275 template <
typename ItTy,
1276 typename = std::enable_if_t<std::is_convertible<
1277 typename std::iterator_traits<ItTy>::iterator_category,
1278 std::input_iterator_tag>::value>>
1283 template <
typename RangeTy>
1286 this->
append(R.begin(), R.end());
1317 if (
this == &RHS)
return *
this;
1338 template <
typename T,
unsigned N>
1340 return X.capacity_in_bytes();
1343 template <
typename RangeType>
1345 typename std::remove_const<
typename std::remove_reference<decltype(
1346 *std::begin(std::declval<RangeType &>()))>
::type>
::type;
1351 template <
unsigned Size,
typename R>
1353 return {std::begin(Range), std::end(Range)};
1355 template <
typename R>
1356 SmallVector<ValueTypeFromRangeType<R>,
1357 CalculateSmallVectorDefaultInlinedElements<
1358 ValueTypeFromRangeType<R>>::value>
1360 return {std::begin(Range), std::end(Range)};
1369 template <
typename T>
1376 template <
typename T,
unsigned N>
void * X
Definition: SmallVector.cpp:45
#define LLVM_LIKELY
Definition: SmallVector.h:43
#define LLVM_GSL_OWNER
Definition: SmallVector.h:52
#define LLVM_NODISCARD
Definition: SmallVector.h:49
#define LLVM_UNLIKELY
Definition: SmallVector.h:46
bool copy
Definition: VtkUtils.cpp:73
Definition: SmallVector.h:94
LLVM_NODISCARD bool empty() const
Definition: SmallVector.h:122
size_t capacity() const
Definition: SmallVector.h:120
size_t size() const
Definition: SmallVector.h:119
static constexpr size_t SizeTypeMax()
The maximum value of the Size_T used.
Definition: SmallVector.h:100
SmallVectorBase(void *FirstEl, size_t TotalCapacity)
Definition: SmallVector.h:105
void * BeginX
Definition: SmallVector.h:96
Size_T Capacity
Definition: SmallVector.h:97
void * mallocForGrow(size_t MinSize, size_t TSize, size_t &NewCapacity)
Definition: SmallVector.cpp:125
void set_size(size_t N)
Definition: SmallVector.h:129
Size_T Size
Definition: SmallVector.h:97
void grow_pod(void *FirstEl, size_t MinSize, size_t TSize)
Definition: SmallVector.cpp:134
Definition: SmallVector.h:1261
SmallVector(size_t Size, const T &Value=T())
Definition: SmallVector.h:1270
SmallVector & operator=(SmallVector &&RHS)
Definition: SmallVector.h:1310
SmallVector & operator=(SmallVectorImpl< T > &&RHS)
Definition: SmallVector.h:1327
SmallVector(const SmallVector &RHS)
Definition: SmallVector.h:1293
SmallVector(SmallVectorImpl< T > &&RHS)
Definition: SmallVector.h:1306
SmallVector()
Definition: SmallVector.h:1263
~SmallVector()
Definition: SmallVector.h:1265
SmallVector(const iterator_range< RangeTy > &R)
Definition: SmallVector.h:1284
SmallVector(std::initializer_list< T > IL)
Definition: SmallVector.h:1289
SmallVector & operator=(const SmallVector &RHS)
Definition: SmallVector.h:1297
SmallVector & operator=(std::initializer_list< T > IL)
Definition: SmallVector.h:1332
SmallVector(SmallVector &&RHS)
Definition: SmallVector.h:1302
SmallVector(ItTy S, ItTy E)
Definition: SmallVector.h:1279
Definition: SmallVector.h:616
LLVM_NODISCARD T pop_back_val()
Definition: SmallVector.h:711
bool operator<(const SmallVectorImpl &RHS) const
Definition: SmallVector.h:1016
void resize_for_overwrite(size_type N)
Like resize, but T is POD, the new values won't be initialized.
Definition: SmallVector.h:681
void swap(SmallVectorImpl &RHS)
Definition: SmallVector.h:1026
void assign(const SmallVectorImpl &RHS)
Definition: SmallVector.h:777
void resize(size_type N)
Definition: SmallVector.h:678
typename SuperClass::iterator iterator
Definition: SmallVector.h:620
iterator insert(iterator I, size_type NumToInsert, ValueParamT Elt)
Definition: SmallVector.h:861
SmallVectorImpl(const SmallVectorImpl &)=delete
void assign(in_iter in_start, in_iter in_end)
Definition: SmallVector.h:766
iterator insert(iterator I, ItTy From, ItTy To)
Definition: SmallVector.h:929
void append(std::initializer_list< T > IL)
Definition: SmallVector.h:739
void insert(iterator I, std::initializer_list< T > IL)
Definition: SmallVector.h:990
SmallVectorImpl & operator=(const SmallVectorImpl &RHS)
Definition: SmallVector.h:1063
void append(size_type NumInputs, ValueParamT Elt)
Append NumInputs copies of Elt to the end.
Definition: SmallVector.h:733
void truncate(size_type N)
Like resize, but requires that N is less than size().
Definition: SmallVector.h:684
void reserve(size_type N)
Definition: SmallVector.h:702
bool operator!=(const SmallVectorImpl &RHS) const
Definition: SmallVector.h:1012
iterator insert(iterator I, const T &Elt)
Definition: SmallVector.h:857
bool operator>(const SmallVectorImpl &RHS) const
Definition: SmallVector.h:1020
void assign(size_type NumElts, ValueParamT Elt)
Definition: SmallVector.h:743
void append(const SmallVectorImpl &RHS)
Definition: SmallVector.h:741
typename SuperClass::size_type size_type
Definition: SmallVector.h:623
bool operator>=(const SmallVectorImpl &RHS) const
Definition: SmallVector.h:1022
void assign(std::initializer_list< T > IL)
Definition: SmallVector.h:772
bool operator<=(const SmallVectorImpl &RHS) const
Definition: SmallVector.h:1021
iterator erase(const_iterator CS, const_iterator CE)
Definition: SmallVector.h:794
~SmallVectorImpl()
Definition: SmallVector.h:644
void assignRemote(SmallVectorImpl &&RHS)
Definition: SmallVector.h:632
reference emplace_back(ArgTypes &&... Args)
Definition: SmallVector.h:995
iterator insert(iterator I, T &&Elt)
Definition: SmallVector.h:853
SmallVectorImpl(unsigned N)
Definition: SmallVector.h:630
iterator erase(const_iterator CI)
Definition: SmallVector.h:779
void clear()
Definition: SmallVector.h:650
void resize(size_type N, ValueParamT NV)
Definition: SmallVector.h:690
void pop_back_n(size_type NumItems)
Definition: SmallVector.h:706
void append(in_iter in_start, in_iter in_end)
Add the specified range to the end of the SmallVector.
Definition: SmallVector.h:724
bool operator==(const SmallVectorImpl &RHS) const
Definition: SmallVector.h:1008
typename std::conditional< TakesParamByValue, T, const T & >::type ValueParamT
Definition: SmallVector.h:524
SmallVectorTemplateBase(size_t Size)
Definition: SmallVector.h:526
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:550
T * reserveForParamAndGetAddress(T &Elt, size_t N=1)
Definition: SmallVector.h:576
void push_back(ValueParamT Elt)
Definition: SmallVector.h:604
const T * reserveForParamAndGetAddress(const T &Elt, size_t N=1)
Definition: SmallVector.h:570
void grow(size_t MinSize=0)
Definition: SmallVector.h:566
static void uninitialized_copy(It1 I, It1 E, It2 Dest)
Definition: SmallVector.h:542
static void uninitialized_move(It1 I, It1 E, It2 Dest)
Definition: SmallVector.h:534
void growAndAssign(size_t NumElts, T Elt)
Definition: SmallVector.h:584
void pop_back()
Definition: SmallVector.h:610
static ValueParamT forward_value_param(ValueParamT V)
Copy V or return a reference, depending on ValueParamT.
Definition: SmallVector.h:582
T & growAndEmplaceBack(ArgTypes &&... Args)
Definition: SmallVector.h:595
static void destroy_range(T *, T *)
Definition: SmallVector.h:529
Definition: SmallVector.h:368
static void uninitialized_move(It1 I, It1 E, It2 Dest)
Definition: SmallVector.h:387
SmallVectorTemplateBase(size_t Size)
Definition: SmallVector.h:375
static void destroy_range(T *S, T *E)
Definition: SmallVector.h:377
static void uninitialized_copy(It1 I, It1 E, It2 Dest)
Definition: SmallVector.h:395
T & growAndEmplaceBack(ArgTypes &&... Args)
Definition: SmallVector.h:446
void takeAllocationForGrow(T *NewElts, size_t NewCapacity)
Transfer ownership of the allocation, finishing up grow().
Definition: SmallVector.h:499
void push_back(T &&Elt)
Definition: SmallVector.h:465
T * mallocForGrow(size_t MinSize, size_t &NewCapacity)
Definition: SmallVector.h:406
const T & ValueParamT
Definition: SmallVector.h:373
void pop_back()
Definition: SmallVector.h:471
void moveElementsForGrow(T *NewElts)
Definition: SmallVector.h:488
static constexpr bool TakesParamByValue
Definition: SmallVector.h:372
void growAndAssign(size_t NumElts, const T &Elt)
Definition: SmallVector.h:435
static const T & forward_value_param(const T &V)
Definition: SmallVector.h:433
const T * reserveForParamAndGetAddress(const T &Elt, size_t N=1)
Definition: SmallVector.h:421
static T && forward_value_param(T &&V)
Definition: SmallVector.h:432
void push_back(const T &Elt)
Definition: SmallVector.h:459
T * reserveForParamAndGetAddress(T &Elt, size_t N=1)
Definition: SmallVector.h:427
void grow(size_t MinSize=0)
Definition: SmallVector.h:479
Definition: SmallVector.h:154
void assertSafeToReferenceAfterClear(ItTy, ItTy)
Definition: SmallVector.h:246
const_reverse_iterator rbegin() const
Definition: SmallVector.h:308
SmallVectorTemplateCommon(size_t Size)
Definition: SmallVector.h:169
const T & const_reference
Definition: SmallVector.h:292
size_t capacity_in_bytes() const
Definition: SmallVector.h:321
const_iterator begin() const
Definition: SmallVector.h:302
bool isSafeToReferenceAfterResize(const void *Elt, size_t NewSize)
Definition: SmallVector.h:211
void assertSafeToReferenceAfterResize(const void *Elt, size_t NewSize)
Check whether Elt will be invalidated by resizing the vector to NewSize.
Definition: SmallVector.h:223
bool isRangeInStorage(const void *First, const void *Last) const
Definition: SmallVector.h:202
const T * const_iterator
Definition: SmallVector.h:286
size_type max_size() const
Definition: SmallVector.h:317
size_t size_type
Definition: SmallVector.h:282
reference operator[](size_type idx)
Definition: SmallVector.h:328
const_pointer data() const
Return a pointer to the vector's buffer, even if empty().
Definition: SmallVector.h:326
void resetToSmall()
Put this vector in a state of being small.
Definition: SmallVector.h:180
reverse_iterator rbegin()
Definition: SmallVector.h:307
static const T * reserveForParamAndGetAddressImpl(U *This, const T &Elt, size_t N)
Definition: SmallVector.h:263
void assertSafeToReferenceAfterClear(const T *From, const T *To)
Check whether any part of the range will be invalidated by clearing.
Definition: SmallVector.h:237
const_reference operator[](size_type idx) const
Definition: SmallVector.h:332
const_iterator end() const
Definition: SmallVector.h:304
iterator begin()
Definition: SmallVector.h:301
reference front()
Definition: SmallVector.h:337
reference back()
Definition: SmallVector.h:346
T & reference
Definition: SmallVector.h:291
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: SmallVector.h:288
bool isReferenceToStorage(const void *V) const
Return true if V is an internal reference to this vector.
Definition: SmallVector.h:196
pointer data()
Return a pointer to the vector's buffer, even if empty().
Definition: SmallVector.h:324
bool isSmall() const
Definition: SmallVector.h:177
void grow_pod(size_t MinSize, size_t TSize)
Definition: SmallVector.h:171
size_type size_in_bytes() const
Definition: SmallVector.h:316
const T * const_pointer
Definition: SmallVector.h:294
void assertSafeToAddRange(const T *From, const T *To)
Check whether any part of the range will be invalidated by growing.
Definition: SmallVector.h:249
const_reference front() const
Definition: SmallVector.h:341
T value_type
Definition: SmallVector.h:284
void assertSafeToAdd(const void *Elt, size_t N=1)
Definition: SmallVector.h:232
iterator end()
Definition: SmallVector.h:303
ptrdiff_t difference_type
Definition: SmallVector.h:283
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:187
T * pointer
Definition: SmallVector.h:293
const_reverse_iterator rend() const
Definition: SmallVector.h:312
std::reverse_iterator< iterator > reverse_iterator
Definition: SmallVector.h:289
T * iterator
Definition: SmallVector.h:285
reverse_iterator rend()
Definition: SmallVector.h:311
const_reference back() const
Definition: SmallVector.h:350
void assertSafeToAddRange(ItTy, ItTy)
Definition: SmallVector.h:258
Definition: SmallVector.h:83
typename std::remove_const< typename std::remove_reference< decltype(*std::begin(std::declval< RangeType & >()))>::type >::type ValueTypeFromRangeType
Definition: SmallVector.h:1346
void * safe_realloc(void *Ptr, size_t Sz)
Definition: SmallVector.h:70
typename std::conditional< sizeof(T)< 4 &&sizeof(void *) >=8, uint64_t, uint32_t >::type SmallVectorSizeType
Definition: SmallVector.h:139
void * safe_malloc(size_t Sz)
Definition: SmallVector.h:58
SmallVector< ValueTypeFromRangeType< R >, Size > to_vector(R &&Range)
Definition: SmallVector.h:1352
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:548
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:719
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:343
void To(const core::Tensor &src, core::Tensor &dst, double scale, double offset)
Definition: Image.cpp:17
Definition: PinholeCameraIntrinsic.cpp:16
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:1377
void swap(open3d::core::SmallVectorImpl< T > &LHS, open3d::core::SmallVectorImpl< T > &RHS)
Implement std::swap in terms of SmallVector swap.
Definition: SmallVector.h:1370
Definition: SmallVector.h:1191
Figure out the offset of the first element.
Definition: SmallVector.h:143
char FirstEl[sizeof(T)]
Definition: SmallVector.h:146
char Base[sizeof(SmallVectorBase< SmallVectorSizeType< T >>)]
Definition: SmallVector.h:145
Definition: SmallVector.h:1169