blob: d3df7a08eab23dd9ddca461211970a60b8fb7fc1 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mxnet: /work/mxnet/include/mxnet/runtime/object.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.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_8e7a93613ef4c7e7d673effa691c1739.html">runtime</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">object.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="object_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_RUNTIME_OBJECT_H_</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#define MXNET_RUNTIME_OBJECT_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;dmlc/logging.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="c__runtime__api_8h.html">c_runtime_api.h</a>&quot;</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#ifndef MXNET_OBJECT_ATOMIC_REF_COUNTER</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="object_8h.html#adc74fdc9e36de8e4ab39ecba73860cf5"> 40</a></span>&#160;<span class="preprocessor">#define MXNET_OBJECT_ATOMIC_REF_COUNTER 1</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#if MXNET_OBJECT_ATOMIC_REF_COUNTER</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#include &lt;atomic&gt;</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#endif // MXNET_OBJECT_ATOMIC_REF_COUNTER</span></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;<span class="keyword">namespace </span><a class="code" href="namespacemxnet.html">mxnet</a> {</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="keyword">namespace </span>runtime {</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfac"> 51</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfac">TypeIndex</a> {</div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacac8749d8889e8fe72a6d698277b764458"> 53</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacac8749d8889e8fe72a6d698277b764458">kRoot</a> = 0,</div>
<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca6539f6af501dc67fd6c8fb3d1cb2193d"> 54</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca6539f6af501dc67fd6c8fb3d1cb2193d">kMXNetTensor</a> = 1,</div>
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca008b7567e2fed8aebf4573d88a301ef0"> 55</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca008b7567e2fed8aebf4573d88a301ef0">kMXNetClosure</a> = 2,</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacad6ac6a2d56e9b7f262d920def44509bf"> 56</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacad6ac6a2d56e9b7f262d920def44509bf">kMXNetADT</a> = 3,</div>
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca7e465197746c27c835cadd7ee0cef82f"> 57</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca7e465197746c27c835cadd7ee0cef82f">kMXNetMap</a> = 4,</div>
<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca979d4bd568d6e9233185b070f4d4a740"> 58</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca979d4bd568d6e9233185b070f4d4a740">kMXNetString</a> = 5,</div>
<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca4efd65b5689dcc24c7316695c2f60c73"> 59</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca4efd65b5689dcc24c7316695c2f60c73">kEllipsis</a> = 6,</div>
<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca226facde4854260861fcc447b24b142d"> 60</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca226facde4854260861fcc447b24b142d">kSlice</a> = 7,</div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacaf69f7723764834392643025c927bfe98"> 61</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacaf69f7723764834392643025c927bfe98">kInteger</a> = 8,</div>
<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca2067f61f6fc0183c68ab067c32c83d00"> 62</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca2067f61f6fc0183c68ab067c32c83d00">kFloat</a> = 9,</div>
<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca0d2ba2c4bdfe4ad90c0ca4e513d72d9f"> 63</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca0d2ba2c4bdfe4ad90c0ca4e513d72d9f">kStaticIndexEnd</a>,</div>
<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca6e3caaf791147e40ff557f272f15b8cb"> 65</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca6e3caaf791147e40ff557f272f15b8cb">kDynamic</a> = <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca0d2ba2c4bdfe4ad90c0ca4e513d72d9f">kStaticIndexEnd</a></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;};</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html"> 151</a></span>&#160;<span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a> {</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a0fab6c32914322b17bca50b3abc29a4a"> 157</a></span>&#160; <span class="keyword">typedef</span> void (*<a class="code" href="classmxnet_1_1runtime_1_1Object.html#a0fab6c32914322b17bca50b3abc29a4a">FDeleter</a>)(<a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>* <span class="keyword">self</span>);</div>
<div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a8fc23a4d42050cae4615e0b030fc59c5"> 159</a></span>&#160; uint32_t <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a8fc23a4d42050cae4615e0b030fc59c5">type_index</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a9431b125b4a027ba5022422eacff8943">type_index_</a>;</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div>
<div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a243c8da6e57878bd349ed7dac4abd238"> 166</a></span>&#160; std::string <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a243c8da6e57878bd349ed7dac4abd238">GetTypeKey</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a38af2a13b570006a5760541f4a5ef6d0">TypeIndex2Key</a>(<a class="code" href="classmxnet_1_1runtime_1_1Object.html#a9431b125b4a027ba5022422eacff8943">type_index_</a>);</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div>
<div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a601d73a606b24f7fb4fb408ebd4af184"> 172</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a601d73a606b24f7fb4fb408ebd4af184">GetTypeKeyHash</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a9a3015981ca2719dc1997d4b59f3bd95">TypeIndex2KeyHash</a>(<a class="code" href="classmxnet_1_1runtime_1_1Object.html#a9431b125b4a027ba5022422eacff8943">type_index_</a>);</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"> 180</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> TargetType&gt;</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#ae3923f7e6cdf9b2ddd643cf55951f81d">IsInstance</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; </div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="include_2mxnet_2c__api_8h.html#a5b0e47dde55f9b2f58b99fab92d1e0ac">MXNET_DLL</a> <span class="keyword">static</span> std::string <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a38af2a13b570006a5760541f4a5ef6d0">TypeIndex2Key</a>(uint32_t tindex);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="include_2mxnet_2c__api_8h.html#a5b0e47dde55f9b2f58b99fab92d1e0ac">MXNET_DLL</a> <span class="keyword">static</span> <span class="keywordtype">size_t</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a9a3015981ca2719dc1997d4b59f3bd95">TypeIndex2KeyHash</a>(uint32_t tindex);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <a class="code" href="include_2mxnet_2c__api_8h.html#a5b0e47dde55f9b2f58b99fab92d1e0ac">MXNET_DLL</a> <span class="keyword">static</span> uint32_t <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a187981a221881175d58e94c66b9689d1">TypeKey2Index</a>(<span class="keyword">const</span> std::string&amp; key);</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="preprocessor">#if MXNET_OBJECT_ATOMIC_REF_COUNTER</span></div>
<div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#abe59637cab2011bdf475325399d90b6e"> 203</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#abe59637cab2011bdf475325399d90b6e">RefCounterType</a> = std::atomic&lt;int32_t&gt;;</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">using</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#abe59637cab2011bdf475325399d90b6e">RefCounterType</a> = int32_t;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; </div>
<div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a237ab83f51a0bfd0e2d9332e41fa543d"> 208</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_1runtime_1_1Object.html#a237ab83f51a0bfd0e2d9332e41fa543d">_type_key</a> = <span class="stringliteral">&quot;Object&quot;</span>;</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; </div>
<div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a9a14f0cacdb1dc322de5b98714450586"> 210</a></span>&#160; <span class="keyword">static</span> uint32_t <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a9a14f0cacdb1dc322de5b98714450586">_GetOrAllocRuntimeTypeIndex</a>() {</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacac8749d8889e8fe72a6d698277b764458">TypeIndex::kRoot</a>;</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div>
<div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a78ee34d8088ac6e5eff7d285826f2dcd"> 213</a></span>&#160; <span class="keyword">static</span> uint32_t <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a78ee34d8088ac6e5eff7d285826f2dcd">RuntimeTypeIndex</a>() {</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacac8749d8889e8fe72a6d698277b764458">TypeIndex::kRoot</a>;</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; </div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// Default object type properties for sub-classes</span></div>
<div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a76ba66366d1583d5532bd93b13e4f835"> 218</a></span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a76ba66366d1583d5532bd93b13e4f835">_type_final</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a370bf83f2f2dcc8be2aca8e34ad67609"> 219</a></span>&#160; <span class="keyword">static</span> constexpr uint32_t <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a370bf83f2f2dcc8be2aca8e34ad67609">_type_child_slots</a> = 0;</div>
<div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#aa7b4b8548044af9c3114876999dcbf3b"> 220</a></span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#aa7b4b8548044af9c3114876999dcbf3b">_type_child_slots_can_overflow</a> = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// NOTE: the following field is not type index of Object</span></div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="comment">// but was intended to be used by sub-classes as default value.</span></div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="comment">// The type index of Object is TypeIndex::kRoot</span></div>
<div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a5d66c402d6200f039e5c89f2f54f8589"> 224</a></span>&#160; <span class="keyword">static</span> constexpr uint32_t <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a5d66c402d6200f039e5c89f2f54f8589">_type_index</a> = <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca6e3caaf791147e40ff557f272f15b8cb">TypeIndex::kDynamic</a>;</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="comment">// Default constructor and copy constructor</span></div>
<div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a0123f4844d5cc81b80cf3da86e41aa3b"> 227</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a0123f4844d5cc81b80cf3da86e41aa3b">Object</a>() {}</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="comment">// Override the copy and assign constructors to do nothing.</span></div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// This is to make sure only contents, but not deleter and ref_counter</span></div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="comment">// are copied when a child class copies itself.</span></div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="comment">// This will enable us to use make_object&lt;ObjectClass&gt;(*obj_ptr)</span></div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="comment">// to copy an existing object.</span></div>
<div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a485351b0d6fd7d19e71b60529c40d339"> 233</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a485351b0d6fd7d19e71b60529c40d339">Object</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>&amp; other) { <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div>
<div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#af93b865cbd7c4afc76af89c7befd26a4"> 235</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1Object.html#af93b865cbd7c4afc76af89c7befd26a4">Object</a>(<a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>&amp;&amp; other) { <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div>
<div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#aa44606b99d3488f21b5290a7c046264a"> 237</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>&amp; <a class="code" href="classmxnet_1_1runtime_1_1Object.html#aa44606b99d3488f21b5290a7c046264a">operator=</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>&amp; other) { <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div>
<div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a96443fb87c46521a0f5177893d70cba9"> 240</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>&amp; <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a96443fb87c46521a0f5177893d70cba9">operator=</a>(<a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>&amp;&amp; other) { <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; </div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keyword">protected</span>:</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// The fields of the base object cell.</span></div>
<div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a9431b125b4a027ba5022422eacff8943"> 247</a></span>&#160;<span class="comment"></span> uint32_t <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a9431b125b4a027ba5022422eacff8943">type_index_</a>{0};</div>
<div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a14c68426d247442b13cc74af612d7ccd"> 249</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1Object.html#abe59637cab2011bdf475325399d90b6e">RefCounterType</a> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a14c68426d247442b13cc74af612d7ccd">ref_counter_</a>{0};</div>
<div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a1ee4c8cd5747637a3c8a8499cd5745cc"> 255</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a0fab6c32914322b17bca50b3abc29a4a">FDeleter</a> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a1ee4c8cd5747637a3c8a8499cd5745cc">deleter_</a> = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// Invariant checks.</span></div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; static_assert(<span class="keyword">sizeof</span>(int32_t) == <span class="keyword">sizeof</span>(<a class="code" href="classmxnet_1_1runtime_1_1Object.html#abe59637cab2011bdf475325399d90b6e">RefCounterType</a>) &amp;&amp;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">alignof</span>(int32_t) == <span class="keyword">sizeof</span>(<a class="code" href="classmxnet_1_1runtime_1_1Object.html#abe59637cab2011bdf475325399d90b6e">RefCounterType</a>),</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="stringliteral">&quot;RefCounter ABI check.&quot;</span>);</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; </div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="include_2mxnet_2c__api_8h.html#a5b0e47dde55f9b2f58b99fab92d1e0ac">MXNET_DLL</a> <span class="keyword">static</span> uint32_t <a class="code" href="classmxnet_1_1runtime_1_1Object.html#ab76cef683c1b9471fea079c2f3d6fa67">GetOrAllocRuntimeTypeIndex</a>(<span class="keyword">const</span> std::string&amp; key,</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; uint32_t static_tindex,</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; uint32_t parent_tindex,</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; uint32_t type_child_slots,</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordtype">bool</span> type_child_slots_can_overflow);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; </div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="comment">// reference counter related operations</span></div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="comment"></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a4364e8a2c082e03a293bcab8a8ca5d62">IncRef</a>();</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a56610510e619c64a904ed607fddfd3cc">DecRef</a>();</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; </div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">int</span> use_count() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="include_2mxnet_2c__api_8h.html#a5b0e47dde55f9b2f58b99fab92d1e0ac">MXNET_DLL</a> <span class="keywordtype">bool</span> DerivedFrom(uint32_t parent_tindex) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// friend classes</span></div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>&gt;</div>
<div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a8fae619f3bd1a2b2f7273d8d6525032a"> 307</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1ObjAllocatorBase.html">ObjAllocatorBase</a>;</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>&gt;</div>
<div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a4193bb155125953e77ded93c0fb46965"> 309</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr</a>;</div>
<div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a82aa089816e7ff294eecf5c1bc1165cf"> 310</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1MXNetRetValue.html">MXNetRetValue</a>;</div>
<div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a4a8e2a2ce9dc9267dc18ac8abfd8dd16"> 311</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1Object.html#a4a8e2a2ce9dc9267dc18ac8abfd8dd16">ObjectInternal</a>;</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;};</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; </div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> RefType, <span class="keyword">typename</span> ObjectType&gt;</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="keyword">inline</span> RefType <a class="code" href="namespacemxnet_1_1runtime.html#a1bf05d799bd2a8ee18e9ef22335977ce">GetRef</a>(<span class="keyword">const</span> ObjectType* ptr);</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; </div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SubRef, <span class="keyword">typename</span> BaseRef&gt;</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="keyword">inline</span> SubRef <a class="code" href="namespacemxnet_1_1runtime.html#a6071ce524d51caddd366e0fb1827b081">Downcast</a>(BaseRef ref);</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; </div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html"> 346</a></span>&#160;<span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr</a> {</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00349"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2370d07eb6aa55ac558a16efd3bc808c"> 349</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2370d07eb6aa55ac558a16efd3bc808c">ObjectPtr</a>() {}</div>
<div class="line"><a name="l00351"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#afebccea2f9d38c9d05ec38e5c4517c39"> 351</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#afebccea2f9d38c9d05ec38e5c4517c39">ObjectPtr</a>(std::nullptr_t) {} <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2939627a7312750a047cfd6290df2430"> 356</a></span>&#160;<span class="comment"></span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2939627a7312750a047cfd6290df2430">ObjectPtr</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;T&gt;</a>&amp; other) <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; : <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr</a>(other.data_) {}</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> U&gt;</div>
<div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ac2584940341e387fde0074c5bf1cb734"> 363</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ac2584940341e387fde0074c5bf1cb734">ObjectPtr</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;U&gt;</a>&amp; other) <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; : <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr</a>(other.data_) {</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; static_assert(std::is_base_of&lt;T, U&gt;::value,</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="stringliteral">&quot;can only assign of child class ObjectPtr to parent&quot;</span>);</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div>
<div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a6b1f12f204c7df2fadfd0b79c5707ca7"> 372</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a6b1f12f204c7df2fadfd0b79c5707ca7">ObjectPtr</a>(<a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;T&gt;</a>&amp;&amp; other) <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; : data_(other.data_) {</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; other.data_ = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Y&gt;</div>
<div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#adbb3a73c7af867832670c54db3ae3529"> 381</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#adbb3a73c7af867832670c54db3ae3529">ObjectPtr</a>(<a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;Y&gt;</a>&amp;&amp; other) <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; : data_(other.data_) {</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; static_assert(std::is_base_of&lt;T, Y&gt;::value,</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="stringliteral">&quot;can only assign of child class ObjectPtr to parent&quot;</span>);</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; other.data_ = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; }</div>
<div class="line"><a name="l00388"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#acce6b5e9bae80e955b348a02947ad753"> 388</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#acce6b5e9bae80e955b348a02947ad753">~ObjectPtr</a>() {</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; this-&gt;<a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a78e425a503521d4e442b1218b2d98065">reset</a>();</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div>
<div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a3c1900ca3e591322ace70b07453ebfff"> 395</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a3c1900ca3e591322ace70b07453ebfff">swap</a>(<a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;T&gt;</a>&amp; other) { <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; std::swap(data_, other.data_);</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div>
<div class="line"><a name="l00401"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aae8d61e486de81ed0aa4b1f038dc9d2d"> 401</a></span>&#160; T* <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aae8d61e486de81ed0aa4b1f038dc9d2d">get</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>T*<span class="keyword">&gt;</span>(data_);</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div>
<div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ab4544b82678db98b2ae87b9928f87c57"> 407</a></span>&#160; T* <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ab4544b82678db98b2ae87b9928f87c57">operator-&gt;</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aae8d61e486de81ed0aa4b1f038dc9d2d">get</a>();</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</div>
<div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aa8f4891c1a34a0447aadae150adc5f82"> 413</a></span>&#160; T&amp; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aa8f4891c1a34a0447aadae150adc5f82">operator*</a>()<span class="keyword"> const </span>{ <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">return</span> *<a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aae8d61e486de81ed0aa4b1f038dc9d2d">get</a>();</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; }</div>
<div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ac4584a37844cdbb4b21fddca1d434ab3"> 421</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;T&gt;</a>&amp; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ac4584a37844cdbb4b21fddca1d434ab3">operator=</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;T&gt;</a>&amp; other) { <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// takes in plane operator to enable copy elison.</span></div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="comment">// copy-and-swap idiom</span></div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a4193bb155125953e77ded93c0fb46965">ObjectPtr</a>(other).swap(*<span class="keyword">this</span>); <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; }</div>
<div class="line"><a name="l00432"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a800781cf49cef6823c94f216a3dbeeac"> 432</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;T&gt;</a>&amp; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a800781cf49cef6823c94f216a3dbeeac">operator=</a>(<a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;T&gt;</a>&amp;&amp; other) { <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="comment">// copy-and-swap idiom</span></div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a4193bb155125953e77ded93c0fb46965">ObjectPtr</a>(std::move(other)).swap(*<span class="keyword">this</span>); <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; }</div>
<div class="line"><a name="l00438"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a78e425a503521d4e442b1218b2d98065"> 438</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a78e425a503521d4e442b1218b2d98065">reset</a>() {</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordflow">if</span> (data_ != <span class="keyword">nullptr</span>) {</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; data_-&gt;<a class="code" href="classmxnet_1_1runtime_1_1Object.html#a56610510e619c64a904ed607fddfd3cc">DecRef</a>();</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; data_ = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; }</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; }</div>
<div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aa660c8746d32ac38f19dd996c35eeda2"> 445</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aa660c8746d32ac38f19dd996c35eeda2">use_count</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">return</span> data_ != <span class="keyword">nullptr</span> ? data_-&gt;use_count() : 0;</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div>
<div class="line"><a name="l00449"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2b3ac2e2b420b9169f39a0a3b254ff1d"> 449</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2b3ac2e2b420b9169f39a0a3b254ff1d">unique</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">return</span> data_ != <span class="keyword">nullptr</span> &amp;&amp; data_-&gt;use_count() == 1;</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</div>
<div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a210f13a73970c21ba236534df8170bda"> 453</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a210f13a73970c21ba236534df8170bda">operator==</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;T&gt;</a>&amp; other)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordflow">return</span> data_ == other.data_;</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div>
<div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aaf17bfe732286c5730307f9fa5bd3404"> 457</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aaf17bfe732286c5730307f9fa5bd3404">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;T&gt;</a>&amp; other)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">return</span> data_ != other.data_;</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div>
<div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a311a5cd3c288c794b8e6270aab76ad61"> 461</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a311a5cd3c288c794b8e6270aab76ad61">operator==</a>(std::nullptr_t <span class="keyword">null</span>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">return</span> data_ == <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; }</div>
<div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a241d4dccd6ab11adcdebc6ae7dc0ee1e"> 465</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a241d4dccd6ab11adcdebc6ae7dc0ee1e">operator!=</a>(std::nullptr_t <span class="keyword">null</span>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keywordflow">return</span> data_ != <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; }</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; </div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>* data_{<span class="keyword">nullptr</span>};</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a4193bb155125953e77ded93c0fb46965">ObjectPtr</a>(<a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>* data) : data_(data) {</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">if</span> (data != <span class="keyword">nullptr</span>) {</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; data_-&gt;<a class="code" href="classmxnet_1_1runtime_1_1Object.html#a4364e8a2c082e03a293bcab8a8ca5d62">IncRef</a>();</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; }</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; }</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="comment">// friend classes</span></div>
<div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a0720b5f434e636e22a3ed34f847eec57"> 482</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>;</div>
<div class="line"><a name="l00483"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a5d7d1b555fd908e511caa42bd7ccfc71"> 483</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a>;</div>
<div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a7191cb82e9344bec1b5fd20f45b289f1"> 484</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">struct </span><a class="code" href="structmxnet_1_1runtime_1_1ObjectHash.html">ObjectHash</a>;</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>&gt;</div>
<div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a4193bb155125953e77ded93c0fb46965"> 486</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr</a>;</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>&gt;</div>
<div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a8fae619f3bd1a2b2f7273d8d6525032a"> 488</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1ObjAllocatorBase.html">ObjAllocatorBase</a>;</div>
<div class="line"><a name="l00489"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ada51c7f37c7562f9453a19c41bee8e7f"> 489</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1MXNetPODValue__.html">MXNetPODValue_</a>;</div>
<div class="line"><a name="l00490"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a0589aedf749aa4d55e73539f5b135a24"> 490</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1MXNetArgsSetter.html">MXNetArgsSetter</a>;</div>
<div class="line"><a name="l00491"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a82aa089816e7ff294eecf5c1bc1165cf"> 491</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1MXNetRetValue.html">MXNetRetValue</a>;</div>
<div class="line"><a name="l00492"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ae5234e78dc20faaf78ff210f37f023ea"> 492</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1MXNetArgValue.html">MXNetArgValue</a>;</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> RefType, <span class="keyword">typename</span> ObjType&gt;</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keyword">friend</span> RefType <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ac798b7092b8c4c6665631be6db1d4327">GetRef</a>(<span class="keyword">const</span> ObjType* ptr);</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> BaseType, <span class="keyword">typename</span> ObjType&gt;</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keyword">friend</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;BaseType&gt;</a> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2d849c83a86bbe7e86022b3d6cfc5ee4">GetObjectPtr</a>(ObjType* ptr);</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;};</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; </div>
<div class="line"><a name="l00500"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html"> 500</a></span>&#160;<span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a> {</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a1eeff522c6cb7503f2f2205bc69c0fce">ObjectRef</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a name="l00505"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a075f794b50f9d9d89d3d31930a1bc38c"> 505</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a075f794b50f9d9d89d3d31930a1bc38c">ObjectRef</a>(<a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;Object&gt;</a> data) : <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>(data) {}</div>
<div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a95de2a92783738031bf76edc2be7a6bd"> 511</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a95de2a92783738031bf76edc2be7a6bd">same_as</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a>&amp; other)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a> == other.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>;</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; }</div>
<div class="line"><a name="l00519"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a9c75bdd6446ab1a6dec9ee366efd1da9"> 519</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a9c75bdd6446ab1a6dec9ee366efd1da9">operator==</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a>&amp; other)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a> == other.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>;</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div>
<div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a7ae5d37afb7f966c2707a66044229c82"> 527</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a7ae5d37afb7f966c2707a66044229c82">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a>&amp; other)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a> != other.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>;</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div>
<div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#aceed1d04b67619c94bc56c43a4909ad5"> 535</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#aceed1d04b67619c94bc56c43a4909ad5">operator&lt;</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a>&amp; other)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>.get() &lt; other.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>.get();</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div>
<div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a92c53ce7ca3184bde4e9e81ae278a30c"> 539</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a92c53ce7ca3184bde4e9e81ae278a30c">defined</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a> != <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; }</div>
<div class="line"><a name="l00543"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#af10de3ce2f4984f44a4ab6341aaef3e0"> 543</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>* <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#af10de3ce2f4984f44a4ab6341aaef3e0">get</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>.get();</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; }</div>
<div class="line"><a name="l00547"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a0ebb92d820a0fe8cc96674308fbe22d5"> 547</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>* <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a0ebb92d820a0fe8cc96674308fbe22d5">operator-&gt;</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#af10de3ce2f4984f44a4ab6341aaef3e0">get</a>();</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; }</div>
<div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a80e8bafaec687dacf9ca846de4a96c34"> 551</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a80e8bafaec687dacf9ca846de4a96c34">unique</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>.unique();</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> ObjectType&gt;</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> ObjectType* <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a2501a43190c64c4a711281d425a87745">as</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; </div>
<div class="line"><a name="l00569"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#afb17c6afa35f39c755d92fa2090fe0af"> 569</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html">ContainerType</a> = <a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>;</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="comment">// Default type properties for the reference class.</span></div>
<div class="line"><a name="l00571"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#afc86d7a50bae231e91a03b3b98345709"> 571</a></span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#afc86d7a50bae231e91a03b3b98345709">_type_is_nullable</a> = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; </div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keyword">protected</span>:</div>
<div class="line"><a name="l00575"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9"> 575</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;Object&gt;</a> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>;</div>
<div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a31c9848521afd783f4eae179fb7717e5"> 577</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>* <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a31c9848521afd783f4eae179fb7717e5">get_mutable</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>.get();</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; }</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00587"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#ab5adba2e735bd310635cf9dfa1799e9c"> 587</a></span>&#160; <span class="keyword">static</span> T <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#ab5adba2e735bd310635cf9dfa1799e9c">DowncastNoCheck</a>(<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a> ref) {</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">return</span> T(std::move(ref.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>));</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; }</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> ObjectType&gt;</div>
<div class="line"><a name="l00597"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a44873861fe3a0ee963314402eb3e1f47"> 597</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;ObjectType&gt;</a> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a44873861fe3a0ee963314402eb3e1f47">GetDataPtr</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a>&amp; ref) {</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;ObjectType&gt;</a>(ref.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>.data_);</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; }</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="comment">// friend classes.</span></div>
<div class="line"><a name="l00601"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a7191cb82e9344bec1b5fd20f45b289f1"> 601</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">struct </span><a class="code" href="structmxnet_1_1runtime_1_1ObjectHash.html">ObjectHash</a>;</div>
<div class="line"><a name="l00602"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a82aa089816e7ff294eecf5c1bc1165cf"> 602</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1MXNetRetValue.html">MXNetRetValue</a>;</div>
<div class="line"><a name="l00603"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a0589aedf749aa4d55e73539f5b135a24"> 603</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmxnet_1_1runtime_1_1MXNetArgsSetter.html">MXNetArgsSetter</a>;</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SubRef, <span class="keyword">typename</span> BaseRef&gt;</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keyword">friend</span> SubRef <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a68c32a41efd1aa99afca70837565cced">Downcast</a>(BaseRef ref);</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;};</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; </div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> BaseType, <span class="keyword">typename</span> ObjectType&gt;</div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;<span class="keyword">inline</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;BaseType&gt;</a> <a class="code" href="namespacemxnet_1_1runtime.html#a68c6b45a7469783b09a1b2b03211056d">GetObjectPtr</a>(ObjectType* ptr);</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; </div>
<div class="line"><a name="l00620"></a><span class="lineno"><a class="line" href="structmxnet_1_1runtime_1_1ObjectHash.html"> 620</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structmxnet_1_1runtime_1_1ObjectHash.html">ObjectHash</a> {</div>
<div class="line"><a name="l00621"></a><span class="lineno"><a class="line" href="structmxnet_1_1runtime_1_1ObjectHash.html#ae69609e78a2a4c05b72f8826478aad62"> 621</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="structmxnet_1_1runtime_1_1ObjectHash.html#ae69609e78a2a4c05b72f8826478aad62">operator()</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a>&amp; a)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structmxnet_1_1runtime_1_1ObjectHash.html#ae69609e78a2a4c05b72f8826478aad62">operator()</a>(a.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>);</div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; }</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; </div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00626"></a><span class="lineno"><a class="line" href="structmxnet_1_1runtime_1_1ObjectHash.html#afad20ba2da8654fdbb2f3f9031b5db49"> 626</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="structmxnet_1_1runtime_1_1ObjectHash.html#afad20ba2da8654fdbb2f3f9031b5db49">operator()</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;T&gt;</a>&amp; a)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keywordflow">return</span> std::hash&lt;Object*&gt;()(a.<a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aae8d61e486de81ed0aa4b1f038dc9d2d">get</a>());</div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; }</div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;};</div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; </div>
<div class="line"><a name="l00632"></a><span class="lineno"><a class="line" href="structmxnet_1_1runtime_1_1ObjectEqual.html"> 632</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structmxnet_1_1runtime_1_1ObjectEqual.html">ObjectEqual</a> {</div>
<div class="line"><a name="l00633"></a><span class="lineno"><a class="line" href="structmxnet_1_1runtime_1_1ObjectEqual.html#aee25e6ef78162bfc560e2d4ee26f04c8"> 633</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structmxnet_1_1runtime_1_1ObjectEqual.html#aee25e6ef78162bfc560e2d4ee26f04c8">operator()</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a>&amp; a, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a>&amp; b)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keywordflow">return</span> a.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a95de2a92783738031bf76edc2be7a6bd">same_as</a>(b);</div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; }</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; </div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="structmxnet_1_1runtime_1_1ObjectEqual.html#a6c58fae65009913eafafdaf1cf322b6f"> 638</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="structmxnet_1_1runtime_1_1ObjectEqual.html#a6c58fae65009913eafafdaf1cf322b6f">operator()</a>(<span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;T&gt;</a>&amp; a, <span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;T&gt;</a>&amp; b)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordflow">return</span> a == b;</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;};</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; </div>
<div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="object_8h.html#a07a1848f5230303d53fd9fcb05534fa0"> 648</a></span>&#160;<span class="preprocessor">#define MXNET_DECLARE_BASE_OBJECT_INFO(TypeName, ParentType) \</span></div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;<span class="preprocessor"> static uint32_t RuntimeTypeIndex() { \</span></div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;<span class="preprocessor"> return TypeName::_type_index != ::mxnet::runtime::TypeIndex::kDynamic ? \</span></div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;<span class="preprocessor"> TypeName::_type_index : \</span></div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;<span class="preprocessor"> _GetOrAllocRuntimeTypeIndex(); \</span></div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;<span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;<span class="preprocessor"> static uint32_t _GetOrAllocRuntimeTypeIndex() { \</span></div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;<span class="preprocessor"> static uint32_t tidx = GetOrAllocRuntimeTypeIndex(TypeName::_type_key, \</span></div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160;<span class="preprocessor"> TypeName::_type_index, \</span></div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;<span class="preprocessor"> ParentType::_GetOrAllocRuntimeTypeIndex(), \</span></div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;<span class="preprocessor"> TypeName::_type_child_slots, \</span></div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;<span class="preprocessor"> TypeName::_type_child_slots_can_overflow); \</span></div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;<span class="preprocessor"> return tidx; \</span></div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;<span class="preprocessor"> }</span></div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; </div>
<div class="line"><a name="l00668"></a><span class="lineno"><a class="line" href="object_8h.html#aff0db99c23ecb5cbf6c5b9134076a0f3"> 668</a></span>&#160;<span class="preprocessor">#define MXNET_DECLARE_FINAL_OBJECT_INFO(TypeName, ParentType) \</span></div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;<span class="preprocessor"> static const constexpr bool _type_final = true; \</span></div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;<span class="preprocessor"> static const constexpr int _type_child_slots = 0; \</span></div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;<span class="preprocessor"> MXNET_DECLARE_BASE_OBJECT_INFO(TypeName, ParentType)</span></div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; </div>
<div class="line"><a name="l00679"></a><span class="lineno"><a class="line" href="object_8h.html#a6b28c0e1dc09b67696ad1369794b89c6"> 679</a></span>&#160;<span class="preprocessor">#define MXNET_REGISTER_OBJECT_TYPE(TypeName) \</span></div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;<span class="preprocessor"> static DMLC_ATTRIBUTE_UNUSED uint32_t __make_Object_tidx##_##TypeName##__ = \</span></div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;<span class="preprocessor"> TypeName::_GetOrAllocRuntimeTypeIndex()</span></div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; </div>
<div class="line"><a name="l00683"></a><span class="lineno"><a class="line" href="object_8h.html#aca8339b2955cf301ab9dd1cf1211c654"> 683</a></span>&#160;<span class="preprocessor">#define MXNET_DEFINE_DEFAULT_COPY_MOVE_AND_ASSIGN(TypeName) \</span></div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;<span class="preprocessor"> TypeName(const TypeName&amp; other) = default; \</span></div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160;<span class="preprocessor"> TypeName(TypeName&amp;&amp; other) = default; \</span></div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;<span class="preprocessor"> TypeName&amp; operator=(const TypeName&amp; other) = default; \</span></div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160;<span class="preprocessor"> TypeName&amp; operator=(TypeName&amp;&amp; other) = default;</span></div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; </div>
<div class="line"><a name="l00689"></a><span class="lineno"><a class="line" href="object_8h.html#a3bbe3c8205ea8d2660b25c519306f04f"> 689</a></span>&#160;<span class="preprocessor">#define MXNET_DEFINE_OBJECT_REF_METHODS(TypeName, ParentType, ObjectName) \</span></div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;<span class="preprocessor"> TypeName() {} \</span></div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;<span class="preprocessor"> explicit TypeName(::mxnet::runtime::ObjectPtr&lt;::mxnet::runtime::Object&gt; n) : ParentType(n) {} \</span></div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;<span class="preprocessor"> const ObjectName* operator-&gt;() const { \</span></div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;<span class="preprocessor"> return static_cast&lt;const ObjectName*&gt;(data_.get()); \</span></div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;<span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160;<span class="preprocessor"> operator bool() const { \</span></div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;<span class="preprocessor"> return data_ != nullptr; \</span></div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160;<span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;<span class="preprocessor"> using ContainerType = ObjectName;</span></div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; </div>
<div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="object_8h.html#a715900fd588e08db3bad540c0ca0f7df"> 700</a></span>&#160;<span class="preprocessor">#define MXNET_DEFINE_OBJECT_REF_METHODS_MUT(TypeName, ParentType, ObjectName) \</span></div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;<span class="preprocessor"> TypeName() {} \</span></div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;<span class="preprocessor"> explicit TypeName(::mxnet::runtime::ObjectPtr&lt;::mxnet::runtime::Object&gt; n) : ParentType(n) {} \</span></div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;<span class="preprocessor"> ObjectName* operator-&gt;() { \</span></div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;<span class="preprocessor"> return static_cast&lt;ObjectName*&gt;(data_.get()); \</span></div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;<span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;<span class="preprocessor"> operator bool() const { \</span></div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;<span class="preprocessor"> return data_ != nullptr; \</span></div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;<span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;<span class="preprocessor"> using ContainerType = ObjectName;</span></div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; </div>
<div class="line"><a name="l00711"></a><span class="lineno"><a class="line" href="object_8h.html#a9d335946c1724e13777adbd176b43540"> 711</a></span>&#160;<span class="preprocessor">#define MXNET_DEFINE_NOTNULLABLE_OBJECT_REF_METHODS(TypeName, ParentType, ObjectName) \</span></div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;<span class="preprocessor"> explicit TypeName(::mxnet::runtime::ObjectPtr&lt;::mxnet::runtime::Object&gt; n) : ParentType(n) {} \</span></div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160;<span class="preprocessor"> MXNET_DEFINE_DEFAULT_COPY_MOVE_AND_ASSIGN(TypeName); \</span></div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;<span class="preprocessor"> const ObjectName* operator-&gt;() const { \</span></div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;<span class="preprocessor"> return static_cast&lt;const ObjectName*&gt;(data_.get()); \</span></div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;<span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;<span class="preprocessor"> const ObjectName* get() const { \</span></div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;<span class="preprocessor"> return operator-&gt;(); \</span></div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;<span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;<span class="preprocessor"> static constexpr bool _type_is_nullable = false; \</span></div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160;<span class="preprocessor"> using ContainerType = ObjectName;</span></div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; </div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;<span class="comment">// Implementations details below</span></div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;<span class="comment">// Object reference counting.</span></div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160;<span class="preprocessor">#if MXNET_OBJECT_ATOMIC_REF_COUNTER</span></div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; </div>
<div class="line"><a name="l00727"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a4364e8a2c082e03a293bcab8a8ca5d62"> 727</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a4364e8a2c082e03a293bcab8a8ca5d62">Object::IncRef</a>() {</div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a14c68426d247442b13cc74af612d7ccd">ref_counter_</a>.fetch_add(1, std::memory_order_relaxed);</div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;}</div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; </div>
<div class="line"><a name="l00731"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a56610510e619c64a904ed607fddfd3cc"> 731</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a56610510e619c64a904ed607fddfd3cc">Object::DecRef</a>() {</div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classmxnet_1_1runtime_1_1Object.html#a14c68426d247442b13cc74af612d7ccd">ref_counter_</a>.fetch_sub(1, std::memory_order_release) == 1) {</div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; std::atomic_thread_fence(std::memory_order_acquire);</div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">if</span> (this-&gt;deleter_ != <span class="keyword">nullptr</span>) {</div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; (*this-&gt;<a class="code" href="classmxnet_1_1runtime_1_1Object.html#a1ee4c8cd5747637a3c8a8499cd5745cc">deleter_</a>)(<span class="keyword">this</span>);</div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; }</div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; }</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;}</div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; </div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> Object::use_count()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a14c68426d247442b13cc74af612d7ccd">ref_counter_</a>.load(std::memory_order_relaxed);</div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160;}</div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; </div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; </div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a4364e8a2c082e03a293bcab8a8ca5d62">Object::IncRef</a>() {</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; ++<a class="code" href="classmxnet_1_1runtime_1_1Object.html#a14c68426d247442b13cc74af612d7ccd">ref_counter_</a>;</div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;}</div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; </div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a56610510e619c64a904ed607fddfd3cc">Object::DecRef</a>() {</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">if</span> (--ref_counter == 0) {</div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordflow">if</span> (this-&gt;deleter_ != <span class="keyword">nullptr</span>) {</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; (*this-&gt;<a class="code" href="classmxnet_1_1runtime_1_1Object.html#a1ee4c8cd5747637a3c8a8499cd5745cc">deleter_</a>)(<span class="keyword">this</span>);</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; }</div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; }</div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;}</div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; </div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> Object::use_count()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a14c68426d247442b13cc74af612d7ccd">ref_counter_</a>;</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160;}</div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; </div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;<span class="preprocessor">#endif // MXNET_OBJECT_ATOMIC_REF_COUNTER</span></div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; </div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> TargetType&gt;</div>
<div class="line"><a name="l00765"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#ae3923f7e6cdf9b2ddd643cf55951f81d"> 765</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html#ae3923f7e6cdf9b2ddd643cf55951f81d">Object::IsInstance</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>* <span class="keyword">self</span> = <span class="keyword">this</span>;</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <span class="comment">// NOTE: the following code can be optimized by</span></div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="comment">// compiler dead-code elimination for already known constants.</span></div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">self</span> != <span class="keyword">nullptr</span>) {</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="comment">// Everything is a subclass of object.</span></div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="keywordflow">if</span> (std::is_same&lt;TargetType, Object&gt;::value)</div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keywordflow">if</span> (TargetType::_type_final) {</div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="comment">// if the target type is a final type</span></div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="comment">// then we only need to check the equivalence.</span></div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>-&gt;<a class="code" href="classmxnet_1_1runtime_1_1Object.html#a9431b125b4a027ba5022422eacff8943">type_index_</a> == TargetType::RuntimeTypeIndex();</div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="comment">// if target type is a non-leaf type</span></div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="comment">// Check if type index falls into the range of reserved slots.</span></div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; uint32_t begin = TargetType::RuntimeTypeIndex();</div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="comment">// The condition will be optimized by constant-folding.</span></div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">if</span> (TargetType::_type_child_slots != 0) {</div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; uint32_t end = begin + TargetType::_type_child_slots;</div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keywordflow">if</span> (self-&gt;type_index_ &gt;= begin &amp;&amp; self-&gt;type_index_ &lt; end)</div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="keywordflow">if</span> (self-&gt;type_index_ == begin)</div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; }</div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keywordflow">if</span> (!TargetType::_type_child_slots_can_overflow)</div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="comment">// Invariance: parent index is always smaller than the child.</span></div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordflow">if</span> (self-&gt;type_index_ &lt; TargetType::RuntimeTypeIndex())</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="comment">// The rare slower-path, check type hierachy.</span></div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>-&gt;DerivedFrom(TargetType::RuntimeTypeIndex());</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; }</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; }</div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;}</div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; </div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ObjectType&gt;</div>
<div class="line"><a name="l00804"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a2501a43190c64c4a711281d425a87745"> 804</a></span>&#160;<span class="keyword">inline</span> <span class="keyword">const</span> ObjectType* <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a2501a43190c64c4a711281d425a87745">ObjectRef::as</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a> != <span class="keyword">nullptr</span> &amp;&amp; <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>-&gt;IsInstance&lt;ObjectType&gt;()) {</div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>ObjectType*<span class="keyword">&gt;</span>(<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>.get());</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; }</div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;}</div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; </div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> RefType, <span class="keyword">typename</span> ObjType&gt;</div>
<div class="line"><a name="l00813"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#ab16bad32a0ce5d28b9201a6998b4a6d2"> 813</a></span>&#160;<span class="keyword">inline</span> RefType <a class="code" href="namespacemxnet_1_1runtime.html#a1bf05d799bd2a8ee18e9ef22335977ce">GetRef</a>(<span class="keyword">const</span> ObjType* ptr) {</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; static_assert(std::is_base_of&lt;typename RefType::ContainerType, ObjType&gt;::value,</div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="stringliteral">&quot;Can only cast to the ref of same container type&quot;</span>);</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">if</span> (!RefType::_type_is_nullable) {</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; CHECK(ptr != <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; }</div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordflow">return</span> RefType(<a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;Object&gt;</a>(<span class="keyword">const_cast&lt;</span><a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>*<span class="keyword">&gt;</span>(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>*<span class="keyword">&gt;</span>(ptr))));</div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;}</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; </div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> BaseType, <span class="keyword">typename</span> ObjType&gt;</div>
<div class="line"><a name="l00823"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#abe2459d65fbb87e9b6c9a4aad5005db9"> 823</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;BaseType&gt;</a> <a class="code" href="namespacemxnet_1_1runtime.html#a68c6b45a7469783b09a1b2b03211056d">GetObjectPtr</a>(ObjType* ptr) {</div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; static_assert(std::is_base_of&lt;BaseType, ObjType&gt;::value,</div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="stringliteral">&quot;Can only cast to the ref of same container type&quot;</span>);</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;BaseType&gt;</a>(<span class="keyword">static_cast&lt;</span><a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>*<span class="keyword">&gt;</span>(ptr));</div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;}</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; </div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SubRef, <span class="keyword">typename</span> BaseRef&gt;</div>
<div class="line"><a name="l00830"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a6071ce524d51caddd366e0fb1827b081"> 830</a></span>&#160;<span class="keyword">inline</span> SubRef <a class="code" href="namespacemxnet_1_1runtime.html#a6071ce524d51caddd366e0fb1827b081">Downcast</a>(BaseRef ref) {</div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">if</span> (ref.defined()) {</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; CHECK(ref-&gt;template IsInstance&lt;typename SubRef::ContainerType&gt;())</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Downcast from &quot;</span> &lt;&lt; ref-&gt;GetTypeKey() &lt;&lt; <span class="stringliteral">&quot; to &quot;</span> &lt;&lt; SubRef::ContainerType::_type_key</div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; &lt;&lt; <span class="stringliteral">&quot; failed.&quot;</span>;</div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; CHECK(SubRef::_type_is_nullable) &lt;&lt; <span class="stringliteral">&quot;Downcast from nullptr to not nullable reference of &quot;</span></div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; &lt;&lt; SubRef::ContainerType::_type_key;</div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; }</div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keywordflow">return</span> SubRef(std::move(ref.data_));</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160;}</div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; </div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;} <span class="comment">// namespace runtime</span></div>
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; </div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00845"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a2ab681b45ccee554c37775e5430e237f"> 845</a></span>&#160;<span class="keyword">using</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">NodePtr</a> = <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">runtime::ObjectPtr&lt;T&gt;</a>;</div>
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; </div>
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160;} <span class="comment">// namespace mxnet</span></div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; </div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160;<span class="preprocessor">#endif // MXNET_RUNTIME_OBJECT_H_</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_ab76cef683c1b9471fea079c2f3d6fa67"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#ab76cef683c1b9471fea079c2f3d6fa67">mxnet::runtime::Object::GetOrAllocRuntimeTypeIndex</a></div><div class="ttdeci">static MXNET_DLL uint32_t GetOrAllocRuntimeTypeIndex(const std::string &amp;key, uint32_t static_tindex, uint32_t parent_tindex, uint32_t type_child_slots, bool type_child_slots_can_overflow)</div><div class="ttdoc">Get the type index using type key.</div></div>
<div class="ttc" id="anamespacemxnet_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="aclassmxnet_1_1runtime_1_1ObjectPtr_html_a6b1f12f204c7df2fadfd0b79c5707ca7"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#a6b1f12f204c7df2fadfd0b79c5707ca7">mxnet::runtime::ObjectPtr::ObjectPtr</a></div><div class="ttdeci">ObjectPtr(ObjectPtr&lt; T &gt; &amp;&amp;other)</div><div class="ttdoc">move constructor</div><div class="ttdef"><b>Definition:</b> object.h:372</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfac"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfac">mxnet::runtime::TypeIndex</a></div><div class="ttdeci">TypeIndex</div><div class="ttdoc">list of the type index.</div><div class="ttdef"><b>Definition:</b> object.h:51</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a78ee34d8088ac6e5eff7d285826f2dcd"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a78ee34d8088ac6e5eff7d285826f2dcd">mxnet::runtime::Object::RuntimeTypeIndex</a></div><div class="ttdeci">static uint32_t RuntimeTypeIndex()</div><div class="ttdef"><b>Definition:</b> object.h:213</div></div>
<div class="ttc" id="astructmxnet_1_1runtime_1_1ObjectEqual_html_a6c58fae65009913eafafdaf1cf322b6f"><div class="ttname"><a href="structmxnet_1_1runtime_1_1ObjectEqual.html#a6c58fae65009913eafafdaf1cf322b6f">mxnet::runtime::ObjectEqual::operator()</a></div><div class="ttdeci">size_t operator()(const ObjectPtr&lt; T &gt; &amp;a, const ObjectPtr&lt; T &gt; &amp;b) const</div><div class="ttdef"><b>Definition:</b> object.h:638</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_af10de3ce2f4984f44a4ab6341aaef3e0"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#af10de3ce2f4984f44a4ab6341aaef3e0">mxnet::runtime::ObjectRef::get</a></div><div class="ttdeci">const Object * get() const</div><div class="ttdef"><b>Definition:</b> object.h:543</div></div>
<div class="ttc" id="aclassmxnet_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:151</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a4364e8a2c082e03a293bcab8a8ca5d62"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a4364e8a2c082e03a293bcab8a8ca5d62">mxnet::runtime::Object::IncRef</a></div><div class="ttdeci">void IncRef()</div><div class="ttdoc">developer function, increases reference counter.</div><div class="ttdef"><b>Definition:</b> object.h:727</div></div>
<div class="ttc" id="ac__runtime__api_8h_html"><div class="ttname"><a href="c__runtime__api_8h.html">c_runtime_api.h</a></div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_afebccea2f9d38c9d05ec38e5c4517c39"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#afebccea2f9d38c9d05ec38e5c4517c39">mxnet::runtime::ObjectPtr::ObjectPtr</a></div><div class="ttdeci">ObjectPtr(std::nullptr_t)</div><div class="ttdoc">default constructor</div><div class="ttdef"><b>Definition:</b> object.h:351</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a0fab6c32914322b17bca50b3abc29a4a"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a0fab6c32914322b17bca50b3abc29a4a">mxnet::runtime::Object::FDeleter</a></div><div class="ttdeci">void(* FDeleter)(Object *self)</div><div class="ttdoc">Object deleter.</div><div class="ttdef"><b>Definition:</b> object.h:157</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a68c6b45a7469783b09a1b2b03211056d"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a68c6b45a7469783b09a1b2b03211056d">mxnet::runtime::GetObjectPtr</a></div><div class="ttdeci">ObjectPtr&lt; BaseType &gt; GetObjectPtr(ObjectType *ptr)</div><div class="ttdoc">Get an object ptr type from a raw object ptr.</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_adbb3a73c7af867832670c54db3ae3529"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#adbb3a73c7af867832670c54db3ae3529">mxnet::runtime::ObjectPtr::ObjectPtr</a></div><div class="ttdeci">ObjectPtr(ObjectPtr&lt; Y &gt; &amp;&amp;other)</div><div class="ttdoc">move constructor</div><div class="ttdef"><b>Definition:</b> object.h:381</div></div>
<div class="ttc" id="astructmxnet_1_1runtime_1_1ObjectHash_html_afad20ba2da8654fdbb2f3f9031b5db49"><div class="ttname"><a href="structmxnet_1_1runtime_1_1ObjectHash.html#afad20ba2da8654fdbb2f3f9031b5db49">mxnet::runtime::ObjectHash::operator()</a></div><div class="ttdeci">size_t operator()(const ObjectPtr&lt; T &gt; &amp;a) const</div><div class="ttdef"><b>Definition:</b> object.h:626</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a38af2a13b570006a5760541f4a5ef6d0"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a38af2a13b570006a5760541f4a5ef6d0">mxnet::runtime::Object::TypeIndex2Key</a></div><div class="ttdeci">static MXNET_DLL std::string TypeIndex2Key(uint32_t tindex)</div><div class="ttdoc">Get the type key of the corresponding index from runtime.</div></div>
<div class="ttc" id="aclassmxnet_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:346</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1MXNetArgValue_html"><div class="ttname"><a href="classmxnet_1_1runtime_1_1MXNetArgValue.html">mxnet::runtime::MXNetArgValue</a></div><div class="ttdoc">A single argument value to PackedFunc. Containing both type_code and MXNetValue.</div><div class="ttdef"><b>Definition:</b> packed_func.h:480</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfacad6ac6a2d56e9b7f262d920def44509bf"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacad6ac6a2d56e9b7f262d920def44509bf">mxnet::runtime::kMXNetADT</a></div><div class="ttdeci">@ kMXNetADT</div><div class="ttdef"><b>Definition:</b> object.h:56</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_a241d4dccd6ab11adcdebc6ae7dc0ee1e"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#a241d4dccd6ab11adcdebc6ae7dc0ee1e">mxnet::runtime::ObjectPtr::operator!=</a></div><div class="ttdeci">bool operator!=(std::nullptr_t null) const</div><div class="ttdef"><b>Definition:</b> object.h:465</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_abe59637cab2011bdf475325399d90b6e"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#abe59637cab2011bdf475325399d90b6e">mxnet::runtime::Object::RefCounterType</a></div><div class="ttdeci">std::atomic&lt; int32_t &gt; RefCounterType</div><div class="ttdef"><b>Definition:</b> object.h:203</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1MXNetPODValue___html"><div class="ttname"><a href="classmxnet_1_1runtime_1_1MXNetPODValue__.html">mxnet::runtime::MXNetPODValue_</a></div><div class="ttdoc">Internal base class to handle conversion to POD values.</div><div class="ttdef"><b>Definition:</b> packed_func.h:401</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_a44873861fe3a0ee963314402eb3e1f47"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a44873861fe3a0ee963314402eb3e1f47">mxnet::runtime::ObjectRef::GetDataPtr</a></div><div class="ttdeci">static ObjectPtr&lt; ObjectType &gt; GetDataPtr(const ObjectRef &amp;ref)</div><div class="ttdoc">Internal helper function get data_ as ObjectPtr of ObjectType.</div><div class="ttdef"><b>Definition:</b> object.h:597</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a1bf05d799bd2a8ee18e9ef22335977ce"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a1bf05d799bd2a8ee18e9ef22335977ce">mxnet::runtime::GetRef</a></div><div class="ttdeci">RefType GetRef(const ObjectType *ptr)</div><div class="ttdoc">Get a reference type from a raw object ptr type.</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_ac4584a37844cdbb4b21fddca1d434ab3"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#ac4584a37844cdbb4b21fddca1d434ab3">mxnet::runtime::ObjectPtr::operator=</a></div><div class="ttdeci">ObjectPtr&lt; T &gt; &amp; operator=(const ObjectPtr&lt; T &gt; &amp;other)</div><div class="ttdoc">copy assignmemt</div><div class="ttdef"><b>Definition:</b> object.h:421</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_aae8d61e486de81ed0aa4b1f038dc9d2d"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#aae8d61e486de81ed0aa4b1f038dc9d2d">mxnet::runtime::ObjectPtr::get</a></div><div class="ttdeci">T * get() const</div><div class="ttdef"><b>Definition:</b> object.h:401</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_ac798b7092b8c4c6665631be6db1d4327"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#ac798b7092b8c4c6665631be6db1d4327">mxnet::runtime::ObjectPtr::GetRef</a></div><div class="ttdeci">friend RefType GetRef(const ObjType *ptr)</div><div class="ttdef"><b>Definition:</b> object.h:813</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_a95de2a92783738031bf76edc2be7a6bd"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a95de2a92783738031bf76edc2be7a6bd">mxnet::runtime::ObjectRef::same_as</a></div><div class="ttdeci">bool same_as(const ObjectRef &amp;other) const</div><div class="ttdoc">Comparator.</div><div class="ttdef"><b>Definition:</b> object.h:511</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_a2d849c83a86bbe7e86022b3d6cfc5ee4"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2d849c83a86bbe7e86022b3d6cfc5ee4">mxnet::runtime::ObjectPtr::GetObjectPtr</a></div><div class="ttdeci">friend ObjectPtr&lt; BaseType &gt; GetObjectPtr(ObjType *ptr)</div><div class="ttdef"><b>Definition:</b> object.h:823</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a6071ce524d51caddd366e0fb1827b081"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a6071ce524d51caddd366e0fb1827b081">mxnet::runtime::Downcast</a></div><div class="ttdeci">SubRef Downcast(BaseRef ref)</div><div class="ttdoc">Downcast a base reference type to a more specific type.</div><div class="ttdef"><b>Definition:</b> object.h:830</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_aa7b4b8548044af9c3114876999dcbf3b"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#aa7b4b8548044af9c3114876999dcbf3b">mxnet::runtime::Object::_type_child_slots_can_overflow</a></div><div class="ttdeci">static constexpr bool _type_child_slots_can_overflow</div><div class="ttdef"><b>Definition:</b> object.h:220</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a9a14f0cacdb1dc322de5b98714450586"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a9a14f0cacdb1dc322de5b98714450586">mxnet::runtime::Object::_GetOrAllocRuntimeTypeIndex</a></div><div class="ttdeci">static uint32_t _GetOrAllocRuntimeTypeIndex()</div><div class="ttdef"><b>Definition:</b> object.h:210</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a96443fb87c46521a0f5177893d70cba9"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a96443fb87c46521a0f5177893d70cba9">mxnet::runtime::Object::operator=</a></div><div class="ttdeci">Object &amp; operator=(Object &amp;&amp;other)</div><div class="ttdef"><b>Definition:</b> object.h:240</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a9a3015981ca2719dc1997d4b59f3bd95"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a9a3015981ca2719dc1997d4b59f3bd95">mxnet::runtime::Object::TypeIndex2KeyHash</a></div><div class="ttdeci">static MXNET_DLL size_t TypeIndex2KeyHash(uint32_t tindex)</div><div class="ttdoc">Get the type key hash of the corresponding index from runtime.</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_ae3923f7e6cdf9b2ddd643cf55951f81d"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#ae3923f7e6cdf9b2ddd643cf55951f81d">mxnet::runtime::Object::IsInstance</a></div><div class="ttdeci">bool IsInstance() const</div><div class="ttdef"><b>Definition:</b> object.h:765</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfacac8749d8889e8fe72a6d698277b764458"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacac8749d8889e8fe72a6d698277b764458">mxnet::runtime::kRoot</a></div><div class="ttdeci">@ kRoot</div><div class="ttdoc">Root object type.</div><div class="ttdef"><b>Definition:</b> object.h:53</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1MXNetRetValue_html"><div class="ttname"><a href="classmxnet_1_1runtime_1_1MXNetRetValue.html">mxnet::runtime::MXNetRetValue</a></div><div class="ttdoc">Return Value container, Unlike MXNetArgValue, which only holds reference and do not delete the underl...</div><div class="ttdef"><b>Definition:</b> packed_func.h:555</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a187981a221881175d58e94c66b9689d1"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a187981a221881175d58e94c66b9689d1">mxnet::runtime::Object::TypeKey2Index</a></div><div class="ttdeci">static MXNET_DLL uint32_t TypeKey2Index(const std::string &amp;key)</div><div class="ttdoc">Get the type index of the corresponding key from runtime.</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca008b7567e2fed8aebf4573d88a301ef0"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca008b7567e2fed8aebf4573d88a301ef0">mxnet::runtime::kMXNetClosure</a></div><div class="ttdeci">@ kMXNetClosure</div><div class="ttdef"><b>Definition:</b> object.h:55</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_a4193bb155125953e77ded93c0fb46965"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#a4193bb155125953e77ded93c0fb46965">mxnet::runtime::ObjectPtr::ObjectPtr</a></div><div class="ttdeci">friend class ObjectPtr</div><div class="ttdoc">we always used ObjectPtr for a reference pointer to the node, so this alias can be changed in case.</div><div class="ttdef"><b>Definition:</b> object.h:486</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_aa8f4891c1a34a0447aadae150adc5f82"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#aa8f4891c1a34a0447aadae150adc5f82">mxnet::runtime::ObjectPtr::operator*</a></div><div class="ttdeci">T &amp; operator*() const</div><div class="ttdef"><b>Definition:</b> object.h:413</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca226facde4854260861fcc447b24b142d"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca226facde4854260861fcc447b24b142d">mxnet::runtime::kSlice</a></div><div class="ttdeci">@ kSlice</div><div class="ttdef"><b>Definition:</b> object.h:60</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca4efd65b5689dcc24c7316695c2f60c73"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca4efd65b5689dcc24c7316695c2f60c73">mxnet::runtime::kEllipsis</a></div><div class="ttdeci">@ kEllipsis</div><div class="ttdef"><b>Definition:</b> object.h:59</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_ab5adba2e735bd310635cf9dfa1799e9c"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#ab5adba2e735bd310635cf9dfa1799e9c">mxnet::runtime::ObjectRef::DowncastNoCheck</a></div><div class="ttdeci">static T DowncastNoCheck(ObjectRef ref)</div><div class="ttdoc">Internal helper function downcast a ref without check.</div><div class="ttdef"><b>Definition:</b> object.h:587</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_a311a5cd3c288c794b8e6270aab76ad61"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#a311a5cd3c288c794b8e6270aab76ad61">mxnet::runtime::ObjectPtr::operator==</a></div><div class="ttdeci">bool operator==(std::nullptr_t null) const</div><div class="ttdef"><b>Definition:</b> object.h:461</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a601d73a606b24f7fb4fb408ebd4af184"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a601d73a606b24f7fb4fb408ebd4af184">mxnet::runtime::Object::GetTypeKeyHash</a></div><div class="ttdeci">size_t GetTypeKeyHash() const</div><div class="ttdef"><b>Definition:</b> object.h:172</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a5d66c402d6200f039e5c89f2f54f8589"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a5d66c402d6200f039e5c89f2f54f8589">mxnet::runtime::Object::_type_index</a></div><div class="ttdeci">static constexpr uint32_t _type_index</div><div class="ttdef"><b>Definition:</b> object.h:224</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a370bf83f2f2dcc8be2aca8e34ad67609"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a370bf83f2f2dcc8be2aca8e34ad67609">mxnet::runtime::Object::_type_child_slots</a></div><div class="ttdeci">static constexpr uint32_t _type_child_slots</div><div class="ttdef"><b>Definition:</b> object.h:219</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_a2b3ac2e2b420b9169f39a0a3b254ff1d"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2b3ac2e2b420b9169f39a0a3b254ff1d">mxnet::runtime::ObjectPtr::unique</a></div><div class="ttdeci">bool unique() const</div><div class="ttdef"><b>Definition:</b> object.h:449</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_aa660c8746d32ac38f19dd996c35eeda2"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#aa660c8746d32ac38f19dd996c35eeda2">mxnet::runtime::ObjectPtr::use_count</a></div><div class="ttdeci">int use_count() const</div><div class="ttdef"><b>Definition:</b> object.h:445</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca2067f61f6fc0183c68ab067c32c83d00"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca2067f61f6fc0183c68ab067c32c83d00">mxnet::runtime::kFloat</a></div><div class="ttdeci">@ kFloat</div><div class="ttdef"><b>Definition:</b> object.h:62</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_ac2584940341e387fde0074c5bf1cb734"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#ac2584940341e387fde0074c5bf1cb734">mxnet::runtime::ObjectPtr::ObjectPtr</a></div><div class="ttdeci">ObjectPtr(const ObjectPtr&lt; U &gt; &amp;other)</div><div class="ttdoc">copy constructor</div><div class="ttdef"><b>Definition:</b> object.h:363</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca0d2ba2c4bdfe4ad90c0ca4e513d72d9f"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca0d2ba2c4bdfe4ad90c0ca4e513d72d9f">mxnet::runtime::kStaticIndexEnd</a></div><div class="ttdeci">@ kStaticIndexEnd</div><div class="ttdef"><b>Definition:</b> object.h:63</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfacaf69f7723764834392643025c927bfe98"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacaf69f7723764834392643025c927bfe98">mxnet::runtime::kInteger</a></div><div class="ttdeci">@ kInteger</div><div class="ttdef"><b>Definition:</b> object.h:61</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_a2501a43190c64c4a711281d425a87745"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a2501a43190c64c4a711281d425a87745">mxnet::runtime::ObjectRef::as</a></div><div class="ttdeci">const ObjectType * as() const</div><div class="ttdoc">Try to downcast the internal Object to a raw pointer of a corresponding type.</div><div class="ttdef"><b>Definition:</b> object.h:804</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a485351b0d6fd7d19e71b60529c40d339"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a485351b0d6fd7d19e71b60529c40d339">mxnet::runtime::Object::Object</a></div><div class="ttdeci">Object(const Object &amp;other)</div><div class="ttdef"><b>Definition:</b> object.h:233</div></div>
<div class="ttc" id="ainclude_2mxnet_2c__api_8h_html_a5b0e47dde55f9b2f58b99fab92d1e0ac"><div class="ttname"><a href="include_2mxnet_2c__api_8h.html#a5b0e47dde55f9b2f58b99fab92d1e0ac">MXNET_DLL</a></div><div class="ttdeci">#define MXNET_DLL</div><div class="ttdoc">MXNET_DLL prefix for windows.</div><div class="ttdef"><b>Definition:</b> c_api.h:53</div></div>
<div class="ttc" id="astructmxnet_1_1runtime_1_1ObjectEqual_html_aee25e6ef78162bfc560e2d4ee26f04c8"><div class="ttname"><a href="structmxnet_1_1runtime_1_1ObjectEqual.html#aee25e6ef78162bfc560e2d4ee26f04c8">mxnet::runtime::ObjectEqual::operator()</a></div><div class="ttdeci">bool operator()(const ObjectRef &amp;a, const ObjectRef &amp;b) const</div><div class="ttdef"><b>Definition:</b> object.h:633</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_a800781cf49cef6823c94f216a3dbeeac"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#a800781cf49cef6823c94f216a3dbeeac">mxnet::runtime::ObjectPtr::operator=</a></div><div class="ttdeci">ObjectPtr&lt; T &gt; &amp; operator=(ObjectPtr&lt; T &gt; &amp;&amp;other)</div><div class="ttdoc">move assignmemt</div><div class="ttdef"><b>Definition:</b> object.h:432</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_a1eeff522c6cb7503f2f2205bc69c0fce"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a1eeff522c6cb7503f2f2205bc69c0fce">mxnet::runtime::ObjectRef::ObjectRef</a></div><div class="ttdeci">ObjectRef()=default</div><div class="ttdoc">default constructor</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_a78e425a503521d4e442b1218b2d98065"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#a78e425a503521d4e442b1218b2d98065">mxnet::runtime::ObjectPtr::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">reset the content of ptr to be nullptr</div><div class="ttdef"><b>Definition:</b> object.h:438</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_a80e8bafaec687dacf9ca846de4a96c34"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a80e8bafaec687dacf9ca846de4a96c34">mxnet::runtime::ObjectRef::unique</a></div><div class="ttdeci">bool unique() const</div><div class="ttdef"><b>Definition:</b> object.h:551</div></div>
<div class="ttc" id="aclassmxnet_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:575</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_aa44606b99d3488f21b5290a7c046264a"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#aa44606b99d3488f21b5290a7c046264a">mxnet::runtime::Object::operator=</a></div><div class="ttdeci">Object &amp; operator=(const Object &amp;other)</div><div class="ttdef"><b>Definition:</b> object.h:237</div></div>
<div class="ttc" id="astructmxnet_1_1runtime_1_1ObjectHash_html"><div class="ttname"><a href="structmxnet_1_1runtime_1_1ObjectHash.html">mxnet::runtime::ObjectHash</a></div><div class="ttdoc">ObjectRef hash functor.</div><div class="ttdef"><b>Definition:</b> object.h:620</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_ab4544b82678db98b2ae87b9928f87c57"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#ab4544b82678db98b2ae87b9928f87c57">mxnet::runtime::ObjectPtr::operator-&gt;</a></div><div class="ttdeci">T * operator-&gt;() const</div><div class="ttdef"><b>Definition:</b> object.h:407</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_a0ebb92d820a0fe8cc96674308fbe22d5"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a0ebb92d820a0fe8cc96674308fbe22d5">mxnet::runtime::ObjectRef::operator-&gt;</a></div><div class="ttdeci">const Object * operator-&gt;() const</div><div class="ttdef"><b>Definition:</b> object.h:547</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_a075f794b50f9d9d89d3d31930a1bc38c"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a075f794b50f9d9d89d3d31930a1bc38c">mxnet::runtime::ObjectRef::ObjectRef</a></div><div class="ttdeci">ObjectRef(ObjectPtr&lt; Object &gt; data)</div><div class="ttdoc">Constructor from existing object ptr.</div><div class="ttdef"><b>Definition:</b> object.h:505</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a0123f4844d5cc81b80cf3da86e41aa3b"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a0123f4844d5cc81b80cf3da86e41aa3b">mxnet::runtime::Object::Object</a></div><div class="ttdeci">Object()</div><div class="ttdef"><b>Definition:</b> object.h:227</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a237ab83f51a0bfd0e2d9332e41fa543d"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a237ab83f51a0bfd0e2d9332e41fa543d">mxnet::runtime::Object::_type_key</a></div><div class="ttdeci">static constexpr const char * _type_key</div><div class="ttdef"><b>Definition:</b> object.h:208</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjAllocatorBase_html"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjAllocatorBase.html">mxnet::runtime::ObjAllocatorBase</a></div><div class="ttdoc">Base class of object allocators that implements make. Use curiously recurring template pattern.</div><div class="ttdef"><b>Definition:</b> memory.h:60</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_aceed1d04b67619c94bc56c43a4909ad5"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#aceed1d04b67619c94bc56c43a4909ad5">mxnet::runtime::ObjectRef::operator&lt;</a></div><div class="ttdeci">bool operator&lt;(const ObjectRef &amp;other) const</div><div class="ttdoc">Comparator.</div><div class="ttdef"><b>Definition:</b> object.h:535</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_a7ae5d37afb7f966c2707a66044229c82"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a7ae5d37afb7f966c2707a66044229c82">mxnet::runtime::ObjectRef::operator!=</a></div><div class="ttdeci">bool operator!=(const ObjectRef &amp;other) const</div><div class="ttdoc">Comparator.</div><div class="ttdef"><b>Definition:</b> object.h:527</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca7e465197746c27c835cadd7ee0cef82f"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca7e465197746c27c835cadd7ee0cef82f">mxnet::runtime::kMXNetMap</a></div><div class="ttdeci">@ kMXNetMap</div><div class="ttdef"><b>Definition:</b> object.h:57</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_af93b865cbd7c4afc76af89c7befd26a4"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#af93b865cbd7c4afc76af89c7befd26a4">mxnet::runtime::Object::Object</a></div><div class="ttdeci">Object(Object &amp;&amp;other)</div><div class="ttdef"><b>Definition:</b> object.h:235</div></div>
<div class="ttc" id="aclassmxnet_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:500</div></div>
<div class="ttc" id="astructmxnet_1_1runtime_1_1ObjectHash_html_ae69609e78a2a4c05b72f8826478aad62"><div class="ttname"><a href="structmxnet_1_1runtime_1_1ObjectHash.html#ae69609e78a2a4c05b72f8826478aad62">mxnet::runtime::ObjectHash::operator()</a></div><div class="ttdeci">size_t operator()(const ObjectRef &amp;a) const</div><div class="ttdef"><b>Definition:</b> object.h:621</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a14c68426d247442b13cc74af612d7ccd"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a14c68426d247442b13cc74af612d7ccd">mxnet::runtime::Object::ref_counter_</a></div><div class="ttdeci">RefCounterType ref_counter_</div><div class="ttdoc">The internal reference counter.</div><div class="ttdef"><b>Definition:</b> object.h:249</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a76ba66366d1583d5532bd93b13e4f835"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a76ba66366d1583d5532bd93b13e4f835">mxnet::runtime::Object::_type_final</a></div><div class="ttdeci">static constexpr bool _type_final</div><div class="ttdef"><b>Definition:</b> object.h:218</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_a31c9848521afd783f4eae179fb7717e5"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a31c9848521afd783f4eae179fb7717e5">mxnet::runtime::ObjectRef::get_mutable</a></div><div class="ttdeci">Object * get_mutable() const</div><div class="ttdef"><b>Definition:</b> object.h:577</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a1ee4c8cd5747637a3c8a8499cd5745cc"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a1ee4c8cd5747637a3c8a8499cd5745cc">mxnet::runtime::Object::deleter_</a></div><div class="ttdeci">FDeleter deleter_</div><div class="ttdoc">deleter of this object to enable customized allocation. If the deleter is nullptr,...</div><div class="ttdef"><b>Definition:</b> object.h:255</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a56610510e619c64a904ed607fddfd3cc"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a56610510e619c64a904ed607fddfd3cc">mxnet::runtime::Object::DecRef</a></div><div class="ttdeci">void DecRef()</div><div class="ttdoc">developer function, decrease reference counter.</div><div class="ttdef"><b>Definition:</b> object.h:731</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_a2939627a7312750a047cfd6290df2430"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2939627a7312750a047cfd6290df2430">mxnet::runtime::ObjectPtr::ObjectPtr</a></div><div class="ttdeci">ObjectPtr(const ObjectPtr&lt; T &gt; &amp;other)</div><div class="ttdoc">copy constructor</div><div class="ttdef"><b>Definition:</b> object.h:356</div></div>
<div class="ttc" id="astructmxnet_1_1runtime_1_1ObjectEqual_html"><div class="ttname"><a href="structmxnet_1_1runtime_1_1ObjectEqual.html">mxnet::runtime::ObjectEqual</a></div><div class="ttdoc">ObjectRef equal functor.</div><div class="ttdef"><b>Definition:</b> object.h:632</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a243c8da6e57878bd349ed7dac4abd238"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a243c8da6e57878bd349ed7dac4abd238">mxnet::runtime::Object::GetTypeKey</a></div><div class="ttdeci">std::string GetTypeKey() const</div><div class="ttdef"><b>Definition:</b> object.h:166</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca6e3caaf791147e40ff557f272f15b8cb"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca6e3caaf791147e40ff557f272f15b8cb">mxnet::runtime::kDynamic</a></div><div class="ttdeci">@ kDynamic</div><div class="ttdoc">Type index is allocated during runtime.</div><div class="ttdef"><b>Definition:</b> object.h:65</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_acce6b5e9bae80e955b348a02947ad753"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#acce6b5e9bae80e955b348a02947ad753">mxnet::runtime::ObjectPtr::~ObjectPtr</a></div><div class="ttdeci">~ObjectPtr()</div><div class="ttdoc">destructor</div><div class="ttdef"><b>Definition:</b> object.h:388</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a9431b125b4a027ba5022422eacff8943"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a9431b125b4a027ba5022422eacff8943">mxnet::runtime::Object::type_index_</a></div><div class="ttdeci">uint32_t type_index_</div><div class="ttdoc">Type index(tag) that indicates the type of the object.</div><div class="ttdef"><b>Definition:</b> object.h:247</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_a92c53ce7ca3184bde4e9e81ae278a30c"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a92c53ce7ca3184bde4e9e81ae278a30c">mxnet::runtime::ObjectRef::defined</a></div><div class="ttdeci">bool defined() const</div><div class="ttdef"><b>Definition:</b> object.h:539</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca6539f6af501dc67fd6c8fb3d1cb2193d"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca6539f6af501dc67fd6c8fb3d1cb2193d">mxnet::runtime::kMXNetTensor</a></div><div class="ttdeci">@ kMXNetTensor</div><div class="ttdef"><b>Definition:</b> object.h:54</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_aaf17bfe732286c5730307f9fa5bd3404"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#aaf17bfe732286c5730307f9fa5bd3404">mxnet::runtime::ObjectPtr::operator!=</a></div><div class="ttdeci">bool operator!=(const ObjectPtr&lt; T &gt; &amp;other) const</div><div class="ttdef"><b>Definition:</b> object.h:457</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_a210f13a73970c21ba236534df8170bda"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#a210f13a73970c21ba236534df8170bda">mxnet::runtime::ObjectPtr::operator==</a></div><div class="ttdeci">bool operator==(const ObjectPtr&lt; T &gt; &amp;other) const</div><div class="ttdef"><b>Definition:</b> object.h:453</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_a68c32a41efd1aa99afca70837565cced"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a68c32a41efd1aa99afca70837565cced">mxnet::runtime::ObjectRef::Downcast</a></div><div class="ttdeci">friend SubRef Downcast(BaseRef ref)</div><div class="ttdoc">Downcast a base reference type to a more specific type.</div><div class="ttdef"><b>Definition:</b> object.h:830</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a8fc23a4d42050cae4615e0b030fc59c5"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a8fc23a4d42050cae4615e0b030fc59c5">mxnet::runtime::Object::type_index</a></div><div class="ttdeci">uint32_t type_index() const</div><div class="ttdef"><b>Definition:</b> object.h:159</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1MXNetArgsSetter_html"><div class="ttname"><a href="classmxnet_1_1runtime_1_1MXNetArgsSetter.html">mxnet::runtime::MXNetArgsSetter</a></div><div class="ttdef"><b>Definition:</b> packed_func.h:1013</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_a3c1900ca3e591322ace70b07453ebfff"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#a3c1900ca3e591322ace70b07453ebfff">mxnet::runtime::ObjectPtr::swap</a></div><div class="ttdeci">void swap(ObjectPtr&lt; T &gt; &amp;other)</div><div class="ttdoc">Swap this array with another Object.</div><div class="ttdef"><b>Definition:</b> object.h:395</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_afc86d7a50bae231e91a03b3b98345709"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#afc86d7a50bae231e91a03b3b98345709">mxnet::runtime::ObjectRef::_type_is_nullable</a></div><div class="ttdeci">static constexpr bool _type_is_nullable</div><div class="ttdef"><b>Definition:</b> object.h:571</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectPtr_html_a2370d07eb6aa55ac558a16efd3bc808c"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2370d07eb6aa55ac558a16efd3bc808c">mxnet::runtime::ObjectPtr::ObjectPtr</a></div><div class="ttdeci">ObjectPtr()</div><div class="ttdoc">default constructor</div><div class="ttdef"><b>Definition:</b> object.h:349</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1Object_html_a4a8e2a2ce9dc9267dc18ac8abfd8dd16"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a4a8e2a2ce9dc9267dc18ac8abfd8dd16">mxnet::runtime::Object::ObjectInternal</a></div><div class="ttdeci">friend class ObjectInternal</div><div class="ttdef"><b>Definition:</b> object.h:311</div></div>
<div class="ttc" id="anamespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca979d4bd568d6e9233185b070f4d4a740"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca979d4bd568d6e9233185b070f4d4a740">mxnet::runtime::kMXNetString</a></div><div class="ttdeci">@ kMXNetString</div><div class="ttdef"><b>Definition:</b> object.h:58</div></div>
<div class="ttc" id="aclassmxnet_1_1runtime_1_1ObjectRef_html_a9c75bdd6446ab1a6dec9ee366efd1da9"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a9c75bdd6446ab1a6dec9ee366efd1da9">mxnet::runtime::ObjectRef::operator==</a></div><div class="ttdeci">bool operator==(const ObjectRef &amp;other) const</div><div class="ttdoc">Comparator.</div><div class="ttdef"><b>Definition:</b> object.h:519</div></div>
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 5 2023 03:47:40 for mxnet by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.17
</small></address>
</body>
</html>