blob: e1fb2fdf2f2617148bd512285ce8c10cc1cbec19 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mxnet: /work/mxnet/include/mxnet/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.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_1143c7affb9ebd026cb6818dd282def7.html">mxnet</a></li><li class="navelem"><a class="el" href="dir_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#a43738149e3dac1738390743d3de5cfacad97ca079d81eade885b16f86607d244a"> 57</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacad97ca079d81eade885b16f86607d244a">kRuntimeModule</a> = 4,</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca4efd65b5689dcc24c7316695c2f60c73"> 58</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca4efd65b5689dcc24c7316695c2f60c73">kEllipsis</a> = 5,</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca226facde4854260861fcc447b24b142d"> 59</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca226facde4854260861fcc447b24b142d">kSlice</a> = 6,</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacaf69f7723764834392643025c927bfe98"> 60</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacaf69f7723764834392643025c927bfe98">kInteger</a> = 7,</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca0d2ba2c4bdfe4ad90c0ca4e513d72d9f"> 61</a></span>&#160; <a class="code" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca0d2ba2c4bdfe4ad90c0ca4e513d72d9f">kStaticIndexEnd</a>,</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca6e3caaf791147e40ff557f272f15b8cb"> 63</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="l00064"></a><span class="lineno"> 64</span>&#160;};</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html"> 149</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="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a0fab6c32914322b17bca50b3abc29a4a"> 155</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="l00157"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a8fc23a4d42050cae4615e0b030fc59c5"> 157</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="l00158"></a><span class="lineno"> 158</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="l00159"></a><span class="lineno"> 159</span>&#160; }</div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a243c8da6e57878bd349ed7dac4abd238"> 164</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="l00165"></a><span class="lineno"> 165</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="l00166"></a><span class="lineno"> 166</span>&#160; }</div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a601d73a606b24f7fb4fb408ebd4af184"> 170</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="l00171"></a><span class="lineno"> 171</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="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> TargetType&gt;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</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="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</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="l00192"></a><span class="lineno"> 192</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="l00198"></a><span class="lineno"> 198</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="l00199"></a><span class="lineno"> 199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="preprocessor">#if MXNET_OBJECT_ATOMIC_REF_COUNTER</span></div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#abe59637cab2011bdf475325399d90b6e"> 201</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="l00202"></a><span class="lineno"> 202</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</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="l00204"></a><span class="lineno"> 204</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a237ab83f51a0bfd0e2d9332e41fa543d"> 206</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="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#a9a14f0cacdb1dc322de5b98714450586"> 208</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="l00209"></a><span class="lineno"> 209</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="l00210"></a><span class="lineno"> 210</span>&#160; }</div><div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a78ee34d8088ac6e5eff7d285826f2dcd"> 211</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="l00212"></a><span class="lineno"> 212</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="l00213"></a><span class="lineno"> 213</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">// Default object type properties for sub-classes</span></div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a76ba66366d1583d5532bd93b13e4f835"> 216</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="l00217"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a370bf83f2f2dcc8be2aca8e34ad67609"> 217</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="l00218"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#aa7b4b8548044af9c3114876999dcbf3b"> 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#aa7b4b8548044af9c3114876999dcbf3b">_type_child_slots_can_overflow</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="comment">// NOTE: the following field is not type index of Object</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// but was intended to be used by sub-classes as default value.</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// The type index of Object is TypeIndex::kRoot</span></div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a5d66c402d6200f039e5c89f2f54f8589"> 222</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="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// Default constructor and copy constructor</span></div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a0123f4844d5cc81b80cf3da86e41aa3b"> 225</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a0123f4844d5cc81b80cf3da86e41aa3b">Object</a>() {}</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="comment">// Override the copy and assign constructors to do nothing.</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</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="l00228"></a><span class="lineno"> 228</span>&#160; <span class="comment">// are copied when a child class copies itself.</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</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="l00230"></a><span class="lineno"> 230</span>&#160; <span class="comment">// to copy an existing object.</span></div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a485351b0d6fd7d19e71b60529c40d339"> 231</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="l00232"></a><span class="lineno"> 232</span>&#160; }</div><div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#af93b865cbd7c4afc76af89c7befd26a4"> 233</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="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#aa44606b99d3488f21b5290a7c046264a"> 235</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="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a96443fb87c46521a0f5177893d70cba9"> 238</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="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// The fields of the base object cell.</span></div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a9431b125b4a027ba5022422eacff8943"> 245</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="l00247"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a14c68426d247442b13cc74af612d7ccd"> 247</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="l00253"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a1ee4c8cd5747637a3c8a8499cd5745cc"> 253</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="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// Invariant checks.</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</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="l00256"></a><span class="lineno"> 256</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="l00257"></a><span class="lineno"> 257</span>&#160; <span class="stringliteral">&quot;RefCounter ABI check.&quot;</span>);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</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>(</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">const</span> std::string&amp; key,</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; uint32_t static_tindex,</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; uint32_t parent_tindex,</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; uint32_t type_child_slots,</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordtype">bool</span> type_child_slots_can_overflow);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// reference counter related operations</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</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="l00290"></a><span class="lineno"> 290</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="l00291"></a><span class="lineno"> 291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</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="l00303"></a><span class="lineno"> 303</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="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">// friend classes</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>&gt;</div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a8fae619f3bd1a2b2f7273d8d6525032a"> 306</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="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>&gt;</div><div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a4193bb155125953e77ded93c0fb46965"> 308</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="l00309"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a82aa089816e7ff294eecf5c1bc1165cf"> 309</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="l00310"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a4a8e2a2ce9dc9267dc18ac8abfd8dd16"> 310</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="l00311"></a><span class="lineno"> 311</span>&#160;};</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</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="l00326"></a><span class="lineno"> 326</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="l00327"></a><span class="lineno"> 327</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</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="l00337"></a><span class="lineno"> 337</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="l00338"></a><span class="lineno"> 338</span>&#160;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00345"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html"> 345</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="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2370d07eb6aa55ac558a16efd3bc808c"> 348</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2370d07eb6aa55ac558a16efd3bc808c">ObjectPtr</a>() {}</div><div class="line"><a name="l00350"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#afebccea2f9d38c9d05ec38e5c4517c39"> 350</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="l00355"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2939627a7312750a047cfd6290df2430"> 355</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="l00356"></a><span class="lineno"> 356</span>&#160; : <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr</a>(other.data_) {}</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ac2584940341e387fde0074c5bf1cb734"> 362</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="l00363"></a><span class="lineno"> 363</span>&#160; : <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr</a>(other.data_) {</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; static_assert(std::is_base_of&lt;T, U&gt;::value,</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="stringliteral">&quot;can only assign of child class ObjectPtr to parent&quot;</span>);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div><div class="line"><a name="l00371"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a6b1f12f204c7df2fadfd0b79c5707ca7"> 371</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="l00372"></a><span class="lineno"> 372</span>&#160; : data_(other.data_) {</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; other.data_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Y&gt;</div><div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#adbb3a73c7af867832670c54db3ae3529"> 380</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="l00381"></a><span class="lineno"> 381</span>&#160; : data_(other.data_) {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; static_assert(std::is_base_of&lt;T, Y&gt;::value,</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="stringliteral">&quot;can only assign of child class ObjectPtr to parent&quot;</span>);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; other.data_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; }</div><div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#acce6b5e9bae80e955b348a02947ad753"> 387</a></span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#acce6b5e9bae80e955b348a02947ad753">~ObjectPtr</a>() {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; this-&gt;reset();</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div><div class="line"><a name="l00394"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a3c1900ca3e591322ace70b07453ebfff"> 394</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="l00395"></a><span class="lineno"> 395</span>&#160; std::swap(data_, other.data_);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div><div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aae8d61e486de81ed0aa4b1f038dc9d2d"> 400</a></span>&#160; T* <span class="keyword">get</span>() <span class="keyword">const</span> {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</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="l00402"></a><span class="lineno"> 402</span>&#160; }</div><div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ab4544b82678db98b2ae87b9928f87c57"> 406</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="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">return</span> <span class="keyword">get</span>();</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; }</div><div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aa8f4891c1a34a0447aadae150adc5f82"> 412</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="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">get</span>();</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div><div class="line"><a name="l00420"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ac4584a37844cdbb4b21fddca1d434ab3"> 420</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="l00421"></a><span class="lineno"> 421</span>&#160; <span class="comment">// takes in plane operator to enable copy elison.</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// copy-and-swap idiom</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a4193bb155125953e77ded93c0fb46965">ObjectPtr</a>(other).swap(*<span class="keyword">this</span>); <span class="comment">// NOLINT(*)</span></div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div><div class="line"><a name="l00431"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a800781cf49cef6823c94f216a3dbeeac"> 431</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="l00432"></a><span class="lineno"> 432</span>&#160; <span class="comment">// copy-and-swap idiom</span></div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1Object.html#a4193bb155125953e77ded93c0fb46965">ObjectPtr</a>(std::move(other)).swap(*<span class="keyword">this</span>); <span class="comment">// NOLINT(*)</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div><div class="line"><a name="l00437"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a78e425a503521d4e442b1218b2d98065"> 437</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="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">if</span> (data_ != <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; data_-&gt;DecRef();</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; data_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; }</div><div class="line"><a name="l00444"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aa660c8746d32ac38f19dd996c35eeda2"> 444</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="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keywordflow">return</span> data_ != <span class="keyword">nullptr</span> ? data_-&gt;use_count() : 0;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; }</div><div class="line"><a name="l00448"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a2b3ac2e2b420b9169f39a0a3b254ff1d"> 448</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="l00449"></a><span class="lineno"> 449</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="l00450"></a><span class="lineno"> 450</span>&#160; }</div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a210f13a73970c21ba236534df8170bda"> 452</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="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">return</span> data_ == other.data_;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div><div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aaf17bfe732286c5730307f9fa5bd3404"> 456</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="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordflow">return</span> data_ != other.data_;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; }</div><div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a311a5cd3c288c794b8e6270aab76ad61"> 460</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a311a5cd3c288c794b8e6270aab76ad61">operator==</a>(std::nullptr_t null)<span class="keyword"> const </span>{</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">return</span> data_ == <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div><div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a241d4dccd6ab11adcdebc6ae7dc0ee1e"> 464</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a241d4dccd6ab11adcdebc6ae7dc0ee1e">operator!=</a>(std::nullptr_t null)<span class="keyword"> const </span>{</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">return</span> data_ != <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; }</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; <span class="keyword">private</span>:</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</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="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.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="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">if</span> (data != <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; data_-&gt;IncRef();</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</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; <span class="comment">// friend classes</span></div><div class="line"><a name="l00481"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a0720b5f434e636e22a3ed34f847eec57"> 481</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="l00482"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a5d7d1b555fd908e511caa42bd7ccfc71"> 482</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="l00483"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a7191cb82e9344bec1b5fd20f45b289f1"> 483</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="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>&gt;</div><div class="line"><a name="l00485"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a4193bb155125953e77ded93c0fb46965"> 485</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="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>&gt;</div><div class="line"><a name="l00487"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a8fae619f3bd1a2b2f7273d8d6525032a"> 487</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="l00488"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ada51c7f37c7562f9453a19c41bee8e7f"> 488</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="l00489"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a0589aedf749aa4d55e73539f5b135a24"> 489</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="l00490"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#a82aa089816e7ff294eecf5c1bc1165cf"> 490</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="l00491"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectPtr.html#ae5234e78dc20faaf78ff210f37f023ea"> 491</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="l00492"></a><span class="lineno"> 492</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="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keyword">friend</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="l00494"></a><span class="lineno"> 494</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="l00495"></a><span class="lineno"> 495</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="namespacemxnet_1_1runtime.html#a68c6b45a7469783b09a1b2b03211056d">GetObjectPtr</a>(ObjType* ptr);</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;};</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;</div><div class="line"><a name="l00499"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html"> 499</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="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html">ObjectRef</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00504"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a075f794b50f9d9d89d3d31930a1bc38c"> 504</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) : data_(data) {}</div><div class="line"><a name="l00510"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a95de2a92783738031bf76edc2be7a6bd"> 510</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="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">return</span> data_ == other.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div><div class="line"><a name="l00518"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a9c75bdd6446ab1a6dec9ee366efd1da9"> 518</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="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">return</span> data_ == other.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>;</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div><div class="line"><a name="l00526"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a7ae5d37afb7f966c2707a66044229c82"> 526</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="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">return</span> data_ != other.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div><div class="line"><a name="l00534"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#aceed1d04b67619c94bc56c43a4909ad5"> 534</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="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">return</span> data_.get() &lt; other.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>.get();</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div><div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a92c53ce7ca3184bde4e9e81ae278a30c"> 538</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="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">return</span> data_ != <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; }</div><div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#af10de3ce2f4984f44a4ab6341aaef3e0"> 542</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classmxnet_1_1runtime_1_1Object.html">Object</a>* <span class="keyword">get</span>() <span class="keyword">const</span> {</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordflow">return</span> data_.get();</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; }</div><div class="line"><a name="l00546"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a0ebb92d820a0fe8cc96674308fbe22d5"> 546</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="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">return</span> <span class="keyword">get</span>();</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; }</div><div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a80e8bafaec687dacf9ca846de4a96c34"> 550</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="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">return</span> data_.unique();</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> ObjectType&gt;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> ObjectType* as() <span class="keyword">const</span>;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;</div><div class="line"><a name="l00568"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#afb17c6afa35f39c755d92fa2090fe0af"> 568</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#a0123f4844d5cc81b80cf3da86e41aa3b">Object</a>;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l00572"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9"> 572</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="l00574"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a31c9848521afd783f4eae179fb7717e5"> 574</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="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keywordflow">return</span> data_.<a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html#aae8d61e486de81ed0aa4b1f038dc9d2d">get</a>();</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; }</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00584"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#ab5adba2e735bd310635cf9dfa1799e9c"> 584</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="l00585"></a><span class="lineno"> 585</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="l00586"></a><span class="lineno"> 586</span>&#160; }</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> ObjectType&gt;</div><div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a44873861fe3a0ee963314402eb3e1f47"> 594</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="l00595"></a><span class="lineno"> 595</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="l00596"></a><span class="lineno"> 596</span>&#160; }</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="comment">// friend classes.</span></div><div class="line"><a name="l00598"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a7191cb82e9344bec1b5fd20f45b289f1"> 598</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="l00599"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a82aa089816e7ff294eecf5c1bc1165cf"> 599</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="l00600"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a0589aedf749aa4d55e73539f5b135a24"> 600</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="l00601"></a><span class="lineno"> 601</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="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keyword">friend</span> SubRef <a class="code" href="namespacemxnet_1_1runtime.html#a6071ce524d51caddd366e0fb1827b081">Downcast</a>(BaseRef ref);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;};</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</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="l00614"></a><span class="lineno"> 614</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="l00615"></a><span class="lineno"> 615</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno"><a class="line" href="structmxnet_1_1runtime_1_1ObjectHash.html"> 617</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="l00618"></a><span class="lineno"><a class="line" href="structmxnet_1_1runtime_1_1ObjectHash.html#ae69609e78a2a4c05b72f8826478aad62"> 618</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="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordflow">return</span> operator()(a.<a class="code" href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">data_</a>);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; }</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00623"></a><span class="lineno"><a class="line" href="structmxnet_1_1runtime_1_1ObjectHash.html#afad20ba2da8654fdbb2f3f9031b5db49"> 623</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="l00624"></a><span class="lineno"> 624</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="l00625"></a><span class="lineno"> 625</span>&#160; }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;};</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;</div><div class="line"><a name="l00630"></a><span class="lineno"><a class="line" href="structmxnet_1_1runtime_1_1ObjectEqual.html"> 630</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="l00631"></a><span class="lineno"><a class="line" href="structmxnet_1_1runtime_1_1ObjectEqual.html#aee25e6ef78162bfc560e2d4ee26f04c8"> 631</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="l00632"></a><span class="lineno"> 632</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="l00633"></a><span class="lineno"> 633</span>&#160; }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00636"></a><span class="lineno"><a class="line" href="structmxnet_1_1runtime_1_1ObjectEqual.html#a6c58fae65009913eafafdaf1cf322b6f"> 636</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="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">return</span> a == b;</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; }</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;};</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="l00647"></a><span class="lineno"><a class="line" href="object_8h.html#a07a1848f5230303d53fd9fcb05534fa0"> 647</a></span>&#160;<span class="preprocessor">#define MXNET_DECLARE_BASE_OBJECT_INFO(TypeName, ParentType) \</span></div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160;<span class="preprocessor"> static const uint32_t RuntimeTypeIndex() { \</span></div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;<span class="preprocessor"> if (TypeName::_type_index != ::mxnet::runtime::TypeIndex::kDynamic) { \</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;<span class="preprocessor"> return TypeName::_type_index; \</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;<span class="preprocessor"> return _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 const 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( \</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160;<span class="preprocessor"> TypeName::_type_key, \</span></div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;<span class="preprocessor"> TypeName::_type_index, \</span></div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;<span class="preprocessor"> ParentType::_GetOrAllocRuntimeTypeIndex(), \</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;<span class="preprocessor"> TypeName::_type_child_slots, \</span></div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;<span class="preprocessor"> TypeName::_type_child_slots_can_overflow); \</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;<span class="preprocessor"> return tidx; \</span></div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;<span class="preprocessor"></span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;</div><div class="line"><a name="l00669"></a><span class="lineno"><a class="line" href="object_8h.html#aff0db99c23ecb5cbf6c5b9134076a0f3"> 669</a></span>&#160;<span class="preprocessor">#define MXNET_DECLARE_FINAL_OBJECT_INFO(TypeName, ParentType) \</span></div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;<span class="preprocessor"> static const constexpr bool _type_final = true; \</span></div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;<span class="preprocessor"> static const constexpr int _type_child_slots = 0; \</span></div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160;<span class="preprocessor"> MXNET_DECLARE_BASE_OBJECT_INFO(TypeName, ParentType) \</span></div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;<span class="preprocessor"></span></div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;</div><div class="line"><a name="l00681"></a><span class="lineno"><a class="line" href="object_8h.html#a6b28c0e1dc09b67696ad1369794b89c6"> 681</a></span>&#160;<span class="preprocessor">#define MXNET_REGISTER_OBJECT_TYPE(TypeName) \</span></div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;<span class="preprocessor"> static DMLC_ATTRIBUTE_UNUSED uint32_t __make_Object_tidx ## _ ## TypeName ## __ = \</span></div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;<span class="preprocessor"> TypeName::_GetOrAllocRuntimeTypeIndex()</span></div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160;</div><div class="line"><a name="l00686"></a><span class="lineno"><a class="line" href="object_8h.html#a3bbe3c8205ea8d2660b25c519306f04f"> 686</a></span>&#160;<span class="preprocessor">#define MXNET_DEFINE_OBJECT_REF_METHODS(TypeName, ParentType, ObjectName) \</span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160;<span class="preprocessor"> TypeName() {} \</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160;<span class="preprocessor"> explicit TypeName( \</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;<span class="preprocessor"> ::mxnet::runtime::ObjectPtr&lt;::mxnet::runtime::Object&gt; n) \</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;<span class="preprocessor"> : ParentType(n) {} \</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;<span class="preprocessor"> const ObjectName* operator-&gt;() const { \</span></div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;<span class="preprocessor"> return static_cast&lt;const ObjectName*&gt;(data_.get()); \</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;<span class="preprocessor"> operator bool() const { return data_ != nullptr; } \</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160;<span class="preprocessor"> using ContainerType = ObjectName;</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;</div><div class="line"><a name="l00697"></a><span class="lineno"><a class="line" href="object_8h.html#a715900fd588e08db3bad540c0ca0f7df"> 697</a></span>&#160;<span class="preprocessor">#define MXNET_DEFINE_OBJECT_REF_METHODS_MUT(TypeName, ParentType, ObjectName) \</span></div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;<span class="preprocessor"> TypeName() {} \</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160;<span class="preprocessor"> explicit TypeName( \</span></div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;<span class="preprocessor"> ::mxnet::runtime::ObjectPtr&lt;::mxnet::runtime::Object&gt; n) \</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;<span class="preprocessor"> : ParentType(n) {} \</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;<span class="preprocessor"> ObjectName* operator-&gt;() { \</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;<span class="preprocessor"> return static_cast&lt;ObjectName*&gt;(data_.get()); \</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;<span class="preprocessor"> operator bool() const { return data_ != nullptr; } \</span></div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;<span class="preprocessor"> using ContainerType = ObjectName;</span></div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;<span class="comment">// Implementations details below</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;<span class="comment">// Object reference counting.</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;<span class="preprocessor">#if MXNET_OBJECT_ATOMIC_REF_COUNTER</span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;</div><div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a4364e8a2c082e03a293bcab8a8ca5d62"> 712</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="l00713"></a><span class="lineno"> 713</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="l00714"></a><span class="lineno"> 714</span>&#160;}</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;</div><div class="line"><a name="l00716"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#a56610510e619c64a904ed607fddfd3cc"> 716</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="l00717"></a><span class="lineno"> 717</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="l00718"></a><span class="lineno"> 718</span>&#160; std::atomic_thread_fence(std::memory_order_acquire);</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">if</span> (this-&gt;deleter_ != <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</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="l00721"></a><span class="lineno"> 721</span>&#160; }</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;}</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</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="l00726"></a><span class="lineno"> 726</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="l00727"></a><span class="lineno"> 727</span>&#160;}</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;<span class="preprocessor">#else</span></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"> 731</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="l00732"></a><span class="lineno"> 732</span>&#160; ++<a class="code" href="classmxnet_1_1runtime_1_1Object.html#a14c68426d247442b13cc74af612d7ccd">ref_counter_</a>;</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160;}</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</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="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordflow">if</span> (--ref_counter == 0) {</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">if</span> (this-&gt;deleter_ != <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</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="l00739"></a><span class="lineno"> 739</span>&#160; }</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; }</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;}</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;<span class="keyword">inline</span> <span class="keywordtype">int</span> Object::use_count()<span class="keyword"> const </span>{</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</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="l00745"></a><span class="lineno"> 745</span>&#160;}</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;<span class="preprocessor">#endif // MXNET_OBJECT_ATOMIC_REF_COUNTER</span></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;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> TargetType&gt;</div><div class="line"><a name="l00750"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1Object.html#ae3923f7e6cdf9b2ddd643cf55951f81d"> 750</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="l00751"></a><span class="lineno"> 751</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="l00752"></a><span class="lineno"> 752</span>&#160; <span class="comment">// NOTE: the following code can be optimized by</span></div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="comment">// compiler dead-code elimination for already known constants.</span></div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">self</span> != <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="comment">// Everything is a subclass of object.</span></div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keywordflow">if</span> (std::is_same&lt;TargetType, Object&gt;::value) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keywordflow">if</span> (TargetType::_type_final) {</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="comment">// if the target type is a final type</span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="comment">// then we only need to check the equivalence.</span></div><div class="line"><a name="l00760"></a><span class="lineno"> 760</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="l00761"></a><span class="lineno"> 761</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="comment">// if target type is a non-leaf type</span></div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="comment">// Check if type index falls into the range of reserved slots.</span></div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; uint32_t begin = TargetType::RuntimeTypeIndex();</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="comment">// The condition will be optimized by constant-folding.</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">if</span> (TargetType::_type_child_slots != 0) {</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; uint32_t end = begin + TargetType::_type_child_slots;</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">if</span> (self-&gt;type_index_ &gt;= begin &amp;&amp; self-&gt;type_index_ &lt; end) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="keywordflow">if</span> (self-&gt;type_index_ == begin) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; }</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordflow">if</span> (!TargetType::_type_child_slots_can_overflow) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="comment">// Invariance: parent index is always smaller than the child.</span></div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keywordflow">if</span> (self-&gt;type_index_ &lt; TargetType::RuntimeTypeIndex()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="comment">// The rare slower-path, check type hierachy.</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;DerivedFrom(TargetType::RuntimeTypeIndex());</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; }</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; }</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;}</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ObjectType&gt;</div><div class="line"><a name="l00785"></a><span class="lineno"><a class="line" href="classmxnet_1_1runtime_1_1ObjectRef.html#a2501a43190c64c4a711281d425a87745"> 785</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="l00786"></a><span class="lineno"> 786</span>&#160; <span class="keywordflow">if</span> (data_ != <span class="keyword">nullptr</span> &amp;&amp;</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; data_-&gt;IsInstance&lt;ObjectType&gt;()) {</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>ObjectType*<span class="keyword">&gt;</span>(data_.get());</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; }</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160;}</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160;</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</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="l00795"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#ab16bad32a0ce5d28b9201a6998b4a6d2"> 795</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="l00796"></a><span class="lineno"> 796</span>&#160; static_assert(std::is_base_of&lt;typename RefType::ContainerType, ObjType&gt;::value,</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="stringliteral">&quot;Can only cast to the ref of same container type&quot;</span>);</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">return</span> RefType(<a class="code" href="classmxnet_1_1runtime_1_1ObjectPtr.html">ObjectPtr&lt;Object&gt;</a>(const_cast&lt;Object*&gt;(static_cast&lt;const Object*&gt;(ptr))));</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;}</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;<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="l00802"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#abe2459d65fbb87e9b6c9a4aad5005db9"> 802</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="l00803"></a><span class="lineno"> 803</span>&#160; static_assert(std::is_base_of&lt;BaseType, ObjType&gt;::value,</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="stringliteral">&quot;Can only cast to the ref of same container type&quot;</span>);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</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="l00806"></a><span class="lineno"> 806</span>&#160;}</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</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="l00809"></a><span class="lineno"><a class="line" href="namespacemxnet_1_1runtime.html#a6071ce524d51caddd366e0fb1827b081"> 809</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="l00810"></a><span class="lineno"> 810</span>&#160; CHECK(ref-&gt;template IsInstance&lt;typename SubRef::ContainerType&gt;())</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</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></div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; &lt;&lt; SubRef::ContainerType::_type_key &lt;&lt; <span class="stringliteral">&quot; failed.&quot;</span>;</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordflow">return</span> SubRef(std::move(ref.data_));</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;}</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160;} <span class="comment">// namespace runtime</span></div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00819"></a><span class="lineno"><a class="line" href="namespacemxnet.html#a2ab681b45ccee554c37775e5430e237f"> 819</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="l00820"></a><span class="lineno"> 820</span>&#160;</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160;} <span class="comment">// namespace mxnet</span></div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;<span class="preprocessor">#endif // MXNET_RUNTIME_OBJECT_H_</span></div><div class="ttc" id="classmxnet_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:157</div></div>
<div class="ttc" id="structmxnet_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:636</div></div>
<div class="ttc" id="classmxnet_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:355</div></div>
<div class="ttc" id="classmxnet_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:584</div></div>
<div class="ttc" id="classmxnet_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:164</div></div>
<div class="ttc" id="classmxnet_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:538</div></div>
<div class="ttc" id="classmxnet_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:518</div></div>
<div class="ttc" id="classmxnet_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:231</div></div>
<div class="ttc" id="classmxnet_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:233</div></div>
<div class="ttc" id="classmxnet_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:574</div></div>
<div class="ttc" id="classmxnet_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="classmxnet_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:235</div></div>
<div class="ttc" id="namespacemxnet_html"><div class="ttname"><a href="namespacemxnet.html">mxnet</a></div><div class="ttdoc">namespace of mxnet </div><div class="ttdef"><b>Definition:</b> api_registry.h:33</div></div>
<div class="ttc" id="classmxnet_1_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:448</div></div>
<div class="ttc" id="classmxnet_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:206</div></div>
<div class="ttc" id="classmxnet_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:444</div></div>
<div class="ttc" id="structmxnet_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:617</div></div>
<div class="ttc" id="namespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfacad6ac6a2d56e9b7f262d920def44509bf"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacad6ac6a2d56e9b7f262d920def44509bf">mxnet::runtime::kMXNetADT</a></div><div class="ttdef"><b>Definition:</b> object.h:56</div></div>
<div class="ttc" id="classmxnet_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:238</div></div>
<div class="ttc" id="classmxnet_1_1runtime_1_1ObjectPtr_html"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectPtr.html">mxnet::runtime::ObjectPtr</a></div><div class="ttdoc">A custom smart pointer for Object. </div><div class="ttdef"><b>Definition:</b> object.h:345</div></div>
<div class="ttc" id="classmxnet_1_1runtime_1_1Object_html_a4193bb155125953e77ded93c0fb46965"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html#a4193bb155125953e77ded93c0fb46965">mxnet::runtime::Object::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:308</div></div>
<div class="ttc" id="classmxnet_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:546</div></div>
<div class="ttc" id="classmxnet_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:504</div></div>
<div class="ttc" id="classmxnet_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:211</div></div>
<div class="ttc" id="classmxnet_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:412</div></div>
<div class="ttc" id="classmxnet_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:247</div></div>
<div class="ttc" id="classmxnet_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:456</div></div>
<div class="ttc" id="classmxnet_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:464</div></div>
<div class="ttc" id="classmxnet_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:362</div></div>
<div class="ttc" id="classmxnet_1_1runtime_1_1ObjectRef_html"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html">mxnet::runtime::ObjectRef</a></div><div class="ttdoc">Base class of all object reference. </div><div class="ttdef"><b>Definition:</b> object.h:499</div></div>
<div class="ttc" id="classmxnet_1_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:380</div></div>
<div class="ttc" id="classmxnet_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:394</div></div>
<div class="ttc" id="classmxnet_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:225</div></div>
<div class="ttc" id="structmxnet_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:623</div></div>
<div class="ttc" id="classmxnet_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:218</div></div>
<div class="ttc" id="namespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca008b7567e2fed8aebf4573d88a301ef0"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca008b7567e2fed8aebf4573d88a301ef0">mxnet::runtime::kMXNetClosure</a></div><div class="ttdef"><b>Definition:</b> object.h:55</div></div>
<div class="ttc" id="structmxnet_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:631</div></div>
<div class="ttc" id="namespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfacac8749d8889e8fe72a6d698277b764458"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacac8749d8889e8fe72a6d698277b764458">mxnet::runtime::kRoot</a></div><div class="ttdoc">Root object type. </div><div class="ttdef"><b>Definition:</b> object.h:53</div></div>
<div class="ttc" id="namespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca4efd65b5689dcc24c7316695c2f60c73"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca4efd65b5689dcc24c7316695c2f60c73">mxnet::runtime::kEllipsis</a></div><div class="ttdef"><b>Definition:</b> object.h:58</div></div>
<div class="ttc" id="classmxnet_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:981</div></div>
<div class="ttc" id="classmxnet_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:468</div></div>
<div class="ttc" id="classmxnet_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:716</div></div>
<div class="ttc" id="classmxnet_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:406</div></div>
<div class="ttc" id="namespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca226facde4854260861fcc447b24b142d"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca226facde4854260861fcc447b24b142d">mxnet::runtime::kSlice</a></div><div class="ttdef"><b>Definition:</b> object.h:59</div></div>
<div class="ttc" id="classmxnet_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:310</div></div>
<div class="ttc" id="classmxnet_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:534</div></div>
<div class="ttc" id="classmxnet_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:371</div></div>
<div class="ttc" id="classmxnet_1_1runtime_1_1Object_html"><div class="ttname"><a href="classmxnet_1_1runtime_1_1Object.html">mxnet::runtime::Object</a></div><div class="ttdoc">base class of all object containers. </div><div class="ttdef"><b>Definition:</b> object.h:149</div></div>
<div class="ttc" id="classmxnet_1_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:594</div></div>
<div class="ttc" id="classmxnet_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:431</div></div>
<div class="ttc" id="namespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca0d2ba2c4bdfe4ad90c0ca4e513d72d9f"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca0d2ba2c4bdfe4ad90c0ca4e513d72d9f">mxnet::runtime::kStaticIndexEnd</a></div><div class="ttdef"><b>Definition:</b> object.h:61</div></div>
<div class="ttc" id="namespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfacaf69f7723764834392643025c927bfe98"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacaf69f7723764834392643025c927bfe98">mxnet::runtime::kInteger</a></div><div class="ttdef"><b>Definition:</b> object.h:60</div></div>
<div class="ttc" id="classmxnet_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:510</div></div>
<div class="ttc" id="classmxnet_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:222</div></div>
<div class="ttc" id="classmxnet_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:245</div></div>
<div class="ttc" id="classmxnet_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:348</div></div>
<div class="ttc" id="classmxnet_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:550</div></div>
<div class="ttc" id="classmxnet_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:452</div></div>
<div class="ttc" id="classmxnet_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:460</div></div>
<div class="ttc" id="classmxnet_1_1runtime_1_1ObjectRef_html_a5009d0661d741e4b105402b3126663e9"><div class="ttname"><a href="classmxnet_1_1runtime_1_1ObjectRef.html#a5009d0661d741e4b105402b3126663e9">mxnet::runtime::ObjectRef::data_</a></div><div class="ttdeci">ObjectPtr&lt; Object &gt; data_</div><div class="ttdoc">Internal pointer that backs the reference. </div><div class="ttdef"><b>Definition:</b> object.h:572</div></div>
<div class="ttc" id="classmxnet_1_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:208</div></div>
<div class="ttc" id="structmxnet_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:618</div></div>
<div class="ttc" id="classmxnet_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:750</div></div>
<div class="ttc" id="classmxnet_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:217</div></div>
<div class="ttc" id="classmxnet_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:437</div></div>
<div class="ttc" id="classmxnet_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:201</div></div>
<div class="ttc" id="classmxnet_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:387</div></div>
<div class="ttc" id="namespacemxnet_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:809</div></div>
<div class="ttc" id="classmxnet_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:400</div></div>
<div class="ttc" id="classmxnet_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="classmxnet_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:170</div></div>
<div class="ttc" id="namespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfacad97ca079d81eade885b16f86607d244a"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfacad97ca079d81eade885b16f86607d244a">mxnet::runtime::kRuntimeModule</a></div><div class="ttdef"><b>Definition:</b> object.h:57</div></div>
<div class="ttc" id="classmxnet_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:785</div></div>
<div class="ttc" id="namespacemxnet_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="include_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="namespacemxnet_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="classmxnet_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:350</div></div>
<div class="ttc" id="classmxnet_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:216</div></div>
<div class="ttc" id="namespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca6e3caaf791147e40ff557f272f15b8cb"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca6e3caaf791147e40ff557f272f15b8cb">mxnet::runtime::kDynamic</a></div><div class="ttdoc">Type index is allocated during runtime. </div><div class="ttdef"><b>Definition:</b> object.h:63</div></div>
<div class="ttc" id="classmxnet_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:387</div></div>
<div class="ttc" id="classmxnet_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:155</div></div>
<div class="ttc" id="classmxnet_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="namespacemxnet_1_1runtime_html_a43738149e3dac1738390743d3de5cfaca6539f6af501dc67fd6c8fb3d1cb2193d"><div class="ttname"><a href="namespacemxnet_1_1runtime.html#a43738149e3dac1738390743d3de5cfaca6539f6af501dc67fd6c8fb3d1cb2193d">mxnet::runtime::kMXNetTensor</a></div><div class="ttdef"><b>Definition:</b> object.h:54</div></div>
<div class="ttc" id="classmxnet_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:420</div></div>
<div class="ttc" id="classmxnet_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, no deletion will be performed. The creator of the object must always set the deleter field properly. </div><div class="ttdef"><b>Definition:</b> object.h:253</div></div>
<div class="ttc" id="classmxnet_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:552</div></div>
<div class="ttc" id="c__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="classmxnet_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="classmxnet_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:712</div></div>
<div class="ttc" id="classmxnet_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="namespacemxnet_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="classmxnet_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:526</div></div>
<div class="ttc" id="structmxnet_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:630</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 5 2023 00:58:42 for mxnet by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>