blob: 81aad4b332fa38e39912ad1142e1fcdfbc4a443d [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: mxnet::runtime::InplaceArrayBase&lt; ArrayType, ElemType &gt; Class Template Reference</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="namespacemxnet.html">mxnet</a></li><li class="navelem"><a class="el" href="namespacemxnet_1_1runtime.html">runtime</a></li><li class="navelem"><a class="el" href="classmxnet_1_1runtime_1_1InplaceArrayBase.html">InplaceArrayBase</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="classmxnet_1_1runtime_1_1InplaceArrayBase-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">mxnet::runtime::InplaceArrayBase&lt; ArrayType, ElemType &gt; Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Base template for classes with array like memory layout.
<a href="classmxnet_1_1runtime_1_1InplaceArrayBase.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="runtime_2container_8h_source.html">container.h</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for mxnet::runtime::InplaceArrayBase&lt; ArrayType, ElemType &gt;:</div>
<div class="dyncontent">
<div class="center"><img src="classmxnet_1_1runtime_1_1InplaceArrayBase__coll__graph.png" border="0" usemap="#mxnet_1_1runtime_1_1InplaceArrayBase_3_01ArrayType_00_01ElemType_01_4_coll__map" alt="Collaboration graph"/></div>
<map name="mxnet_1_1runtime_1_1InplaceArrayBase_3_01ArrayType_00_01ElemType_01_4_coll__map" id="mxnet_1_1runtime_1_1InplaceArrayBase_3_01ArrayType_00_01ElemType_01_4_coll__map">
</map>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a34383b1cb60a09c61bf4d76081e66ef3"><td class="memItemLeft" align="right" valign="top">const ElemType &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1runtime_1_1InplaceArrayBase.html#a34383b1cb60a09c61bf4d76081e66ef3">operator[]</a> (size_t idx) const</td></tr>
<tr class="memdesc:a34383b1cb60a09c61bf4d76081e66ef3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access element at index. <a href="#a34383b1cb60a09c61bf4d76081e66ef3">More...</a><br /></td></tr>
<tr class="separator:a34383b1cb60a09c61bf4d76081e66ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0275f318930885b515bc202ccfc15f7"><td class="memItemLeft" align="right" valign="top">ElemType &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1runtime_1_1InplaceArrayBase.html#af0275f318930885b515bc202ccfc15f7">operator[]</a> (size_t idx)</td></tr>
<tr class="memdesc:af0275f318930885b515bc202ccfc15f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access element at index. <a href="#af0275f318930885b515bc202ccfc15f7">More...</a><br /></td></tr>
<tr class="separator:af0275f318930885b515bc202ccfc15f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa0adb8ab7d5c7c76812b6ec8807a46b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1runtime_1_1InplaceArrayBase.html#afa0adb8ab7d5c7c76812b6ec8807a46b">~InplaceArrayBase</a> ()</td></tr>
<tr class="memdesc:afa0adb8ab7d5c7c76812b6ec8807a46b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destroy the Inplace <a class="el" href="classmxnet_1_1Array.html" title="Array container of NodeRef in DSL graph. Array implements copy on write semantics, which means array is mutable but copy will happen when array is referenced in more than two places. ">Array</a> Base object. <a href="#afa0adb8ab7d5c7c76812b6ec8807a46b">More...</a><br /></td></tr>
<tr class="separator:afa0adb8ab7d5c7c76812b6ec8807a46b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a01eb0aaab2028ceca05cc48d12e1609f"><td class="memTemplParams" colspan="2">template&lt;typename... Args&gt; </td></tr>
<tr class="memitem:a01eb0aaab2028ceca05cc48d12e1609f"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classmxnet_1_1runtime_1_1InplaceArrayBase.html#a01eb0aaab2028ceca05cc48d12e1609f">EmplaceInit</a> (size_t idx, Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:a01eb0aaab2028ceca05cc48d12e1609f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct a value in place with the arguments. <a href="#a01eb0aaab2028ceca05cc48d12e1609f">More...</a><br /></td></tr>
<tr class="separator:a01eb0aaab2028ceca05cc48d12e1609f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:acb48bf7dd175eba0534ba724497d5418"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmxnet_1_1runtime_1_1InplaceArrayBase.html#acb48bf7dd175eba0534ba724497d5418">ADTBuilder</a></td></tr>
<tr class="separator:acb48bf7dd175eba0534ba724497d5418"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename ArrayType, typename ElemType&gt;<br />
class mxnet::runtime::InplaceArrayBase&lt; ArrayType, ElemType &gt;</h3>
<p>Base template for classes with array like memory layout. </p>
<p>It provides general methods to access the memory. The memory layout is ArrayType + [ElemType]. The alignment of ArrayType and ElemType is handled by the memory allocator.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">ArrayType</td><td>The array header type, contains object specific metadata. </td></tr>
<tr><td class="paramname">ElemType</td><td>The type of objects stored in the array right after ArrayType.</td></tr>
</table>
</dd>
</dl>
<div class="fragment"><div class="line"><span class="comment">// Example usage of the template to define a simple array wrapper</span></div><div class="line"><span class="keyword">class </span>ArrayObj : <span class="keyword">public</span> InplaceArrayBase&lt;ArrayObj, Elem&gt; {</div><div class="line"><span class="keyword">public</span>:</div><div class="line"> <span class="comment">// Wrap EmplaceInit to initialize the elements</span></div><div class="line"> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Iterator&gt;</div><div class="line"> <span class="keywordtype">void</span> Init(Iterator begin, Iterator end) {</div><div class="line"> <span class="keywordtype">size_t</span> num_elems = std::distance(begin, end);</div><div class="line"> <span class="keyword">auto</span> it = begin;</div><div class="line"> this-&gt;size = 0;</div><div class="line"> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; num_elems; ++i) {</div><div class="line"> <a class="code" href="classmxnet_1_1runtime_1_1InplaceArrayBase.html#a01eb0aaab2028ceca05cc48d12e1609f">InplaceArrayBase::EmplaceInit</a>(i, *it++);</div><div class="line"> this-&gt;size++;</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keywordtype">void</span> test_function() {</div><div class="line"> vector&lt;Elem&gt; fields;</div><div class="line"> <span class="keyword">auto</span> ptr = make_inplace_array_object&lt;ArrayObj, Elem&gt;(fields.size());</div><div class="line"> ptr-&gt;Init(fields.begin(), fields.end());</div><div class="line"></div><div class="line"> <span class="comment">// Access the 0th element in the array.</span></div><div class="line"> assert(ptr-&gt;operator[](0) == fields[0]);</div><div class="line">}</div></div><!-- fragment --> </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="afa0adb8ab7d5c7c76812b6ec8807a46b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa0adb8ab7d5c7c76812b6ec8807a46b">&#9670;&nbsp;</a></span>~InplaceArrayBase()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename ArrayType, typename ElemType&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classmxnet_1_1runtime_1_1InplaceArrayBase.html">mxnet::runtime::InplaceArrayBase</a>&lt; ArrayType, ElemType &gt;::~<a class="el" href="classmxnet_1_1runtime_1_1InplaceArrayBase.html">InplaceArrayBase</a> </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Destroy the Inplace <a class="el" href="classmxnet_1_1Array.html" title="Array container of NodeRef in DSL graph. Array implements copy on write semantics, which means array is mutable but copy will happen when array is referenced in more than two places. ">Array</a> Base object. </p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a01eb0aaab2028ceca05cc48d12e1609f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a01eb0aaab2028ceca05cc48d12e1609f">&#9670;&nbsp;</a></span>EmplaceInit()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename ArrayType, typename ElemType&gt; </div>
<div class="memtemplate">
template&lt;typename... Args&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classmxnet_1_1runtime_1_1InplaceArrayBase.html">mxnet::runtime::InplaceArrayBase</a>&lt; ArrayType, ElemType &gt;::EmplaceInit </td>
<td>(</td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>idx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Args &amp;&amp;...&#160;</td>
<td class="paramname"><em>args</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Construct a value in place with the arguments. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Args</td><td>Type parameters of the arguments. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">idx</td><td>Index of the element. </td></tr>
<tr><td class="paramname">args</td><td>Arguments to construct the new value.</td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Please make sure ArrayType::GetSize returns 0 before first call of EmplaceInit, and increment GetSize by 1 each time EmplaceInit succeeds. </dd></dl>
</div>
</div>
<a id="a34383b1cb60a09c61bf4d76081e66ef3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a34383b1cb60a09c61bf4d76081e66ef3">&#9670;&nbsp;</a></span>operator[]() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename ArrayType, typename ElemType&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const ElemType&amp; <a class="el" href="classmxnet_1_1runtime_1_1InplaceArrayBase.html">mxnet::runtime::InplaceArrayBase</a>&lt; ArrayType, ElemType &gt;::operator[] </td>
<td>(</td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>idx</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Access element at index. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">idx</td><td>The index of the element. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Const reference to ElemType at the index. </dd></dl>
</div>
</div>
<a id="af0275f318930885b515bc202ccfc15f7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af0275f318930885b515bc202ccfc15f7">&#9670;&nbsp;</a></span>operator[]() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename ArrayType, typename ElemType&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">ElemType&amp; <a class="el" href="classmxnet_1_1runtime_1_1InplaceArrayBase.html">mxnet::runtime::InplaceArrayBase</a>&lt; ArrayType, ElemType &gt;::operator[] </td>
<td>(</td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>idx</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Access element at index. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">idx</td><td>The index of the element. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Reference to ElemType at the index. </dd></dl>
</div>
</div>
<h2 class="groupheader">Friends And Related Function Documentation</h2>
<a id="acb48bf7dd175eba0534ba724497d5418"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acb48bf7dd175eba0534ba724497d5418">&#9670;&nbsp;</a></span>ADTBuilder</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename ArrayType, typename ElemType&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">friend class <a class="el" href="classmxnet_1_1runtime_1_1ADTBuilder.html">ADTBuilder</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">friend</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>/work/mxnet/include/mxnet/runtime/<a class="el" href="runtime_2container_8h_source.html">container.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 5 2023 00:58:44 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>