Go to the documentation of this file.
24 #ifndef MXNET_NODE_CONTAINER_H_
25 #define MXNET_NODE_CONTAINER_H_
29 #include <type_traits>
31 #include <initializer_list>
32 #include <unordered_map>
42 std::vector<ObjectRef>
data;
53 template <
typename Converter,
typename TIter>
58 using pointer =
typename Converter::ResultType*;
71 template <
typename T = IterAdapter>
72 typename std::enable_if<std::is_same<iterator_category, std::random_access_iterator_tag>::value,
73 typename T::difference_type>::type
inline
75 return iter_ - rhs.iter_;
79 return iter_ == other.iter_;
82 return !(*
this == other);
85 return Converter::convert(*iter_);
100 template <
typename T,
101 typename =
typename std::enable_if<std::is_base_of<ObjectRef, T>::value>::type>
108 data_ = make_object<ArrayNode>();
115 data_ = std::move(other.data_);
135 template <
typename IterType>
143 Array(std::initializer_list<T> init) {
144 assign(init.begin(), init.end());
151 assign(init.begin(), init.end());
158 explicit Array(
size_t n,
const T& val) {
159 auto tmp_node = make_object<ArrayNode>();
160 for (
size_t i = 0; i < n; ++i) {
161 tmp_node->data.push_back(val);
163 data_ = std::move(tmp_node);
171 data_ = std::move(other.data_);
189 template <
typename IterType>
191 auto n = make_object<ArrayNode>();
192 for (IterType it =
begin; it !=
end; ++it) {
193 n->data.push_back(T(*it));
195 data_ = std::move(n);
207 if (
data_.get() ==
nullptr)
220 if (
data_.get() ==
nullptr || !
data_.unique()) {
233 n->
data.push_back(item);
248 inline void Set(
size_t i,
const T& value) {
262 template <
typename F>
267 if (
data_.unique()) {
270 for (
size_t i = 0; i < ptr->
data.size(); ++i) {
274 T old_elem = DowncastNoCheck<T>(std::move(ptr->
data[i]));
275 T new_elem = fmutate(std::move(old_elem));
276 ptr->
data[i] = std::move(new_elem);
281 for (
size_t i = 0; i < ptr->
data.size(); ++i) {
282 T old_elem = DowncastNoCheck<T>(ptr->
data[i]);
283 T new_elem = fmutate(old_elem);
284 if (!new_elem.same_as(ptr->
data[i])) {
286 if (copy ==
nullptr) {
287 copy = runtime::make_object<ArrayNode>(*ptr);
289 copy->data[i] = std::move(new_elem);
293 if (copy !=
nullptr) {
294 data_ = std::move(copy);
305 return DowncastNoCheck<T>(n);
332 #endif // MXNET_NODE_CONTAINER_H_
namespace of mxnet
Definition: api_registry.h:33
bool operator!=(IterAdapter other) const
Definition: container.h:81
base class of all object containers.
Definition: object.h:151
Array container of NodeRef in DSL graph. Array implements copy on write semantics,...
Definition: container.h:102
T ResultType
Definition: container.h:303
Array(Array< T > &&other)
move constructor
Definition: container.h:114
const T operator[](size_t i) const
Read i-th element from array.
Definition: container.h:202
A custom smart pointer for Object.
Definition: object.h:346
typename std::iterator_traits< TIter >::difference_type difference_type
Definition: container.h:56
Array< T > & operator=(Array< T > &&other)
move assign operator
Definition: container.h:170
typename Converter::ResultType value_type
Definition: container.h:57
IterAdapter< ValueConverter, std::vector< ObjectRef >::const_reverse_iterator > reverse_iterator
Definition: container.h:311
Array(runtime::ObjectPtr< Object > n)
constructor from pointer
Definition: container.h:128
std::vector< ObjectRef > data
the data content
Definition: container.h:42
iterator adapter that adapts TIter to return another type.
Definition: container.h:54
#define MXNET_DECLARE_FINAL_OBJECT_INFO(TypeName, ParentType)
helper macro to declare type information in a final class.
Definition: object.h:668
BinaryMapExp< OP, TA, ScalarExp< MSHADOW_SCALAR_ >, MSHADOW_SCALAR_,(ta|type::kMapper)> F(const Exp< TA, MSHADOW_SCALAR_, ta > &lhs, const ScalarExp< MSHADOW_SCALAR_ > &rhs)
operator overload for const
Definition: expr_scalar-inl.h:71
Definition: container.h:302
static T convert(const ObjectRef &n)
Definition: container.h:304
ArrayNode * CopyOnWrite()
copy on write semantics Do nothing if current handle is the unique copy of the array....
Definition: container.h:219
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: container.h:74
IterAdapter< ValueConverter, std::vector< ObjectRef >::const_iterator > iterator
Definition: container.h:308
const value_type operator*() const
Definition: container.h:84
Array(const std::vector< T > &init)
constructor from vector
Definition: container.h:150
iterator end() const
Definition: container.h:318
Array()
default constructor
Definition: container.h:107
IterAdapter operator+(difference_type offset) const
Definition: container.h:67
typename std::iterator_traits< TIter >::iterator_category iterator_category
Definition: container.h:60
array node content in array
Definition: container.h:39
typename Converter::ResultType * pointer
Definition: container.h:58
void resize(size_t size)
Resize the array.
Definition: container.h:239
Array(size_t n, const T &val)
Constructs a container with n elements. Each element is a copy of val.
Definition: container.h:158
void assign(IterType begin, IterType end)
reset the array to content from iterator.
Definition: container.h:190
ObjectPtr< Object > data_
Internal pointer that backs the reference.
Definition: object.h:575
typename Converter::ResultType & reference
Definition: container.h:59
void MutateByApply(F fmutate)
Helper function to apply fmutate to mutate an array.
Definition: container.h:263
size_t size() const
Definition: container.h:206
static constexpr const char * _type_key
Definition: container.h:44
Array(std::initializer_list< T > init)
constructor from initializer list
Definition: container.h:143
bool operator==(IterAdapter other) const
Definition: container.h:78
bool empty() const
Definition: container.h:253
Base class of all object reference.
Definition: object.h:500
reverse_iterator rend() const
Definition: container.h:326
iterator begin() const
Definition: container.h:314
IterAdapter(TIter iter)
Definition: container.h:62
void push_back(const T &item)
push a new item to the back of the list
Definition: container.h:231
reverse_iterator rbegin() const
Definition: container.h:322
Array(const Array< T > &other)
copy constructor
Definition: container.h:121
IterAdapter & operator++()
Definition: container.h:63
void swap(ObjectPtr< T > &other)
Swap this array with another Object.
Definition: object.h:395
Array< T > & operator=(const Array< T > &other)
copy assign operator
Definition: container.h:179
Array(IterType begin, IterType end)
constructor from iterator
Definition: container.h:136
void Set(size_t i, const T &value)
set i-th element of the array.
Definition: container.h:248
Definitions and helper macros for IR/AST nodes.