blob: 6799d7ebf50e2cff1ae3293d04cab19b7c5f6b80 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mxnet: dmlc::ThreadedIter&lt; DType &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.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespacedmlc.html">dmlc</a></li><li class="navelem"><a class="el" href="classdmlc_1_1ThreadedIter.html">ThreadedIter</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classdmlc_1_1ThreadedIter-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">dmlc::ThreadedIter&lt; DType &gt; Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>a iterator that was backed by a thread to pull data eagerly from a single producer into a bounded buffer the consumer can pull the data at its own rate
<a href="classdmlc_1_1ThreadedIter.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="threadediter_8h_source.html">threadediter.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for dmlc::ThreadedIter&lt; DType &gt;:</div>
<div class="dyncontent">
<div class="center"><img src="classdmlc_1_1ThreadedIter__inherit__graph.png" border="0" usemap="#dmlc_1_1ThreadedIter_3_01DType_01_4_inherit__map" alt="Inheritance graph"/></div>
<!-- MAP 0 -->
</div>
<div class="dynheader">
Collaboration diagram for dmlc::ThreadedIter&lt; DType &gt;:</div>
<div class="dyncontent">
<div class="center"><img src="classdmlc_1_1ThreadedIter__coll__graph.png" border="0" usemap="#dmlc_1_1ThreadedIter_3_01DType_01_4_coll__map" alt="Collaboration graph"/></div>
<!-- MAP 1 -->
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter_1_1Producer.html">Producer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">producer class interface that threaditer used as source to preduce the content <a href="classdmlc_1_1ThreadedIter_1_1Producer.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><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:ad1f3ac33bc99bdf372476b8798dbaeac"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter.html#ad1f3ac33bc99bdf372476b8798dbaeac">ThreadedIter</a> (size_t max_capacity=8)</td></tr>
<tr class="memdesc:ad1f3ac33bc99bdf372476b8798dbaeac"><td class="mdescLeft">&#160;</td><td class="mdescRight">constructor <a href="classdmlc_1_1ThreadedIter.html#ad1f3ac33bc99bdf372476b8798dbaeac">More...</a><br /></td></tr>
<tr class="separator:ad1f3ac33bc99bdf372476b8798dbaeac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad95526b8f440147fea318b2b68142322"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter.html#ad95526b8f440147fea318b2b68142322">~ThreadedIter</a> (void)</td></tr>
<tr class="memdesc:ad95526b8f440147fea318b2b68142322"><td class="mdescLeft">&#160;</td><td class="mdescRight">destructor <a href="classdmlc_1_1ThreadedIter.html#ad95526b8f440147fea318b2b68142322">More...</a><br /></td></tr>
<tr class="separator:ad95526b8f440147fea318b2b68142322"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1449d5368f4e21f463ab9d2451d6d94b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter.html#a1449d5368f4e21f463ab9d2451d6d94b">Destroy</a> (void)</td></tr>
<tr class="memdesc:a1449d5368f4e21f463ab9d2451d6d94b"><td class="mdescLeft">&#160;</td><td class="mdescRight">destroy all the related resources this is equivalent to destructor, can be used to destroy the threaditer when user think it is appropriate, it is safe to call this multiple times <a href="classdmlc_1_1ThreadedIter.html#a1449d5368f4e21f463ab9d2451d6d94b">More...</a><br /></td></tr>
<tr class="separator:a1449d5368f4e21f463ab9d2451d6d94b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b1107b73e593f12206fcf313303489b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter.html#a5b1107b73e593f12206fcf313303489b">set_max_capacity</a> (size_t max_capacity)</td></tr>
<tr class="memdesc:a5b1107b73e593f12206fcf313303489b"><td class="mdescLeft">&#160;</td><td class="mdescRight">set maximum capacity of the queue <a href="classdmlc_1_1ThreadedIter.html#a5b1107b73e593f12206fcf313303489b">More...</a><br /></td></tr>
<tr class="separator:a5b1107b73e593f12206fcf313303489b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5ab474a70ad755118635873a10f050b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter.html#ad5ab474a70ad755118635873a10f050b">Init</a> (std::shared_ptr&lt; <a class="el" href="classdmlc_1_1ThreadedIter_1_1Producer.html">Producer</a> &gt; producer)</td></tr>
<tr class="memdesc:ad5ab474a70ad755118635873a10f050b"><td class="mdescLeft">&#160;</td><td class="mdescRight">initialize the producer and start the thread can only be called once <a href="classdmlc_1_1ThreadedIter.html#ad5ab474a70ad755118635873a10f050b">More...</a><br /></td></tr>
<tr class="separator:ad5ab474a70ad755118635873a10f050b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8d2362ec0aa3131b55d121c62b89c02c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter.html#a8d2362ec0aa3131b55d121c62b89c02c">Init</a> (std::function&lt; bool(DType **)&gt; next, std::function&lt; void()&gt; beforefirst=NotImplemented)</td></tr>
<tr class="memdesc:a8d2362ec0aa3131b55d121c62b89c02c"><td class="mdescLeft">&#160;</td><td class="mdescRight">initialize the producer and start the thread pass in two function(closure) of producer to represent the producer the beforefirst function is optional, and defaults to not implemented NOTE: the closure must remain valid until the <a class="el" href="classdmlc_1_1ThreadedIter.html" title="a iterator that was backed by a thread to pull data eagerly from a single producer into a bounded buf...">ThreadedIter</a> destructs <a href="classdmlc_1_1ThreadedIter.html#a8d2362ec0aa3131b55d121c62b89c02c">More...</a><br /></td></tr>
<tr class="separator:a8d2362ec0aa3131b55d121c62b89c02c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2529ec09aef4266e184907b8d1362947"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter.html#a2529ec09aef4266e184907b8d1362947">Next</a> (DType **out_dptr)</td></tr>
<tr class="memdesc:a2529ec09aef4266e184907b8d1362947"><td class="mdescLeft">&#160;</td><td class="mdescRight">get the next data, this function is threadsafe <a href="classdmlc_1_1ThreadedIter.html#a2529ec09aef4266e184907b8d1362947">More...</a><br /></td></tr>
<tr class="separator:a2529ec09aef4266e184907b8d1362947"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09ee135167825cddbd4ee42aa1e0469c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter.html#a09ee135167825cddbd4ee42aa1e0469c">Recycle</a> (DType **inout_dptr)</td></tr>
<tr class="memdesc:a09ee135167825cddbd4ee42aa1e0469c"><td class="mdescLeft">&#160;</td><td class="mdescRight">recycle the data cell, this function is threadsafe the threaditer can reuse the data cell for future data loading <a href="classdmlc_1_1ThreadedIter.html#a09ee135167825cddbd4ee42aa1e0469c">More...</a><br /></td></tr>
<tr class="separator:a09ee135167825cddbd4ee42aa1e0469c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a23bc29d357139b7cd18deff72a3a9dfb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter.html#a23bc29d357139b7cd18deff72a3a9dfb">ThrowExceptionIfSet</a> (void)</td></tr>
<tr class="memdesc:a23bc29d357139b7cd18deff72a3a9dfb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rethrows exception which is set by the producer. <a href="classdmlc_1_1ThreadedIter.html#a23bc29d357139b7cd18deff72a3a9dfb">More...</a><br /></td></tr>
<tr class="separator:a23bc29d357139b7cd18deff72a3a9dfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac98cf5310bf3c64feb79140d85eb34d7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter.html#ac98cf5310bf3c64feb79140d85eb34d7">ClearException</a> (void)</td></tr>
<tr class="memdesc:ac98cf5310bf3c64feb79140d85eb34d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">clears exception_ptr, called from Init <a href="classdmlc_1_1ThreadedIter.html#ac98cf5310bf3c64feb79140d85eb34d7">More...</a><br /></td></tr>
<tr class="separator:ac98cf5310bf3c64feb79140d85eb34d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a415c711bacb0cd45a4445383ab97c270"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter.html#a415c711bacb0cd45a4445383ab97c270">Next</a> (void)</td></tr>
<tr class="memdesc:a415c711bacb0cd45a4445383ab97c270"><td class="mdescLeft">&#160;</td><td class="mdescRight">adapt the iterator interface's Next NOTE: the call to this function is not threadsafe use the other Next instead <a href="classdmlc_1_1ThreadedIter.html#a415c711bacb0cd45a4445383ab97c270">More...</a><br /></td></tr>
<tr class="separator:a415c711bacb0cd45a4445383ab97c270"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a618e846cc4b7e86d4758450dca016311"><td class="memItemLeft" align="right" valign="top">virtual const DType &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter.html#a618e846cc4b7e86d4758450dca016311">Value</a> (void) const</td></tr>
<tr class="memdesc:a618e846cc4b7e86d4758450dca016311"><td class="mdescLeft">&#160;</td><td class="mdescRight">adapt the iterator interface's Value NOTE: the call to this function is not threadsafe use the other Next instead <a href="classdmlc_1_1ThreadedIter.html#a618e846cc4b7e86d4758450dca016311">More...</a><br /></td></tr>
<tr class="separator:a618e846cc4b7e86d4758450dca016311"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1fa325280288777b5b9dcf15e424fdec"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1ThreadedIter.html#a1fa325280288777b5b9dcf15e424fdec">BeforeFirst</a> (void)</td></tr>
<tr class="memdesc:a1fa325280288777b5b9dcf15e424fdec"><td class="mdescLeft">&#160;</td><td class="mdescRight">set the iterator before first location <a href="classdmlc_1_1ThreadedIter.html#a1fa325280288777b5b9dcf15e424fdec">More...</a><br /></td></tr>
<tr class="separator:a1fa325280288777b5b9dcf15e424fdec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classdmlc_1_1DataIter"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classdmlc_1_1DataIter')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classdmlc_1_1DataIter.html">dmlc::DataIter&lt; DType &gt;</a></td></tr>
<tr class="memitem:aef4acbc5a49dd71edb360149a2b19ee2 inherit pub_methods_classdmlc_1_1DataIter"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdmlc_1_1DataIter.html#aef4acbc5a49dd71edb360149a2b19ee2">~DataIter</a> (void) <a class="el" href="3rdparty_2dmlc-core_2include_2dmlc_2base_8h.html#a80bde16113dc79e7adb7953e006d6b60">DMLC_THROW_EXCEPTION</a></td></tr>
<tr class="memdesc:aef4acbc5a49dd71edb360149a2b19ee2 inherit pub_methods_classdmlc_1_1DataIter"><td class="mdescLeft">&#160;</td><td class="mdescRight">destructor <a href="classdmlc_1_1DataIter.html#aef4acbc5a49dd71edb360149a2b19ee2">More...</a><br /></td></tr>
<tr class="separator:aef4acbc5a49dd71edb360149a2b19ee2 inherit pub_methods_classdmlc_1_1DataIter"><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 DType&gt;<br />
class dmlc::ThreadedIter&lt; DType &gt;</h3>
<p>a iterator that was backed by a thread to pull data eagerly from a single producer into a bounded buffer the consumer can pull the data at its own rate </p>
<p>NOTE: thread concurrency cost time, make sure to store big blob of data in DType</p>
<p>Usage example: </p><div class="fragment"><div class="line">ThreadedIter&lt;DType&gt; iter;</div>
<div class="line">iter.Init(&amp;producer);</div>
<div class="line"><span class="comment">// the following code can be in parallel</span></div>
<div class="line">DType *dptr;</div>
<div class="line"><span class="keywordflow">while</span> (iter.Next(&amp;dptr)) {</div>
<div class="line"> <span class="comment">// do something on dptr</span></div>
<div class="line"> <span class="comment">// recycle the space</span></div>
<div class="line"> iter.Recycle(&amp;dptr);</div>
<div class="line">}</div>
</div><!-- fragment --> <dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">DType</td><td>the type of data blob we support </td></tr>
</table>
</dd>
</dl>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="ad1f3ac33bc99bdf372476b8798dbaeac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad1f3ac33bc99bdf372476b8798dbaeac">&#9670;&nbsp;</a></span>ThreadedIter()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename DType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classdmlc_1_1ThreadedIter.html">dmlc::ThreadedIter</a>&lt; DType &gt;::<a class="el" href="classdmlc_1_1ThreadedIter.html">ThreadedIter</a> </td>
<td>(</td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>max_capacity</em> = <code>8</code></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>constructor </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">max_capacity</td><td>maximum capacity of the queue </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ad95526b8f440147fea318b2b68142322"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad95526b8f440147fea318b2b68142322">&#9670;&nbsp;</a></span>~ThreadedIter()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename DType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual <a class="el" href="classdmlc_1_1ThreadedIter.html">dmlc::ThreadedIter</a>&lt; DType &gt;::~<a class="el" href="classdmlc_1_1ThreadedIter.html">ThreadedIter</a> </td>
<td>(</td>
<td class="paramtype">void&#160;</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 class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>destructor </p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a1fa325280288777b5b9dcf15e424fdec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1fa325280288777b5b9dcf15e424fdec">&#9670;&nbsp;</a></span>BeforeFirst()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename DType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void <a class="el" href="classdmlc_1_1ThreadedIter.html">dmlc::ThreadedIter</a>&lt; DType &gt;::BeforeFirst </td>
<td>(</td>
<td class="paramtype">void&#160;</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 class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>set the iterator before first location </p>
<p>Implements <a class="el" href="classdmlc_1_1DataIter.html#a77735f53af4bb7490009315607ab9135">dmlc::DataIter&lt; DType &gt;</a>.</p>
</div>
</div>
<a id="ac98cf5310bf3c64feb79140d85eb34d7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac98cf5310bf3c64feb79140d85eb34d7">&#9670;&nbsp;</a></span>ClearException()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename DType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classdmlc_1_1ThreadedIter.html">dmlc::ThreadedIter</a>&lt; DType &gt;::ClearException </td>
<td>(</td>
<td class="paramtype">void&#160;</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>clears exception_ptr, called from Init </p>
</div>
</div>
<a id="a1449d5368f4e21f463ab9d2451d6d94b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1449d5368f4e21f463ab9d2451d6d94b">&#9670;&nbsp;</a></span>Destroy()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename DType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classdmlc_1_1ThreadedIter.html">dmlc::ThreadedIter</a>&lt; DType &gt;::Destroy </td>
<td>(</td>
<td class="paramtype">void&#160;</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 all the related resources this is equivalent to destructor, can be used to destroy the threaditer when user think it is appropriate, it is safe to call this multiple times </p>
</div>
</div>
<a id="a8d2362ec0aa3131b55d121c62b89c02c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8d2362ec0aa3131b55d121c62b89c02c">&#9670;&nbsp;</a></span>Init() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename DType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classdmlc_1_1ThreadedIter.html">dmlc::ThreadedIter</a>&lt; DType &gt;::Init </td>
<td>(</td>
<td class="paramtype">std::function&lt; bool(DType **)&gt;&#160;</td>
<td class="paramname"><em>next</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::function&lt; void()&gt;&#160;</td>
<td class="paramname"><em>beforefirst</em> = <code>NotImplemented</code>&#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> </td>
</tr>
</table>
</div><div class="memdoc">
<p>initialize the producer and start the thread pass in two function(closure) of producer to represent the producer the beforefirst function is optional, and defaults to not implemented NOTE: the closure must remain valid until the <a class="el" href="classdmlc_1_1ThreadedIter.html" title="a iterator that was backed by a thread to pull data eagerly from a single producer into a bounded buf...">ThreadedIter</a> destructs </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">next</td><td>the function called to get next element, see <a class="el" href="classdmlc_1_1ThreadedIter_1_1Producer.html#a5fb6a87f053cd14ad85d7a0a5f51fdaf" title="load the data content into DType, the caller can pass in NULL or an existing address when inout_dptr ...">Producer.Next</a> </td></tr>
<tr><td class="paramname">beforefirst</td><td>the function to call to reset the producer, see <a class="el" href="classdmlc_1_1ThreadedIter_1_1Producer.html#a9f0e92b78040ec4997718b7154eb354d" title="reset the producer to beginning">Producer.BeforeFirst</a> </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ad5ab474a70ad755118635873a10f050b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad5ab474a70ad755118635873a10f050b">&#9670;&nbsp;</a></span>Init() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename DType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classdmlc_1_1ThreadedIter.html">dmlc::ThreadedIter</a>&lt; DType &gt;::Init </td>
<td>(</td>
<td class="paramtype">std::shared_ptr&lt; <a class="el" href="classdmlc_1_1ThreadedIter_1_1Producer.html">Producer</a> &gt;&#160;</td>
<td class="paramname"><em>producer</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>initialize the producer and start the thread can only be called once </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">producer</td><td>pointer to the producer </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a2529ec09aef4266e184907b8d1362947"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2529ec09aef4266e184907b8d1362947">&#9670;&nbsp;</a></span>Next() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename DType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classdmlc_1_1ThreadedIter.html">dmlc::ThreadedIter</a>&lt; DType &gt;::Next </td>
<td>(</td>
<td class="paramtype">DType **&#160;</td>
<td class="paramname"><em>out_dptr</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>get the next data, this function is threadsafe </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">out_dptr</td><td>used to hold the pointer to the record after the function call, the caller takes ownership of the pointer the caller can call recycle to return ownership back to the threaditer so that the pointer can be re-used </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true if there is next record, false if we reach the end </dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classdmlc_1_1ThreadedIter.html#a09ee135167825cddbd4ee42aa1e0469c" title="recycle the data cell, this function is threadsafe the threaditer can reuse the data cell for future ...">Recycle</a> </dd></dl>
</div>
</div>
<a id="a415c711bacb0cd45a4445383ab97c270"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a415c711bacb0cd45a4445383ab97c270">&#9670;&nbsp;</a></span>Next() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename DType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual bool <a class="el" href="classdmlc_1_1ThreadedIter.html">dmlc::ThreadedIter</a>&lt; DType &gt;::Next </td>
<td>(</td>
<td class="paramtype">void&#160;</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 class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>adapt the iterator interface's Next NOTE: the call to this function is not threadsafe use the other Next instead </p>
<dl class="section return"><dt>Returns</dt><dd>true if there is next record, false if we reach the end </dd></dl>
<p>Implements <a class="el" href="classdmlc_1_1DataIter.html#a1f07f4d4f87485d1de4b6ba1af4d7b5b">dmlc::DataIter&lt; DType &gt;</a>.</p>
</div>
</div>
<a id="a09ee135167825cddbd4ee42aa1e0469c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a09ee135167825cddbd4ee42aa1e0469c">&#9670;&nbsp;</a></span>Recycle()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename DType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classdmlc_1_1ThreadedIter.html">dmlc::ThreadedIter</a>&lt; DType &gt;::Recycle </td>
<td>(</td>
<td class="paramtype">DType **&#160;</td>
<td class="paramname"><em>inout_dptr</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>recycle the data cell, this function is threadsafe the threaditer can reuse the data cell for future data loading </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">inout_dptr</td><td>pointer to the dptr to recycle, after the function call the content of inout_dptr will be set to NULL </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a5b1107b73e593f12206fcf313303489b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5b1107b73e593f12206fcf313303489b">&#9670;&nbsp;</a></span>set_max_capacity()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename DType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classdmlc_1_1ThreadedIter.html">dmlc::ThreadedIter</a>&lt; DType &gt;::set_max_capacity </td>
<td>(</td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>max_capacity</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>set maximum capacity of the queue </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">max_capacity</td><td>maximum capacity of the queue </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a23bc29d357139b7cd18deff72a3a9dfb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a23bc29d357139b7cd18deff72a3a9dfb">&#9670;&nbsp;</a></span>ThrowExceptionIfSet()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename DType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classdmlc_1_1ThreadedIter.html">dmlc::ThreadedIter</a>&lt; DType &gt;::ThrowExceptionIfSet </td>
<td>(</td>
<td class="paramtype">void&#160;</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>Rethrows exception which is set by the producer. </p>
</div>
</div>
<a id="a618e846cc4b7e86d4758450dca016311"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a618e846cc4b7e86d4758450dca016311">&#9670;&nbsp;</a></span>Value()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename DType &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual const DType&amp; <a class="el" href="classdmlc_1_1ThreadedIter.html">dmlc::ThreadedIter</a>&lt; DType &gt;::Value </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>adapt the iterator interface's Value NOTE: the call to this function is not threadsafe use the other Next instead </p>
<p>Implements <a class="el" href="classdmlc_1_1DataIter.html#a2695f02f824a515b60d4fb0af6c4e6d6">dmlc::DataIter&lt; DType &gt;</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>/work/mxnet/3rdparty/dmlc-core/include/dmlc/<a class="el" href="threadediter_8h_source.html">threadediter.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 5 2023 03:47:40 for mxnet by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.17
</small></address>
</body>
</html>