blob: 49abd1c3fa2e3ac2744da95a2db42ebee0a4f1a9 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mxnet: /work/mxnet/include/mxnet/node/container.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mxnet
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_1143c7affb9ebd026cb6818dd282def7.html">mxnet</a></li><li class="navelem"><a class="el" href="dir_c697659eb9eafab534ce70cac2166794.html">node</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">container.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="node_2container_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * KIND, either express or implied. See the License for the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * under the License.</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">// Acknowledgement: This file originates from incubator-tvm</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#ifndef MXNET_NODE_CONTAINER_H_</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#define MXNET_NODE_CONTAINER_H_</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="include_2mxnet_2node_2node_8h.html">mxnet/node/node.h</a>&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;initializer_list&gt;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacemxnet.html">mxnet</a> {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classmxnet_1_1ArrayNode.html"> 39</a></span>&#160;<span class="keyword">class </span><a class="code" href="classmxnet_1_1ArrayNode.html">ArrayNode</a> : <span class="keyword">public</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a> {</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc"> 42</a></span>&#160; std::vector&lt;ObjectRef&gt; <a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classmxnet_1_1ArrayNode.html#aaf7147a1c0d7d07ee03dc1ad4ce2a866"> 44</a></span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classmxnet_1_1ArrayNode.html#aaf7147a1c0d7d07ee03dc1ad4ce2a866">_type_key</a> = <span class="stringliteral">&quot;Array&quot;</span>;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="classmxnet_1_1ArrayNode.html#acf97d97ce00794d343e2142e305cce9c">MXNET_DECLARE_FINAL_OBJECT_INFO</a>(<a class="code" href="classmxnet_1_1ArrayNode.html">ArrayNode</a>, <a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;};</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Converter,</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">typename</span> TIter&gt;</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classmxnet_1_1IterAdapter.html"> 55</a></span>&#160;<span class="keyword">class </span><a class="code" href="classmxnet_1_1IterAdapter.html">IterAdapter</a> {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classmxnet_1_1IterAdapter.html#a20c65540ab9072b60d8ff0b2079c76bc"> 57</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classmxnet_1_1IterAdapter.html#a20c65540ab9072b60d8ff0b2079c76bc">difference_type</a> = <span class="keyword">typename</span> std::iterator_traits&lt;TIter&gt;::difference_type;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classmxnet_1_1IterAdapter.html#a9cee72dd6dfac15cbfd2ade31794e1b7"> 58</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classmxnet_1_1IterAdapter.html#a9cee72dd6dfac15cbfd2ade31794e1b7">value_type</a> = <span class="keyword">typename</span> Converter::ResultType;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classmxnet_1_1IterAdapter.html#a429dfffc5d6f3fc4b03a3dba5b84db64"> 59</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classmxnet_1_1IterAdapter.html#a429dfffc5d6f3fc4b03a3dba5b84db64">pointer</a> = <span class="keyword">typename</span> Converter::ResultType*;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classmxnet_1_1IterAdapter.html#ad2934b89143cf3b3fd1e4df66e6d524c"> 60</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classmxnet_1_1IterAdapter.html#ad2934b89143cf3b3fd1e4df66e6d524c">reference</a> = <span class="keyword">typename</span> Converter::ResultType&amp;; <span class="comment">// NOLINT(*)</span></div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classmxnet_1_1IterAdapter.html#a1a4790aff91c0c8fd5758ac1fbf76021"> 61</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classmxnet_1_1IterAdapter.html#a1a4790aff91c0c8fd5758ac1fbf76021">iterator_category</a> = <span class="keyword">typename</span> std::iterator_traits&lt;TIter&gt;::iterator_category;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classmxnet_1_1IterAdapter.html#aabb27f923d0e86e2f52317e08caba995"> 63</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classmxnet_1_1IterAdapter.html#aabb27f923d0e86e2f52317e08caba995">IterAdapter</a>(TIter iter) : iter_(iter) {}</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classmxnet_1_1IterAdapter.html#a80dff6c813ce1d45039747d7503f3b7c"> 64</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classmxnet_1_1IterAdapter.html">IterAdapter</a>&amp; <a class="code" href="classmxnet_1_1IterAdapter.html#a80dff6c813ce1d45039747d7503f3b7c">operator++</a>() {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; ++iter_;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classmxnet_1_1IterAdapter.html#a2b429b685f3dd46cc17cafe473d0d9f8"> 68</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classmxnet_1_1IterAdapter.html">IterAdapter</a> <a class="code" href="classmxnet_1_1IterAdapter.html#a2b429b685f3dd46cc17cafe473d0d9f8">operator+</a>(<a class="code" href="classmxnet_1_1IterAdapter.html#a20c65540ab9072b60d8ff0b2079c76bc">difference_type</a> offset)<span class="keyword"> const </span>{</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1IterAdapter.html">IterAdapter</a>(iter_ + offset);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T = IterAdapter&gt;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">typename</span> std::enable_if&lt;std::is_same&lt;iterator_category, std::random_access_iterator_tag&gt;::value,</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">typename</span> T::difference_type&gt;::type</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classmxnet_1_1IterAdapter.html#a8a75c9d08285586e0888647c74d48b86"> 75</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classmxnet_1_1IterAdapter.html#a8a75c9d08285586e0888647c74d48b86">operator-</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1IterAdapter.html">IterAdapter</a>&amp; rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> iter_ - rhs.iter_;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classmxnet_1_1IterAdapter.html#a399f65ba22f7b009f23436cee436b440"> 79</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1IterAdapter.html#a399f65ba22f7b009f23436cee436b440">operator==</a>(<a class="code" href="classmxnet_1_1IterAdapter.html">IterAdapter</a> other)<span class="keyword"> const </span>{</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> iter_ == other.iter_;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classmxnet_1_1IterAdapter.html#a834abe6cc6ec9bad662bd98135d0d100"> 82</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1IterAdapter.html#a834abe6cc6ec9bad662bd98135d0d100">operator!=</a>(<a class="code" href="classmxnet_1_1IterAdapter.html">IterAdapter</a> other)<span class="keyword"> const </span>{</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == other);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classmxnet_1_1IterAdapter.html#a4d55c9a57e6721a847f3b66e360873a1"> 85</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classmxnet_1_1IterAdapter.html#a9cee72dd6dfac15cbfd2ade31794e1b7">value_type</a> <a class="code" href="classmxnet_1_1IterAdapter.html#a4d55c9a57e6721a847f3b66e360873a1">operator*</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">return</span> Converter::convert(*iter_);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; TIter iter_;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;};</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T,</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">typename</span> = <span class="keyword">typename</span> std::enable_if&lt;std::is_base_of&lt;ObjectRef, T&gt;::value&gt;::type &gt;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html"> 103</a></span>&#160;<span class="keyword">class </span><a class="code" href="classmxnet_1_1Array.html">Array</a> : <span class="keyword">public</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a> {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a68d4cd81b6175aa7532234fae2cb5d59"> 108</a></span>&#160; <a class="code" href="classmxnet_1_1Array.html#a68d4cd81b6175aa7532234fae2cb5d59">Array</a>() {</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; data_ = make_object&lt;ArrayNode&gt;();</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a00c3797ab4a9fbddbf191652bef44809"> 115</a></span>&#160; <a class="code" href="classmxnet_1_1Array.html#a00c3797ab4a9fbddbf191652bef44809">Array</a>(<a class="code" href="classmxnet_1_1Array.html">Array&lt;T&gt;</a> &amp;&amp; other) { <span class="comment">// NOLINT(*)</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; data_ = std::move(other.data_);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a2640d179bd36bea8c7a46aaeca5ae58e"> 122</a></span>&#160; <a class="code" href="classmxnet_1_1Array.html#a2640d179bd36bea8c7a46aaeca5ae58e">Array</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1Array.html">Array&lt;T&gt;</a> &amp;other) { <span class="comment">// NOLINT(*)</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; data_ = std::move(other.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; }</div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#aee1c5a8e4fae05ed35f4e6fc009d3997"> 129</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classmxnet_1_1Array.html#aee1c5a8e4fae05ed35f4e6fc009d3997">Array</a>(<a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">runtime::ObjectPtr&lt;Object&gt;</a> n) : <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a>(n) {}</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> IterType&gt;</div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a75dc7b5ab19d402fda807b7108eda4ef"> 137</a></span>&#160; <a class="code" href="classmxnet_1_1Array.html#a75dc7b5ab19d402fda807b7108eda4ef">Array</a>(IterType begin, IterType end) {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; assign(begin, end);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a0027f124b02851939efab84ce57887d8"> 144</a></span>&#160; <a class="code" href="classmxnet_1_1Array.html#a0027f124b02851939efab84ce57887d8">Array</a>(std::initializer_list&lt;T&gt; init) { <span class="comment">// NOLINT(*)</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; assign(init.begin(), init.end());</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#ab973c70d95c2813049a9376853628afe"> 151</a></span>&#160; <a class="code" href="classmxnet_1_1Array.html#ab973c70d95c2813049a9376853628afe">Array</a>(<span class="keyword">const</span> std::vector&lt;T&gt;&amp; init) { <span class="comment">// NOLINT(*)</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; assign(init.begin(), init.end());</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#aadd7404faea67e3af90867d18d1e0da6"> 159</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classmxnet_1_1Array.html#aadd7404faea67e3af90867d18d1e0da6">Array</a>(<span class="keywordtype">size_t</span> n, <span class="keyword">const</span> T&amp; val) {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keyword">auto</span> tmp_node = make_object&lt;ArrayNode&gt;();</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; n; ++i) {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; tmp_node-&gt;data.push_back(val);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; data_ = std::move(tmp_node);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; }</div><div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a8072807d0c6f5b2a062d6f67ec6d0d34"> 171</a></span>&#160; <a class="code" href="classmxnet_1_1Array.html">Array&lt;T&gt;</a>&amp; <a class="code" href="classmxnet_1_1Array.html#a8072807d0c6f5b2a062d6f67ec6d0d34">operator=</a>(<a class="code" href="classmxnet_1_1Array.html">Array&lt;T&gt;</a> &amp;&amp; other) {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; data_ = std::move(other.data_);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a3c86bf10ff15554b85d14039fa3fe28d"> 180</a></span>&#160; <a class="code" href="classmxnet_1_1Array.html">Array&lt;T&gt;</a>&amp; <a class="code" href="classmxnet_1_1Array.html#a3c86bf10ff15554b85d14039fa3fe28d">operator=</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1Array.html">Array&lt;T&gt;</a> &amp; other) {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; data_ = other.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> IterType&gt;</div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a9095f1bac4bfa8eec9f4c080dba54d8f"> 191</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1Array.html#a9095f1bac4bfa8eec9f4c080dba54d8f">assign</a>(IterType begin, IterType end) {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keyword">auto</span> n = make_object&lt;ArrayNode&gt;();</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">for</span> (IterType it = begin; it != end; ++it) {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; n-&gt;data.push_back(T(*it));</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; data_ = std::move(n);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#ac43ce20b5f51c7a47521a293aea1b4d8"> 203</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> T <a class="code" href="classmxnet_1_1Array.html#ac43ce20b5f51c7a47521a293aea1b4d8">operator[]</a>(<span class="keywordtype">size_t</span> i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">return</span> DowncastNoCheck&lt;T&gt;(</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classmxnet_1_1ArrayNode.html">ArrayNode</a>*<span class="keyword">&gt;</span>(data_.get())-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>[i]);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#aef1832eb8be445cbd5fbf2a886676756"> 208</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">size_t</span> <a class="code" href="classmxnet_1_1Array.html#aef1832eb8be445cbd5fbf2a886676756">size</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (data_.get() == <span class="keyword">nullptr</span>) <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classmxnet_1_1ArrayNode.html">ArrayNode</a>*<span class="keyword">&gt;</span>(data_.get())-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>.size();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; }</div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a9debff88636171cdbca2c4a220064d40"> 220</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classmxnet_1_1ArrayNode.html">ArrayNode</a>* <a class="code" href="classmxnet_1_1Array.html#a9debff88636171cdbca2c4a220064d40">CopyOnWrite</a>() {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">if</span> (data_.get() == <span class="keyword">nullptr</span> || !data_.unique()) {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">runtime::ObjectPtr&lt;ArrayNode&gt;</a> n = make_object&lt;ArrayNode&gt;();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; n-&gt;data = <span class="keyword">static_cast&lt;</span><a class="code" href="classmxnet_1_1ArrayNode.html">ArrayNode</a>*<span class="keyword">&gt;</span>(data_.get())-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">runtime::ObjectPtr&lt;Object&gt;</a>(std::move(n)).swap(data_);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classmxnet_1_1ArrayNode.html">ArrayNode</a>*<span class="keyword">&gt;</span>(data_.get());</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a1e856b04be89c5f8e836cb5c6abed9a1"> 232</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1Array.html#a1e856b04be89c5f8e836cb5c6abed9a1">push_back</a>(<span class="keyword">const</span> T&amp; item) {</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classmxnet_1_1ArrayNode.html">ArrayNode</a>* n = this-&gt;CopyOnWrite();</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; n-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>.push_back(item);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a9c11277e346b8a78155f3ff46f7a9298"> 240</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1Array.html#a9c11277e346b8a78155f3ff46f7a9298">resize</a>(<span class="keywordtype">size_t</span> size) {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="classmxnet_1_1ArrayNode.html">ArrayNode</a>* n = this-&gt;CopyOnWrite();</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; n-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>.resize(size);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; }</div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a641d65835daceebf743dd0c683a5bdae"> 249</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1Array.html#a641d65835daceebf743dd0c683a5bdae">Set</a>(<span class="keywordtype">size_t</span> i, <span class="keyword">const</span> T&amp; value) {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="classmxnet_1_1ArrayNode.html">ArrayNode</a>* n = this-&gt;CopyOnWrite();</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; n-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>[i] = value;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#acef1616b8c0761b4d09c2403b96cfa14"> 254</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1Array.html#acef1616b8c0761b4d09c2403b96cfa14">empty</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">return</span> size() == 0;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F&gt;</div><div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#aed953611d4d515eef787cc2f30f76599"> 264</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1Array.html#aed953611d4d515eef787cc2f30f76599">MutateByApply</a>(<a class="code" href="namespacemshadow_1_1expr.html#a78641f307f27330ec67149865eb2222f">F</a> fmutate) {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <a class="code" href="classmxnet_1_1ArrayNode.html">ArrayNode</a>* ptr = <span class="keyword">static_cast&lt;</span><a class="code" href="classmxnet_1_1ArrayNode.html">ArrayNode</a>*<span class="keyword">&gt;</span>(data_.get());</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (ptr == <span class="keyword">nullptr</span>) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span> (data_.unique()) {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="comment">// Copy on write optimization.</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="comment">// Perform inplace update because this is an unique copy.</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; ptr-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>.size(); ++i) {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="comment">// It is important to use move here</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="comment">// to make prevent the element&#39;s ref count from increasing</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// so fmutate itself can perform copy-on-write optimization</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; T old_elem = DowncastNoCheck&lt;T&gt;(std::move(ptr-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>[i]));</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; T new_elem = fmutate(std::move(old_elem));</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; ptr-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>[i] = std::move(new_elem);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="comment">// lazily trigger copy if there is element change.</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">runtime::ObjectPtr&lt;ArrayNode&gt;</a> copy;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; ptr-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>.size(); ++i) {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; T old_elem = DowncastNoCheck&lt;T&gt;(ptr-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>[i]);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; T new_elem = fmutate(old_elem);</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">if</span> (!new_elem.same_as(ptr-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>[i])) {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// copy the old array</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">if</span> (copy == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; copy = runtime::make_object&lt;ArrayNode&gt;(*ptr);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; copy-&gt;data[i] = std::move(new_elem);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="comment">// replace the data with the new copy.</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">if</span> (copy != <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; data_ = std::move(copy);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#aaedad023cadaf0d11c6ac8bc7aea6c13"> 300</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classmxnet_1_1ArrayNode.html">ContainerType</a> = <a class="code" href="classmxnet_1_1ArrayNode.html">ArrayNode</a>;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="structmxnet_1_1Array_1_1ValueConverter.html"> 302</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structmxnet_1_1Array_1_1ValueConverter.html">ValueConverter</a> {</div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="structmxnet_1_1Array_1_1ValueConverter.html#acec87be634e2aa1f36b1f0d7b703f3ba"> 303</a></span>&#160; <span class="keyword">using</span> <a class="code" href="structmxnet_1_1Array_1_1ValueConverter.html#acec87be634e2aa1f36b1f0d7b703f3ba">ResultType</a> = T;</div><div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="structmxnet_1_1Array_1_1ValueConverter.html#a35009f132dcec5b3610807ba1570a5da"> 304</a></span>&#160; <span class="keyword">static</span> <span class="keyword">inline</span> T <a class="code" href="structmxnet_1_1Array_1_1ValueConverter.html#a35009f132dcec5b3610807ba1570a5da">convert</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a>&amp; n) {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">return</span> DowncastNoCheck&lt;T&gt;(n);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; };</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keyword">using</span> <a class="code" href="classmxnet_1_1IterAdapter.html">iterator</a> = <a class="code" href="classmxnet_1_1IterAdapter.html">IterAdapter</a>&lt;<a class="code" href="structmxnet_1_1Array_1_1ValueConverter.html">ValueConverter</a>,</div><div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a50dc5aac14db086cdf2ad0bdc2f2fa71"> 309</a></span>&#160; std::vector&lt;ObjectRef&gt;::const_iterator&gt;;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keyword">using</span> <a class="code" href="classmxnet_1_1IterAdapter.html">reverse_iterator</a> = <a class="code" href="classmxnet_1_1IterAdapter.html">IterAdapter</a>&lt;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; ValueConverter,</div><div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#aad789d2d9ca9a4e9b5a4bfdf343c6aae"> 313</a></span>&#160; std::vector&lt;ObjectRef&gt;::const_reverse_iterator&gt;;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a84854870831608e7fd061fa85fa5144b"> 316</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classmxnet_1_1IterAdapter.html">iterator</a> <a class="code" href="classmxnet_1_1Array.html#a84854870831608e7fd061fa85fa5144b">begin</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1IterAdapter.html">iterator</a>(static_cast&lt;const ArrayNode*&gt;(data_.get())-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>.begin());</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a4e706c1e8ecab5a059fad870c92839a7"> 320</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classmxnet_1_1IterAdapter.html">iterator</a> <a class="code" href="classmxnet_1_1Array.html#a4e706c1e8ecab5a059fad870c92839a7">end</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1IterAdapter.html">iterator</a>(static_cast&lt;const ArrayNode*&gt;(data_.get())-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>.end());</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a97a949de7fcd50039f8751fa93d9798a"> 324</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classmxnet_1_1IterAdapter.html">reverse_iterator</a> <a class="code" href="classmxnet_1_1Array.html#a97a949de7fcd50039f8751fa93d9798a">rbegin</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1IterAdapter.html">reverse_iterator</a>(static_cast&lt;const ArrayNode*&gt;(data_.get())-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>.rbegin());</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; }</div><div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classmxnet_1_1Array.html#a3500d3ab395004b7323364f803874029"> 328</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classmxnet_1_1IterAdapter.html">reverse_iterator</a> <a class="code" href="classmxnet_1_1Array.html#a3500d3ab395004b7323364f803874029">rend</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1IterAdapter.html">reverse_iterator</a>(static_cast&lt;const ArrayNode*&gt;(data_.get())-&gt;<a class="code" href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">data</a>.rend());</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;};</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;} <span class="comment">// namespace mxnet</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="preprocessor">#endif // MXNET_NODE_CONTAINER_H_</span></div><div class="ttc" id="classmxnet_1_1IterAdapter_html_aabb27f923d0e86e2f52317e08caba995"><div class="ttname"><a href="classmxnet_1_1IterAdapter.html#aabb27f923d0e86e2f52317e08caba995">mxnet::IterAdapter::IterAdapter</a></div><div class="ttdeci">IterAdapter(TIter iter)</div><div class="ttdef"><b>Definition:</b> container.h:63</div></div>
<div class="ttc" id="classmxnet_1_1IterAdapter_html_a8a75c9d08285586e0888647c74d48b86"><div class="ttname"><a href="classmxnet_1_1IterAdapter.html#a8a75c9d08285586e0888647c74d48b86">mxnet::IterAdapter::operator-</a></div><div class="ttdeci">std::enable_if&lt; std::is_same&lt; iterator_category, std::random_access_iterator_tag &gt;::value, typename T::difference_type &gt;::type operator-(const IterAdapter &amp;rhs) const</div><div class="ttdef"><b>Definition:</b> container.h:75</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a3c86bf10ff15554b85d14039fa3fe28d"><div class="ttname"><a href="classmxnet_1_1Array.html#a3c86bf10ff15554b85d14039fa3fe28d">mxnet::Array::operator=</a></div><div class="ttdeci">Array&lt; T &gt; &amp; operator=(const Array&lt; T &gt; &amp;other)</div><div class="ttdoc">copy assign operator </div><div class="ttdef"><b>Definition:</b> container.h:180</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a9debff88636171cdbca2c4a220064d40"><div class="ttname"><a href="classmxnet_1_1Array.html#a9debff88636171cdbca2c4a220064d40">mxnet::Array::CopyOnWrite</a></div><div class="ttdeci">ArrayNode * CopyOnWrite()</div><div class="ttdoc">copy on write semantics Do nothing if current handle is the unique copy of the array. Otherwise make a new copy of the array to ensure the current handle hold a unique copy. </div><div class="ttdef"><b>Definition:</b> container.h:220</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_ac43ce20b5f51c7a47521a293aea1b4d8"><div class="ttname"><a href="classmxnet_1_1Array.html#ac43ce20b5f51c7a47521a293aea1b4d8">mxnet::Array::operator[]</a></div><div class="ttdeci">const T operator[](size_t i) const</div><div class="ttdoc">Read i-th element from array. </div><div class="ttdef"><b>Definition:</b> container.h:203</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a0027f124b02851939efab84ce57887d8"><div class="ttname"><a href="classmxnet_1_1Array.html#a0027f124b02851939efab84ce57887d8">mxnet::Array::Array</a></div><div class="ttdeci">Array(std::initializer_list&lt; T &gt; init)</div><div class="ttdoc">constructor from initializer list </div><div class="ttdef"><b>Definition:</b> container.h:144</div></div>
<div class="ttc" id="classmxnet_1_1IterAdapter_html_ad2934b89143cf3b3fd1e4df66e6d524c"><div class="ttname"><a href="classmxnet_1_1IterAdapter.html#ad2934b89143cf3b3fd1e4df66e6d524c">mxnet::IterAdapter::reference</a></div><div class="ttdeci">typename Converter::ResultType &amp; reference</div><div class="ttdef"><b>Definition:</b> container.h:60</div></div>
<div class="ttc" id="classmxnet_1_1ArrayNode_html_af8bd45c92b81742bbb1a7fdcf5d76ebc"><div class="ttname"><a href="classmxnet_1_1ArrayNode.html#af8bd45c92b81742bbb1a7fdcf5d76ebc">mxnet::ArrayNode::data</a></div><div class="ttdeci">std::vector&lt; ObjectRef &gt; data</div><div class="ttdoc">the data content </div><div class="ttdef"><b>Definition:</b> container.h:42</div></div>
<div class="ttc" id="namespacemxnet_html"><div class="ttname"><a href="namespacemxnet.html">mxnet</a></div><div class="ttdoc">namespace of mxnet </div><div class="ttdef"><b>Definition:</b> api_registry.h:33</div></div>
<div class="ttc" id="classmxnet_1_1IterAdapter_html_a429dfffc5d6f3fc4b03a3dba5b84db64"><div class="ttname"><a href="classmxnet_1_1IterAdapter.html#a429dfffc5d6f3fc4b03a3dba5b84db64">mxnet::IterAdapter::pointer</a></div><div class="ttdeci">typename Converter::ResultType * pointer</div><div class="ttdef"><b>Definition:</b> container.h:59</div></div>
<div class="ttc" id="structmxnet_1_1Array_1_1ValueConverter_html_a35009f132dcec5b3610807ba1570a5da"><div class="ttname"><a href="structmxnet_1_1Array_1_1ValueConverter.html#a35009f132dcec5b3610807ba1570a5da">mxnet::Array::ValueConverter::convert</a></div><div class="ttdeci">static T convert(const ObjectRef &amp;n)</div><div class="ttdef"><b>Definition:</b> container.h:304</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_acef1616b8c0761b4d09c2403b96cfa14"><div class="ttname"><a href="classmxnet_1_1Array.html#acef1616b8c0761b4d09c2403b96cfa14">mxnet::Array::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> container.h:254</div></div>
<div class="ttc" id="classmxnet_1_1ArrayNode_html_acf97d97ce00794d343e2142e305cce9c"><div class="ttname"><a href="classmxnet_1_1ArrayNode.html#acf97d97ce00794d343e2142e305cce9c">mxnet::ArrayNode::MXNET_DECLARE_FINAL_OBJECT_INFO</a></div><div class="ttdeci">MXNET_DECLARE_FINAL_OBJECT_INFO(ArrayNode, Object)</div></div>
<div class="ttc" id="classmxnet_1_1runtime_1_1ObjectPtr_html"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html">mxnet::runtime::ObjectPtr</a></div><div class="ttdoc">A custom smart pointer for Object. </div><div class="ttdef"><b>Definition:</b> object.h:345</div></div>
<div class="ttc" id="include_2mxnet_2node_2node_8h_html"><div class="ttname"><a href="include_2mxnet_2node_2node_8h.html">node.h</a></div></div>
<div class="ttc" id="classmxnet_1_1IterAdapter_html_a80dff6c813ce1d45039747d7503f3b7c"><div class="ttname"><a href="classmxnet_1_1IterAdapter.html#a80dff6c813ce1d45039747d7503f3b7c">mxnet::IterAdapter::operator++</a></div><div class="ttdeci">IterAdapter &amp; operator++()</div><div class="ttdef"><b>Definition:</b> container.h:64</div></div>
<div class="ttc" id="classmxnet_1_1IterAdapter_html_a2b429b685f3dd46cc17cafe473d0d9f8"><div class="ttname"><a href="classmxnet_1_1IterAdapter.html#a2b429b685f3dd46cc17cafe473d0d9f8">mxnet::IterAdapter::operator+</a></div><div class="ttdeci">IterAdapter operator+(difference_type offset) const</div><div class="ttdef"><b>Definition:</b> container.h:68</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a4e706c1e8ecab5a059fad870c92839a7"><div class="ttname"><a href="classmxnet_1_1Array.html#a4e706c1e8ecab5a059fad870c92839a7">mxnet::Array::end</a></div><div class="ttdeci">iterator end() const</div><div class="ttdef"><b>Definition:</b> container.h:320</div></div>
<div class="ttc" id="structmxnet_1_1Array_1_1ValueConverter_html"><div class="ttname"><a href="structmxnet_1_1Array_1_1ValueConverter.html">mxnet::Array::ValueConverter</a></div><div class="ttdef"><b>Definition:</b> container.h:302</div></div>
<div class="ttc" id="classmxnet_1_1runtime_1_1ObjectRef_html"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html">mxnet::runtime::ObjectRef</a></div><div class="ttdoc">Base class of all object reference. </div><div class="ttdef"><b>Definition:</b> object.h:499</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a641d65835daceebf743dd0c683a5bdae"><div class="ttname"><a href="classmxnet_1_1Array.html#a641d65835daceebf743dd0c683a5bdae">mxnet::Array::Set</a></div><div class="ttdeci">void Set(size_t i, const T &amp;value)</div><div class="ttdoc">set i-th element of the array. </div><div class="ttdef"><b>Definition:</b> container.h:249</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a84854870831608e7fd061fa85fa5144b"><div class="ttname"><a href="classmxnet_1_1Array.html#a84854870831608e7fd061fa85fa5144b">mxnet::Array::begin</a></div><div class="ttdeci">iterator begin() const</div><div class="ttdef"><b>Definition:</b> container.h:316</div></div>
<div class="ttc" id="classmxnet_1_1IterAdapter_html_a9cee72dd6dfac15cbfd2ade31794e1b7"><div class="ttname"><a href="classmxnet_1_1IterAdapter.html#a9cee72dd6dfac15cbfd2ade31794e1b7">mxnet::IterAdapter::value_type</a></div><div class="ttdeci">typename Converter::ResultType value_type</div><div class="ttdef"><b>Definition:</b> container.h:58</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_aadd7404faea67e3af90867d18d1e0da6"><div class="ttname"><a href="classmxnet_1_1Array.html#aadd7404faea67e3af90867d18d1e0da6">mxnet::Array::Array</a></div><div class="ttdeci">Array(size_t n, const T &amp;val)</div><div class="ttdoc">Constructs a container with n elements. Each element is a copy of val. </div><div class="ttdef"><b>Definition:</b> container.h:159</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a3500d3ab395004b7323364f803874029"><div class="ttname"><a href="classmxnet_1_1Array.html#a3500d3ab395004b7323364f803874029">mxnet::Array::rend</a></div><div class="ttdeci">reverse_iterator rend() const</div><div class="ttdef"><b>Definition:</b> container.h:328</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a97a949de7fcd50039f8751fa93d9798a"><div class="ttname"><a href="classmxnet_1_1Array.html#a97a949de7fcd50039f8751fa93d9798a">mxnet::Array::rbegin</a></div><div class="ttdeci">reverse_iterator rbegin() const</div><div class="ttdef"><b>Definition:</b> container.h:324</div></div>
<div class="ttc" id="namespacemshadow_1_1expr_html_a78641f307f27330ec67149865eb2222f"><div class="ttname"><a href="namespacemshadow_1_1expr.html#a78641f307f27330ec67149865eb2222f">mshadow::expr::F</a></div><div class="ttdeci">BinaryMapExp&lt; OP, TA, ScalarExp&lt; MSHADOW_SCALAR_ &gt;, MSHADOW_SCALAR_,(ta|type::kMapper)&gt; F(const Exp&lt; TA, MSHADOW_SCALAR_, ta &gt; &amp;lhs, const ScalarExp&lt; MSHADOW_SCALAR_ &gt; &amp;rhs)</div><div class="ttdoc">operator overload for const </div><div class="ttdef"><b>Definition:</b> expr_scalar-inl.h:71</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a8072807d0c6f5b2a062d6f67ec6d0d34"><div class="ttname"><a href="classmxnet_1_1Array.html#a8072807d0c6f5b2a062d6f67ec6d0d34">mxnet::Array::operator=</a></div><div class="ttdeci">Array&lt; T &gt; &amp; operator=(Array&lt; T &gt; &amp;&amp;other)</div><div class="ttdoc">move assign operator </div><div class="ttdef"><b>Definition:</b> container.h:171</div></div>
<div class="ttc" id="classmxnet_1_1IterAdapter_html_a399f65ba22f7b009f23436cee436b440"><div class="ttname"><a href="classmxnet_1_1IterAdapter.html#a399f65ba22f7b009f23436cee436b440">mxnet::IterAdapter::operator==</a></div><div class="ttdeci">bool operator==(IterAdapter other) const</div><div class="ttdef"><b>Definition:</b> container.h:79</div></div>
<div class="ttc" id="classmxnet_1_1runtime_1_1Object_html"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html">mxnet::runtime::Object</a></div><div class="ttdoc">base class of all object containers. </div><div class="ttdef"><b>Definition:</b> object.h:149</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a9c11277e346b8a78155f3ff46f7a9298"><div class="ttname"><a href="classmxnet_1_1Array.html#a9c11277e346b8a78155f3ff46f7a9298">mxnet::Array::resize</a></div><div class="ttdeci">void resize(size_t size)</div><div class="ttdoc">Resize the array. </div><div class="ttdef"><b>Definition:</b> container.h:240</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a1e856b04be89c5f8e836cb5c6abed9a1"><div class="ttname"><a href="classmxnet_1_1Array.html#a1e856b04be89c5f8e836cb5c6abed9a1">mxnet::Array::push_back</a></div><div class="ttdeci">void push_back(const T &amp;item)</div><div class="ttdoc">push a new item to the back of the list </div><div class="ttdef"><b>Definition:</b> container.h:232</div></div>
<div class="ttc" id="classmxnet_1_1IterAdapter_html_a834abe6cc6ec9bad662bd98135d0d100"><div class="ttname"><a href="classmxnet_1_1IterAdapter.html#a834abe6cc6ec9bad662bd98135d0d100">mxnet::IterAdapter::operator!=</a></div><div class="ttdeci">bool operator!=(IterAdapter other) const</div><div class="ttdef"><b>Definition:</b> container.h:82</div></div>
<div class="ttc" id="classmxnet_1_1ArrayNode_html"><div class="ttname"><a href="classmxnet_1_1ArrayNode.html">mxnet::ArrayNode</a></div><div class="ttdoc">array node content in array </div><div class="ttdef"><b>Definition:</b> container.h:39</div></div>
<div class="ttc" id="classmxnet_1_1runtime_1_1ObjectRef_html_a5009d0661d741e4b105402b3126663e9"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">mxnet::runtime::ObjectRef::data_</a></div><div class="ttdeci">ObjectPtr&lt; Object &gt; data_</div><div class="ttdoc">Internal pointer that backs the reference. </div><div class="ttdef"><b>Definition:</b> object.h:572</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a2640d179bd36bea8c7a46aaeca5ae58e"><div class="ttname"><a href="classmxnet_1_1Array.html#a2640d179bd36bea8c7a46aaeca5ae58e">mxnet::Array::Array</a></div><div class="ttdeci">Array(const Array&lt; T &gt; &amp;other)</div><div class="ttdoc">copy constructor </div><div class="ttdef"><b>Definition:</b> container.h:122</div></div>
<div class="ttc" id="classmxnet_1_1IterAdapter_html_a20c65540ab9072b60d8ff0b2079c76bc"><div class="ttname"><a href="classmxnet_1_1IterAdapter.html#a20c65540ab9072b60d8ff0b2079c76bc">mxnet::IterAdapter::difference_type</a></div><div class="ttdeci">typename std::iterator_traits&lt; TIter &gt;::difference_type difference_type</div><div class="ttdef"><b>Definition:</b> container.h:57</div></div>
<div class="ttc" id="structmxnet_1_1Array_1_1ValueConverter_html_acec87be634e2aa1f36b1f0d7b703f3ba"><div class="ttname"><a href="structmxnet_1_1Array_1_1ValueConverter.html#acec87be634e2aa1f36b1f0d7b703f3ba">mxnet::Array::ValueConverter::ResultType</a></div><div class="ttdeci">T ResultType</div><div class="ttdef"><b>Definition:</b> container.h:303</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_aed953611d4d515eef787cc2f30f76599"><div class="ttname"><a href="classmxnet_1_1Array.html#aed953611d4d515eef787cc2f30f76599">mxnet::Array::MutateByApply</a></div><div class="ttdeci">void MutateByApply(F fmutate)</div><div class="ttdoc">Helper function to apply fmutate to mutate an array. </div><div class="ttdef"><b>Definition:</b> container.h:264</div></div>
<div class="ttc" id="classmxnet_1_1Array_html"><div class="ttname"><a href="classmxnet_1_1Array.html">mxnet::Array</a></div><div class="ttdoc">Array container of NodeRef in DSL graph. Array implements copy on write semantics, which means array is mutable but copy will happen when array is referenced in more than two places. </div><div class="ttdef"><b>Definition:</b> container.h:103</div></div>
<div class="ttc" id="classmxnet_1_1IterAdapter_html_a1a4790aff91c0c8fd5758ac1fbf76021"><div class="ttname"><a href="classmxnet_1_1IterAdapter.html#a1a4790aff91c0c8fd5758ac1fbf76021">mxnet::IterAdapter::iterator_category</a></div><div class="ttdeci">typename std::iterator_traits&lt; TIter &gt;::iterator_category iterator_category</div><div class="ttdef"><b>Definition:</b> container.h:61</div></div>
<div class="ttc" id="classmxnet_1_1IterAdapter_html_a4d55c9a57e6721a847f3b66e360873a1"><div class="ttname"><a href="classmxnet_1_1IterAdapter.html#a4d55c9a57e6721a847f3b66e360873a1">mxnet::IterAdapter::operator*</a></div><div class="ttdeci">const value_type operator*() const</div><div class="ttdef"><b>Definition:</b> container.h:85</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a00c3797ab4a9fbddbf191652bef44809"><div class="ttname"><a href="classmxnet_1_1Array.html#a00c3797ab4a9fbddbf191652bef44809">mxnet::Array::Array</a></div><div class="ttdeci">Array(Array&lt; T &gt; &amp;&amp;other)</div><div class="ttdoc">move constructor </div><div class="ttdef"><b>Definition:</b> container.h:115</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a68d4cd81b6175aa7532234fae2cb5d59"><div class="ttname"><a href="classmxnet_1_1Array.html#a68d4cd81b6175aa7532234fae2cb5d59">mxnet::Array::Array</a></div><div class="ttdeci">Array()</div><div class="ttdoc">default constructor </div><div class="ttdef"><b>Definition:</b> container.h:108</div></div>
<div class="ttc" id="classmxnet_1_1ArrayNode_html_aaf7147a1c0d7d07ee03dc1ad4ce2a866"><div class="ttname"><a href="classmxnet_1_1ArrayNode.html#aaf7147a1c0d7d07ee03dc1ad4ce2a866">mxnet::ArrayNode::_type_key</a></div><div class="ttdeci">static constexpr const char * _type_key</div><div class="ttdef"><b>Definition:</b> container.h:44</div></div>
<div class="ttc" id="classmxnet_1_1IterAdapter_html"><div class="ttname"><a href="classmxnet_1_1IterAdapter.html">mxnet::IterAdapter</a></div><div class="ttdoc">iterator adapter that adapts TIter to return another type. </div><div class="ttdef"><b>Definition:</b> container.h:55</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_ab973c70d95c2813049a9376853628afe"><div class="ttname"><a href="classmxnet_1_1Array.html#ab973c70d95c2813049a9376853628afe">mxnet::Array::Array</a></div><div class="ttdeci">Array(const std::vector&lt; T &gt; &amp;init)</div><div class="ttdoc">constructor from vector </div><div class="ttdef"><b>Definition:</b> container.h:151</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_aee1c5a8e4fae05ed35f4e6fc009d3997"><div class="ttname"><a href="classmxnet_1_1Array.html#aee1c5a8e4fae05ed35f4e6fc009d3997">mxnet::Array::Array</a></div><div class="ttdeci">Array(runtime::ObjectPtr&lt; Object &gt; n)</div><div class="ttdoc">constructor from pointer </div><div class="ttdef"><b>Definition:</b> container.h:129</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a75dc7b5ab19d402fda807b7108eda4ef"><div class="ttname"><a href="classmxnet_1_1Array.html#a75dc7b5ab19d402fda807b7108eda4ef">mxnet::Array::Array</a></div><div class="ttdeci">Array(IterType begin, IterType end)</div><div class="ttdoc">constructor from iterator </div><div class="ttdef"><b>Definition:</b> container.h:137</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_a9095f1bac4bfa8eec9f4c080dba54d8f"><div class="ttname"><a href="classmxnet_1_1Array.html#a9095f1bac4bfa8eec9f4c080dba54d8f">mxnet::Array::assign</a></div><div class="ttdeci">void assign(IterType begin, IterType end)</div><div class="ttdoc">reset the array to content from iterator. </div><div class="ttdef"><b>Definition:</b> container.h:191</div></div>
<div class="ttc" id="classmxnet_1_1Array_html_aef1832eb8be445cbd5fbf2a886676756"><div class="ttname"><a href="classmxnet_1_1Array.html#aef1832eb8be445cbd5fbf2a886676756">mxnet::Array::size</a></div><div class="ttdeci">size_t size() const</div><div class="ttdef"><b>Definition:</b> container.h:208</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 5 2023 00:58:42 for mxnet by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>