24 #ifndef TVM_RUNTIME_CONTAINER_BASE_H_
25 #define TVM_RUNTIME_CONTAINER_BASE_H_
27 #include <tvm/runtime/logging.h>
32 #include <initializer_list>
98 template <
typename ArrayType,
typename ElemType>
107 size_t size =
Self()->GetSize();
108 ICHECK_LT(idx, size) <<
"Index " << idx <<
" out of bounds " << size <<
"\n";
109 return *(
reinterpret_cast<ElemType*
>(
AddressOf(idx)));
118 size_t size =
Self()->GetSize();
119 ICHECK_LT(idx, size) <<
"Index " << idx <<
" out of bounds " << size <<
"\n";
120 return *(
reinterpret_cast<ElemType*
>(
AddressOf(idx)));
127 if (!(std::is_standard_layout<ElemType>::value && std::is_trivial<ElemType>::value)) {
128 size_t size =
Self()->GetSize();
129 for (
size_t i = 0; i < size; ++i) {
130 ElemType* fp =
reinterpret_cast<ElemType*
>(
AddressOf(i));
131 fp->ElemType::~ElemType();
147 template <
typename... Args>
150 new (field_ptr) ElemType(std::forward<Args>(args)...);
158 inline ArrayType*
Self()
const {
170 alignof(ArrayType) %
alignof(ElemType) == 0 &&
sizeof(ArrayType) %
alignof(ElemType) == 0,
171 "The size and alignment of ArrayType should respect "
172 "ElemType's alignment.");
174 size_t kDataStart =
sizeof(ArrayType);
175 ArrayType*
self =
Self();
176 char* data_start =
reinterpret_cast<char*
>(
self) + kDataStart;
177 return data_start + idx *
sizeof(ElemType);
186 template <
typename Converter,
typename TIter>
191 using pointer =
typename Converter::ResultType*;
219 template <
typename T = IterAdapter>
220 typename std::enable_if<std::is_same<iterator_category, std::random_access_iterator_tag>::value,
221 typename T::difference_type>::type
inline
223 return iter_ - rhs.iter_;
239 template <
typename Converter,
typename TIter>
244 using pointer =
typename Converter::ResultType*;
271 template <
typename T = ReverseIterAdapter>
272 typename std::enable_if<std::is_same<iterator_category, std::random_access_iterator_tag>::value,
273 typename T::difference_type>::type
inline
275 return rhs.iter_ - iter_;
290 using runtime::IterAdapter;
292 using runtime::Object;
293 using runtime::ObjectEqual;
294 using runtime::ObjectHash;
295 using runtime::ObjectPtr;
296 using runtime::ObjectPtrEqual;
297 using runtime::ObjectPtrHash;
298 using runtime::ObjectRef;
Base template for classes with array like memory layout.
Definition: base.h:99
void * AddressOf(size_t idx) const
Return the raw pointer to the element at idx.
Definition: base.h:168
const ElemType & operator[](size_t idx) const
Access element at index.
Definition: base.h:106
void EmplaceInit(size_t idx, Args &&... args)
Construct a value in place with the arguments.
Definition: base.h:148
ElemType & operator[](size_t idx)
Access element at index.
Definition: base.h:117
~InplaceArrayBase()
Destroy the Inplace Array Base object.
Definition: base.h:126
ArrayType * Self() const
Return the self object for the array.
Definition: base.h:158
iterator adapter that adapts TIter to return another type.
Definition: base.h:187
typename Converter::ResultType value_type
Definition: base.h:190
IterAdapter & operator++()
Definition: base.h:196
const value_type operator*() const
Definition: base.h:228
std::enable_if< std::is_same< iterator_category, std::random_access_iterator_tag >::value, typename T::difference_type >::type operator-(const IterAdapter &rhs) const
Definition: base.h:222
typename Converter::ResultType & reference
Definition: base.h:192
bool operator!=(IterAdapter other) const
Definition: base.h:227
IterAdapter operator++(int)
Definition: base.h:204
IterAdapter operator+(difference_type offset) const
Definition: base.h:215
typename std::iterator_traits< TIter >::difference_type difference_type
Definition: base.h:189
IterAdapter operator-(difference_type offset) const
Definition: base.h:217
IterAdapter(TIter iter)
Definition: base.h:195
bool operator==(IterAdapter other) const
Definition: base.h:226
IterAdapter & operator--()
Definition: base.h:200
typename std::iterator_traits< TIter >::iterator_category iterator_category
Definition: base.h:193
IterAdapter operator--(int)
Definition: base.h:209
typename Converter::ResultType * pointer
Definition: base.h:191
Base class of all object reference.
Definition: object.h:520
iterator adapter that adapts TIter to return another type.
Definition: base.h:240
const value_type operator*() const
Definition: base.h:280
typename Converter::ResultType & reference
Definition: base.h:245
bool operator!=(ReverseIterAdapter other) const
Definition: base.h:279
ReverseIterAdapter operator+(difference_type offset) const
Definition: base.h:267
ReverseIterAdapter & operator++()
Definition: base.h:249
ReverseIterAdapter operator--(int)
Definition: base.h:262
typename std::iterator_traits< TIter >::iterator_category iterator_category
Definition: base.h:246
ReverseIterAdapter(TIter iter)
Definition: base.h:248
std::enable_if< std::is_same< iterator_category, std::random_access_iterator_tag >::value, typename T::difference_type >::type operator-(const ReverseIterAdapter &rhs) const
Definition: base.h:274
ReverseIterAdapter operator++(int)
Definition: base.h:257
typename std::iterator_traits< TIter >::difference_type difference_type
Definition: base.h:242
typename Converter::ResultType value_type
Definition: base.h:243
typename Converter::ResultType * pointer
Definition: base.h:244
bool operator==(ReverseIterAdapter other) const
Definition: base.h:278
ReverseIterAdapter & operator--()
Definition: base.h:253
Runtime memory management.
ObjectPtr< ArrayNode > make_object()
Definition: array.h:908
SubRef Downcast(BaseRef ref)
Downcast a base reference type to a more specific type.
Definition: object.h:937
Performance counters for profiling via the PAPI library.
Definition: analyzer.h:36
A managed object in the TVM runtime.
String-aware ObjectRef hash functor.
Definition: base.h:49
bool operator()(const ObjectRef &a, const ObjectRef &b) const
Check if the two ObjectRef are equal.
Definition: string.h:516
String-aware ObjectRef equal functor.
Definition: base.h:39
size_t operator()(const ObjectRef &a) const
Calculate the hash code of an ObjectRef.
Definition: string.h:509