blob: e83e607f370f130fb2875d05972af84c10423061 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mxnet: /work/mxnet/3rdparty/dmlc-core/include/dmlc/io.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mxnet
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_8cab8f464681f7cc51cee77e79a434cd.html">3rdparty</a></li><li class="navelem"><a class="el" href="dir_82e31a22178767beedddc7597fd1ecb6.html">dmlc-core</a></li><li class="navelem"><a class="el" href="dir_7dd5b88db83ff474628c03c453739a90.html">include</a></li><li class="navelem"><a class="el" href="dir_e30967e3ab51f65ad4b50dd298ccf4e7.html">dmlc</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">io.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="3rdparty_2dmlc-core_2include_2dmlc_2io_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; </div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#ifndef DMLC_IO_H_</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#define DMLC_IO_H_</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;cstdio&gt;</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;istream&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;streambuf&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &quot;./logging.h&quot;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">// include uint64_t only to make io standalone</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 uint64_t;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedmlc.html">dmlc</a> {</div>
<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classdmlc_1_1Stream.html"> 30</a></span>&#160;<span class="keyword">class </span><a class="code" href="classdmlc_1_1Stream.html">Stream</a> { <span class="comment">// NOLINT(*)</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classdmlc_1_1Stream.html#a747da13b990ff68dc9bf9ea5224ad174">Read</a>(<span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> size) = 0;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1Stream.html#a622f1377a64e841ca80c2dd8e1fa5ffd">Write</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> size) = 0;</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classdmlc_1_1Stream.html#a4b1cb597f6f53d10b2e72b49bd695a20"> 46</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classdmlc_1_1Stream.html#a4b1cb597f6f53d10b2e72b49bd695a20">~Stream</a>(<span class="keywordtype">void</span>) {}</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">static</span> <a class="code" href="classdmlc_1_1Stream.html">Stream</a> *<a class="code" href="classdmlc_1_1Stream.html#a243906329f0cea487b35841c9880c028">Create</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *uri,</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> flag,</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">bool</span> allow_null = <span class="keyword">false</span>);</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="comment">// helper functions to write/read different data structures</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"></span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1Stream.html#a622f1377a64e841ca80c2dd8e1fa5ffd">Write</a>(<span class="keyword">const</span> T &amp;data);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classdmlc_1_1Stream.html#a747da13b990ff68dc9bf9ea5224ad174">Read</a>(T *out_data);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1Stream.html#a3e9f1aae4606bb2dff4e1be8ff5ec079">WriteArray</a>(<span class="keyword">const</span> T* data, <span class="keywordtype">size_t</span> num_elems);</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classdmlc_1_1Stream.html#aae7f6937435169a27dbb0050d9bbbd69">ReadArray</a>(T* data, <span class="keywordtype">size_t</span> num_elems);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;};</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classdmlc_1_1SeekStream.html"> 109</a></span>&#160;<span class="keyword">class </span><a class="code" href="classdmlc_1_1SeekStream.html">SeekStream</a>: <span class="keyword">public</span> <a class="code" href="classdmlc_1_1Stream.html">Stream</a> {</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="comment">// virtual destructor</span></div>
<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classdmlc_1_1SeekStream.html#a08fe391cbdb6a54c62e08c98c1246ca0"> 112</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classdmlc_1_1SeekStream.html#a08fe391cbdb6a54c62e08c98c1246ca0">~SeekStream</a>(<span class="keywordtype">void</span>) {}</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1SeekStream.html#a2c3e3dd37a3d3854a2acfe2845ca6c12">Seek</a>(<span class="keywordtype">size_t</span> pos) = 0;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classdmlc_1_1SeekStream.html#abb9876b91c787b538d1aefe460d23290">Tell</a>(<span class="keywordtype">void</span>) = 0;</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">static</span> <a class="code" href="classdmlc_1_1SeekStream.html">SeekStream</a> *<a class="code" href="classdmlc_1_1SeekStream.html#a02cd26339ea4b0c8b9ee8ff615d223a8">CreateForRead</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *uri,</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordtype">bool</span> allow_null = <span class="keyword">false</span>);</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;};</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classdmlc_1_1Serializable.html"> 132</a></span>&#160;<span class="keyword">class </span><a class="code" href="classdmlc_1_1Serializable.html">Serializable</a> {</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classdmlc_1_1Serializable.html#ae3440f6a437ebc80bce41759eeec5719"> 135</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classdmlc_1_1Serializable.html#ae3440f6a437ebc80bce41759eeec5719">~Serializable</a>() {}</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1Serializable.html#a053466933c5f130d811af938d4e209d0">Load</a>(<a class="code" href="classdmlc_1_1Stream.html">Stream</a> *fi) = 0;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1Serializable.html#a751aaf917c52a7649132e94442fca2d8">Save</a>(<a class="code" href="classdmlc_1_1Stream.html">Stream</a> *fo) <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;};</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
<div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="classdmlc_1_1InputSplit.html"> 155</a></span>&#160;<span class="keyword">class </span><a class="code" href="classdmlc_1_1InputSplit.html">InputSplit</a> {</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="structdmlc_1_1InputSplit_1_1Blob.html"> 158</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structdmlc_1_1InputSplit_1_1Blob.html">Blob</a> {</div>
<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="structdmlc_1_1InputSplit_1_1Blob.html#af172e7193a283cbc29555d5c7e0041f7"> 160</a></span>&#160; <span class="keywordtype">void</span> *<a class="code" href="structdmlc_1_1InputSplit_1_1Blob.html#af172e7193a283cbc29555d5c7e0041f7">dptr</a>;</div>
<div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="structdmlc_1_1InputSplit_1_1Blob.html#a8d9f03549a0367784a175e2d67d94be9"> 162</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="structdmlc_1_1InputSplit_1_1Blob.html#a8d9f03549a0367784a175e2d67d94be9">size</a>;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; };</div>
<div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classdmlc_1_1InputSplit.html#a58c7f48bec6bd1a880e59c4bbfdf4417"> 172</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1InputSplit.html#a58c7f48bec6bd1a880e59c4bbfdf4417">HintChunkSize</a>(<span class="keywordtype">size_t</span> chunk_size) {}</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classdmlc_1_1InputSplit.html#af2fb3e0f9acd6bae599a398eb0758044">GetTotalSize</a>(<span class="keywordtype">void</span>) = 0;</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1InputSplit.html#a2f111755a3434097bdd2a765982180a7">BeforeFirst</a>(<span class="keywordtype">void</span>) = 0;</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classdmlc_1_1InputSplit.html#a0f124b34e62d9319dca39fa42e5a59f7">NextRecord</a>(Blob *out_rec) = 0;</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classdmlc_1_1InputSplit.html#a2e835c07ce77d8d873592e006c242156">NextChunk</a>(Blob *out_chunk) = 0;</div>
<div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="classdmlc_1_1InputSplit.html#a938da99f6cbaf1a4667bb00c75692e4b"> 230</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classdmlc_1_1InputSplit.html#a938da99f6cbaf1a4667bb00c75692e4b">NextBatch</a>(<a class="code" href="structdmlc_1_1InputSplit_1_1Blob.html">Blob</a> *out_chunk, <span class="keywordtype">size_t</span> n_records) {</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classdmlc_1_1InputSplit.html#a2e835c07ce77d8d873592e006c242156">NextChunk</a>(out_chunk);</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div>
<div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="classdmlc_1_1InputSplit.html#a00a1f234a44de0950d1011495f41b265"> 234</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classdmlc_1_1InputSplit.html#a00a1f234a44de0950d1011495f41b265">~InputSplit</a>(<span class="keywordtype">void</span>) <a class="code" href="3rdparty_2dmlc-core_2include_2dmlc_2base_8h.html#a80bde16113dc79e7adb7953e006d6b60">DMLC_THROW_EXCEPTION</a> {}</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1InputSplit.html#aaa17b8be6b3f1da35ced68379e3e8dbe">ResetPartition</a>(<span class="keywordtype">unsigned</span> part_index, <span class="keywordtype">unsigned</span> num_parts) = 0;</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">static</span> <a class="code" href="classdmlc_1_1InputSplit.html">InputSplit</a>* <a class="code" href="classdmlc_1_1InputSplit.html#a118dc34dbd121d5ff80cd904adee4c24">Create</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *uri,</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordtype">unsigned</span> part_index,</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordtype">unsigned</span> num_parts,</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *type);</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keyword">static</span> <a class="code" href="classdmlc_1_1InputSplit.html">InputSplit</a>* <a class="code" href="classdmlc_1_1InputSplit.html#a118dc34dbd121d5ff80cd904adee4c24">Create</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *uri,</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *index_uri,</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordtype">unsigned</span> part_index,</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordtype">unsigned</span> num_parts,</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *type,</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> shuffle = <span class="keyword">false</span>,</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> seed = 0,</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> batch_size = 256,</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> recurse_directories = <span class="keyword">false</span>);</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;};</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; </div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="preprocessor">#ifndef _LIBCPP_SGX_NO_IOSTREAMS</span></div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div>
<div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="classdmlc_1_1ostream.html"> 318</a></span>&#160;<span class="keyword">class </span><a class="code" href="classdmlc_1_1ostream.html">ostream</a> : <span class="keyword">public</span> std::basic_ostream&lt;char&gt; {</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classdmlc_1_1ostream.html#aafe415657c7e44e2167a77b9a442bafe"> 325</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classdmlc_1_1ostream.html#aafe415657c7e44e2167a77b9a442bafe">ostream</a>(<a class="code" href="classdmlc_1_1Stream.html">Stream</a> *stream,</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordtype">size_t</span> buffer_size = (1 &lt;&lt; 10))</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; : <a class="code" href="namespacestd.html">std</a>::basic_ostream&lt;char&gt;(NULL), buf_(buffer_size) {</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; this-&gt;<a class="code" href="classdmlc_1_1ostream.html#a7cd937753b09a5ea66fb5ab20aa0a315">set_stream</a>(stream);</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; }</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// explictly synchronize the buffer</span></div>
<div class="line"><a name="l00331"></a><span class="lineno"><a class="line" href="classdmlc_1_1ostream.html#af0f8b262f987bbb01c43a188717cabdd"> 331</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classdmlc_1_1ostream.html#af0f8b262f987bbb01c43a188717cabdd">~ostream</a>() <a class="code" href="3rdparty_2dmlc-core_2include_2dmlc_2base_8h.html#aef922e69a4efaccd25161afa4cfb2811">DMLC_NO_EXCEPTION</a> {</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; buf_.pubsync();</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div>
<div class="line"><a name="l00338"></a><span class="lineno"><a class="line" href="classdmlc_1_1ostream.html#a7cd937753b09a5ea66fb5ab20aa0a315"> 338</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1ostream.html#a7cd937753b09a5ea66fb5ab20aa0a315">set_stream</a>(<a class="code" href="classdmlc_1_1Stream.html">Stream</a> *stream) {</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; buf_.set_stream(stream);</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; this-&gt;rdbuf(&amp;buf_);</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; </div>
<div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="classdmlc_1_1ostream.html#adda195431c39a9afddea3151758e3c05"> 344</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">size_t</span> <a class="code" href="classdmlc_1_1ostream.html#adda195431c39a9afddea3151758e3c05">bytes_written</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">return</span> buf_.bytes_out();</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; </div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="comment">// internal streambuf</span></div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keyword">class </span>OutBuf : <span class="keyword">public</span> std::streambuf {</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keyword">explicit</span> OutBuf(<span class="keywordtype">size_t</span> buffer_size)</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; : stream_(NULL), buffer_(buffer_size), bytes_out_(0) {</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">if</span> (buffer_size == 0) buffer_.resize(2);</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; }</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">// set stream to the buffer</span></div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1ostream.html#a7cd937753b09a5ea66fb5ab20aa0a315">set_stream</a>(Stream *stream);</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; </div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">size_t</span> bytes_out()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> bytes_out_; }</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; Stream *stream_;</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; std::vector&lt;char&gt; buffer_;</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordtype">size_t</span> bytes_out_;</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="comment">// override sync</span></div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">inline</span> int_type sync(<span class="keywordtype">void</span>);</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="comment">// override overflow</span></div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">inline</span> int_type overflow(<span class="keywordtype">int</span> c);</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; };</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; OutBuf buf_;</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;};</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; </div>
<div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="classdmlc_1_1istream.html"> 389</a></span>&#160;<span class="keyword">class </span><a class="code" href="classdmlc_1_1istream.html">istream</a> : <span class="keyword">public</span> std::basic_istream&lt;char&gt; {</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00396"></a><span class="lineno"><a class="line" href="classdmlc_1_1istream.html#a777f9d3bb1c338f92258732517626a19"> 396</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classdmlc_1_1istream.html#a777f9d3bb1c338f92258732517626a19">istream</a>(<a class="code" href="classdmlc_1_1Stream.html">Stream</a> *stream,</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordtype">size_t</span> buffer_size = (1 &lt;&lt; 10))</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; : <a class="code" href="namespacestd.html">std</a>::basic_istream&lt;char&gt;(NULL), buf_(buffer_size) {</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; this-&gt;<a class="code" href="classdmlc_1_1istream.html#a595429218782be17f99857b363465a16">set_stream</a>(stream);</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div>
<div class="line"><a name="l00401"></a><span class="lineno"><a class="line" href="classdmlc_1_1istream.html#abfb8b1af4df69cfb24836d837bd3e316"> 401</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classdmlc_1_1istream.html#abfb8b1af4df69cfb24836d837bd3e316">~istream</a>() <a class="code" href="3rdparty_2dmlc-core_2include_2dmlc_2base_8h.html#aef922e69a4efaccd25161afa4cfb2811">DMLC_NO_EXCEPTION</a> {}</div>
<div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="classdmlc_1_1istream.html#a595429218782be17f99857b363465a16"> 406</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1istream.html#a595429218782be17f99857b363465a16">set_stream</a>(<a class="code" href="classdmlc_1_1Stream.html">Stream</a> *stream) {</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; buf_.set_stream(stream);</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; this-&gt;rdbuf(&amp;buf_);</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</div>
<div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="classdmlc_1_1istream.html#a4a853b4457f953dec7081834ad962e35"> 411</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">size_t</span> <a class="code" href="classdmlc_1_1istream.html#a4a853b4457f953dec7081834ad962e35">bytes_read</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">return</span> buf_.bytes_read();</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; </div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="comment">// internal streambuf</span></div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keyword">class </span>InBuf : <span class="keyword">public</span> std::streambuf {</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keyword">explicit</span> InBuf(<span class="keywordtype">size_t</span> buffer_size)</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; : stream_(NULL), bytes_read_(0),</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; buffer_(buffer_size) {</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">if</span> (buffer_size == 0) buffer_.resize(2);</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="comment">// set stream to the buffer</span></div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1istream.html#a595429218782be17f99857b363465a16">set_stream</a>(Stream *stream);</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="comment">// return how many bytes read so far</span></div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">size_t</span> <a class="code" href="classdmlc_1_1istream.html#a4a853b4457f953dec7081834ad962e35">bytes_read</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">return</span> bytes_read_;</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; Stream *stream_;</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordtype">size_t</span> bytes_read_;</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; std::vector&lt;char&gt; buffer_;</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="comment">// override underflow</span></div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keyword">inline</span> int_type underflow();</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; };</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; InBuf buf_;</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;};</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;} <span class="comment">// namespace dmlc</span></div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; </div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="serializer_8h.html">./serializer.h</a>&quot;</span></div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; </div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedmlc.html">dmlc</a> {</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="comment">// implementations of inline functions</span></div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00451"></a><span class="lineno"><a class="line" href="classdmlc_1_1Stream.html#a3600b93771ffdb0c3181bd477e045ce7"> 451</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1Stream.html#a622f1377a64e841ca80c2dd8e1fa5ffd">Stream::Write</a>(<span class="keyword">const</span> T &amp;data) {</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <a class="code" href="structdmlc_1_1serializer_1_1Handler.html#a57ace2d259a78520ebdc38b9fb588420">serializer::Handler&lt;T&gt;::Write</a>(<span class="keyword">this</span>, data);</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;}</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00455"></a><span class="lineno"><a class="line" href="classdmlc_1_1Stream.html#ae71c1aa5dfabaa2eb542fd51d824f503"> 455</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classdmlc_1_1Stream.html#a747da13b990ff68dc9bf9ea5224ad174">Stream::Read</a>(T *out_data) {</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structdmlc_1_1serializer_1_1Handler.html#a9568ef43a657578f7b4017e6b33f3e6c">serializer::Handler&lt;T&gt;::Read</a>(<span class="keyword">this</span>, out_data);</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;}</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; </div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="classdmlc_1_1Stream.html#a3e9f1aae4606bb2dff4e1be8ff5ec079"> 460</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1Stream.html#a3e9f1aae4606bb2dff4e1be8ff5ec079">Stream::WriteArray</a>(<span class="keyword">const</span> T* data, <span class="keywordtype">size_t</span> num_elems) {</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; num_elems; ++i) {</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; this-&gt;Write&lt;T&gt;(data[i]);</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; }</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;}</div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; </div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="classdmlc_1_1Stream.html#aae7f6937435169a27dbb0050d9bbbd69"> 467</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classdmlc_1_1Stream.html#aae7f6937435169a27dbb0050d9bbbd69">Stream::ReadArray</a>(T* data, <span class="keywordtype">size_t</span> num_elems) {</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; num_elems; ++i) {</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">if</span> (!this-&gt;Read&lt;T&gt;(data + i)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;}</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; </div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="preprocessor">#ifndef _LIBCPP_SGX_NO_IOSTREAMS</span></div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="comment">// implementations for ostream</span></div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> ostream::OutBuf::set_stream(<a class="code" href="classdmlc_1_1Stream.html">Stream</a> *stream) {</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">if</span> (stream_ != NULL) this-&gt;pubsync();</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; this-&gt;stream_ = stream;</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; this-&gt;setp(&amp;buffer_[0], &amp;buffer_[0] + buffer_.size() - 1);</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;}</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> ostream::OutBuf::sync(<span class="keywordtype">void</span>) {</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">if</span> (stream_ == NULL) <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; std::ptrdiff_t n = pptr() - pbase();</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; stream_-&gt;Write(pbase(), n);</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; this-&gt;pbump(-<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(n));</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; bytes_out_ += n;</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;}</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> ostream::OutBuf::overflow(<span class="keywordtype">int</span> c) {</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; *(this-&gt;pptr()) = c;</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; std::ptrdiff_t n = pptr() - pbase();</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; this-&gt;pbump(-<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(n));</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">if</span> (c == EOF) {</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; stream_-&gt;Write(pbase(), n);</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; bytes_out_ += n;</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; stream_-&gt;Write(pbase(), n + 1);</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; bytes_out_ += n + 1;</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; }</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">return</span> c;</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;}</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; </div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;<span class="comment">// implementations for istream</span></div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> istream::InBuf::set_stream(Stream *stream) {</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; stream_ = stream;</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; this-&gt;setg(&amp;buffer_[0], &amp;buffer_[0], &amp;buffer_[0]);</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;}</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> istream::InBuf::underflow() {</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordtype">char</span> *bhead = &amp;buffer_[0];</div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">if</span> (this-&gt;gptr() == this-&gt;egptr()) {</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordtype">size_t</span> sz = stream_-&gt;Read(bhead, buffer_.size());</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; this-&gt;setg(bhead, bhead, bhead + sz);</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; bytes_read_ += sz;</div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; }</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">if</span> (this-&gt;gptr() == this-&gt;egptr()) {</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">return</span> traits_type::eof();</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">return</span> traits_type::to_int_type(*gptr());</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;}</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; </div>
<div class="line"><a name="l00523"></a><span class="lineno"><a class="line" href="namespacedmlc_1_1io.html"> 523</a></span>&#160;<span class="keyword">namespace </span>io {</div>
<div class="line"><a name="l00525"></a><span class="lineno"><a class="line" href="structdmlc_1_1io_1_1URI.html"> 525</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structdmlc_1_1io_1_1URI.html">URI</a> {</div>
<div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="structdmlc_1_1io_1_1URI.html#a78b53e079a958bac413f49601670aa3b"> 527</a></span>&#160; std::string <a class="code" href="structdmlc_1_1io_1_1URI.html#a78b53e079a958bac413f49601670aa3b">protocol</a>;</div>
<div class="line"><a name="l00531"></a><span class="lineno"><a class="line" href="structdmlc_1_1io_1_1URI.html#a210e9bff4da5dac23a113da6526396f4"> 531</a></span>&#160; std::string <a class="code" href="structdmlc_1_1io_1_1URI.html#a210e9bff4da5dac23a113da6526396f4">host</a>;</div>
<div class="line"><a name="l00533"></a><span class="lineno"><a class="line" href="structdmlc_1_1io_1_1URI.html#a94b175008085c6dbdc1b76befe2afdef"> 533</a></span>&#160; std::string <a class="code" href="structdmlc_1_1io_1_1URI.html#a94b175008085c6dbdc1b76befe2afdef">name</a>;</div>
<div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="structdmlc_1_1io_1_1URI.html#ae8edd37a9babb583d2edca1ac3a59162"> 535</a></span>&#160; <a class="code" href="structdmlc_1_1io_1_1URI.html#ae8edd37a9babb583d2edca1ac3a59162">URI</a>(<span class="keywordtype">void</span>) {}</div>
<div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="structdmlc_1_1io_1_1URI.html#a48993d32687bd27d23a9f7ae56b364e5"> 539</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="structdmlc_1_1io_1_1URI.html#a48993d32687bd27d23a9f7ae56b364e5">URI</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *uri) {</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *p = std::strstr(uri, <span class="stringliteral">&quot;://&quot;</span>);</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keywordflow">if</span> (p == NULL) {</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="structdmlc_1_1io_1_1URI.html#a94b175008085c6dbdc1b76befe2afdef">name</a> = uri;</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <a class="code" href="structdmlc_1_1io_1_1URI.html#a78b53e079a958bac413f49601670aa3b">protocol</a> = std::string(uri, p - uri + 3);</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; uri = p + 3;</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; p = std::strchr(uri, <span class="charliteral">&#39;/&#39;</span>);</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">if</span> (p == NULL) {</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <a class="code" href="structdmlc_1_1io_1_1URI.html#a210e9bff4da5dac23a113da6526396f4">host</a> = uri; <a class="code" href="structdmlc_1_1io_1_1URI.html#a94b175008085c6dbdc1b76befe2afdef">name</a> = <span class="charliteral">&#39;/&#39;</span>;</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="structdmlc_1_1io_1_1URI.html#a210e9bff4da5dac23a113da6526396f4">host</a> = std::string(uri, p - uri);</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <a class="code" href="structdmlc_1_1io_1_1URI.html#a94b175008085c6dbdc1b76befe2afdef">name</a> = p;</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div>
<div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="structdmlc_1_1io_1_1URI.html#a6aefa55a0899302d926972f5cb47e8c3"> 556</a></span>&#160; <span class="keyword">inline</span> std::string <a class="code" href="structdmlc_1_1io_1_1URI.html#a6aefa55a0899302d926972f5cb47e8c3">str</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structdmlc_1_1io_1_1URI.html#a78b53e079a958bac413f49601670aa3b">protocol</a> + <a class="code" href="structdmlc_1_1io_1_1URI.html#a210e9bff4da5dac23a113da6526396f4">host</a> + <a class="code" href="structdmlc_1_1io_1_1URI.html#a94b175008085c6dbdc1b76befe2afdef">name</a>;</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; }</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;};</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; </div>
<div class="line"><a name="l00562"></a><span class="lineno"><a class="line" href="namespacedmlc_1_1io.html#a295a71dbabfdbef0786bae24873a7b51"> 562</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacedmlc_1_1io.html#a295a71dbabfdbef0786bae24873a7b51">FileType</a> {</div>
<div class="line"><a name="l00564"></a><span class="lineno"><a class="line" href="namespacedmlc_1_1io.html#a295a71dbabfdbef0786bae24873a7b51add06b95c0792e7674e860b2a2116097e"> 564</a></span>&#160; <a class="code" href="namespacedmlc_1_1io.html#a295a71dbabfdbef0786bae24873a7b51add06b95c0792e7674e860b2a2116097e">kFile</a>,</div>
<div class="line"><a name="l00566"></a><span class="lineno"><a class="line" href="namespacedmlc_1_1io.html#a295a71dbabfdbef0786bae24873a7b51a584c0e2875268906fb5a3e8ae587d60f"> 566</a></span>&#160; <a class="code" href="namespacedmlc_1_1io.html#a295a71dbabfdbef0786bae24873a7b51a584c0e2875268906fb5a3e8ae587d60f">kDirectory</a></div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;};</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; </div>
<div class="line"><a name="l00570"></a><span class="lineno"><a class="line" href="structdmlc_1_1io_1_1FileInfo.html"> 570</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structdmlc_1_1io_1_1FileInfo.html">FileInfo</a> {</div>
<div class="line"><a name="l00572"></a><span class="lineno"><a class="line" href="structdmlc_1_1io_1_1FileInfo.html#ad31d04d8006c687aa2068949156544e0"> 572</a></span>&#160; <a class="code" href="structdmlc_1_1io_1_1URI.html">URI</a> <a class="code" href="structdmlc_1_1io_1_1FileInfo.html#ad31d04d8006c687aa2068949156544e0">path</a>;</div>
<div class="line"><a name="l00574"></a><span class="lineno"><a class="line" href="structdmlc_1_1io_1_1FileInfo.html#a43cfb350dbcdeae04c56c4b8652df9f6"> 574</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="structdmlc_1_1io_1_1FileInfo.html#a43cfb350dbcdeae04c56c4b8652df9f6">size</a>;</div>
<div class="line"><a name="l00576"></a><span class="lineno"><a class="line" href="structdmlc_1_1io_1_1FileInfo.html#a9c8a5478f63c40e1064271edf9f14eed"> 576</a></span>&#160; <a class="code" href="namespacedmlc_1_1io.html#a295a71dbabfdbef0786bae24873a7b51">FileType</a> <a class="code" href="structdmlc_1_1io_1_1FileInfo.html#a9c8a5478f63c40e1064271edf9f14eed">type</a>;</div>
<div class="line"><a name="l00578"></a><span class="lineno"><a class="line" href="structdmlc_1_1io_1_1FileInfo.html#a4b435bdd180f6144518f1d3f0d0d3faa"> 578</a></span>&#160; <a class="code" href="structdmlc_1_1io_1_1FileInfo.html#a4b435bdd180f6144518f1d3f0d0d3faa">FileInfo</a>() : <a class="code" href="structdmlc_1_1io_1_1FileInfo.html#a43cfb350dbcdeae04c56c4b8652df9f6">size</a>(0), <a class="code" href="structdmlc_1_1io_1_1FileInfo.html#a9c8a5478f63c40e1064271edf9f14eed">type</a>(<a class="code" href="namespacedmlc_1_1io.html#a295a71dbabfdbef0786bae24873a7b51add06b95c0792e7674e860b2a2116097e">kFile</a>) {}</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;};</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; </div>
<div class="line"><a name="l00582"></a><span class="lineno"><a class="line" href="classdmlc_1_1io_1_1FileSystem.html"> 582</a></span>&#160;<span class="keyword">class </span><a class="code" href="classdmlc_1_1io_1_1FileSystem.html">FileSystem</a> {</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keyword">static</span> <a class="code" href="classdmlc_1_1io_1_1FileSystem.html">FileSystem</a> *<a class="code" href="classdmlc_1_1io_1_1FileSystem.html#a51d05555c77063a0944053950ad179f3">GetInstance</a>(<span class="keyword">const</span> <a class="code" href="structdmlc_1_1io_1_1URI.html">URI</a> &amp;path);</div>
<div class="line"><a name="l00593"></a><span class="lineno"><a class="line" href="classdmlc_1_1io_1_1FileSystem.html#a00b2d929bc6b5899d54165c8af219814"> 593</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classdmlc_1_1io_1_1FileSystem.html#a00b2d929bc6b5899d54165c8af219814">~FileSystem</a>() {}</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keyword">virtual</span> <a class="code" href="structdmlc_1_1io_1_1FileInfo.html">FileInfo</a> <a class="code" href="classdmlc_1_1io_1_1FileSystem.html#a62577b6d6daa6e34656c5bd76b6cea60">GetPathInfo</a>(<span class="keyword">const</span> <a class="code" href="structdmlc_1_1io_1_1URI.html">URI</a> &amp;path) = 0;</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1io_1_1FileSystem.html#a765105d4aaaf98df0f1bdd21e9d028ea">ListDirectory</a>(<span class="keyword">const</span> <a class="code" href="structdmlc_1_1io_1_1URI.html">URI</a> &amp;path, std::vector&lt;FileInfo&gt; *out_list) = 0;</div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classdmlc_1_1io_1_1FileSystem.html#ac028b881891578c7e2ba50c0a738ba50">ListDirectoryRecursive</a>(<span class="keyword">const</span> <a class="code" href="structdmlc_1_1io_1_1URI.html">URI</a> &amp;path,</div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; std::vector&lt;FileInfo&gt; *out_list);</div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classdmlc_1_1Stream.html">Stream</a> *<a class="code" href="classdmlc_1_1io_1_1FileSystem.html#a507723430906d48bf311190ffebcd79b">Open</a>(<span class="keyword">const</span> <a class="code" href="structdmlc_1_1io_1_1URI.html">URI</a> &amp;path,</div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> flag,</div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordtype">bool</span> allow_null = <span class="keyword">false</span>) = 0;</div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classdmlc_1_1SeekStream.html">SeekStream</a> *<a class="code" href="classdmlc_1_1io_1_1FileSystem.html#ad4d80e4dcd323d02025f5452a4d895b9">OpenForRead</a>(<span class="keyword">const</span> <a class="code" href="structdmlc_1_1io_1_1URI.html">URI</a> &amp;path,</div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keywordtype">bool</span> allow_null = <span class="keyword">false</span>) = 0;</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;};</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; </div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;} <span class="comment">// namespace io</span></div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;} <span class="comment">// namespace dmlc</span></div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="preprocessor">#endif // DMLC_IO_H_</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructdmlc_1_1io_1_1URI_html_a94b175008085c6dbdc1b76befe2afdef"><div class="ttname"><a href="structdmlc_1_1io_1_1URI.html#a94b175008085c6dbdc1b76befe2afdef">dmlc::io::URI::name</a></div><div class="ttdeci">std::string name</div><div class="ttdoc">name of the path</div><div class="ttdef"><b>Definition:</b> io.h:533</div></div>
<div class="ttc" id="astructdmlc_1_1io_1_1URI_html_ae8edd37a9babb583d2edca1ac3a59162"><div class="ttname"><a href="structdmlc_1_1io_1_1URI.html#ae8edd37a9babb583d2edca1ac3a59162">dmlc::io::URI::URI</a></div><div class="ttdeci">URI(void)</div><div class="ttdoc">enable default constructor</div><div class="ttdef"><b>Definition:</b> io.h:535</div></div>
<div class="ttc" id="aclassdmlc_1_1istream_html_a777f9d3bb1c338f92258732517626a19"><div class="ttname"><a href="classdmlc_1_1istream.html#a777f9d3bb1c338f92258732517626a19">dmlc::istream::istream</a></div><div class="ttdeci">istream(Stream *stream, size_t buffer_size=(1&lt;&lt; 10))</div><div class="ttdoc">construct std::ostream type</div><div class="ttdef"><b>Definition:</b> io.h:396</div></div>
<div class="ttc" id="aclassdmlc_1_1Serializable_html_ae3440f6a437ebc80bce41759eeec5719"><div class="ttname"><a href="classdmlc_1_1Serializable.html#ae3440f6a437ebc80bce41759eeec5719">dmlc::Serializable::~Serializable</a></div><div class="ttdeci">virtual ~Serializable()</div><div class="ttdoc">virtual destructor</div><div class="ttdef"><b>Definition:</b> io.h:135</div></div>
<div class="ttc" id="anamespacedmlc_html"><div class="ttname"><a href="namespacedmlc.html">dmlc</a></div><div class="ttdoc">namespace for dmlc</div><div class="ttdef"><b>Definition:</b> array_view.h:12</div></div>
<div class="ttc" id="aclassdmlc_1_1InputSplit_html_a118dc34dbd121d5ff80cd904adee4c24"><div class="ttname"><a href="classdmlc_1_1InputSplit.html#a118dc34dbd121d5ff80cd904adee4c24">dmlc::InputSplit::Create</a></div><div class="ttdeci">static InputSplit * Create(const char *uri, unsigned part_index, unsigned num_parts, const char *type)</div><div class="ttdoc">factory function: create input split given a uri</div></div>
<div class="ttc" id="aclassdmlc_1_1io_1_1FileSystem_html_a51d05555c77063a0944053950ad179f3"><div class="ttname"><a href="classdmlc_1_1io_1_1FileSystem.html#a51d05555c77063a0944053950ad179f3">dmlc::io::FileSystem::GetInstance</a></div><div class="ttdeci">static FileSystem * GetInstance(const URI &amp;path)</div><div class="ttdoc">get singleton of filesystem instance according to URI</div></div>
<div class="ttc" id="a3rdparty_2dmlc-core_2include_2dmlc_2base_8h_html_aef922e69a4efaccd25161afa4cfb2811"><div class="ttname"><a href="3rdparty_2dmlc-core_2include_2dmlc_2base_8h.html#aef922e69a4efaccd25161afa4cfb2811">DMLC_NO_EXCEPTION</a></div><div class="ttdeci">#define DMLC_NO_EXCEPTION</div><div class="ttdef"><b>Definition:</b> base.h:234</div></div>
<div class="ttc" id="aclassdmlc_1_1io_1_1FileSystem_html_a765105d4aaaf98df0f1bdd21e9d028ea"><div class="ttname"><a href="classdmlc_1_1io_1_1FileSystem.html#a765105d4aaaf98df0f1bdd21e9d028ea">dmlc::io::FileSystem::ListDirectory</a></div><div class="ttdeci">virtual void ListDirectory(const URI &amp;path, std::vector&lt; FileInfo &gt; *out_list)=0</div><div class="ttdoc">list files in a directory</div></div>
<div class="ttc" id="aclassdmlc_1_1SeekStream_html_a08fe391cbdb6a54c62e08c98c1246ca0"><div class="ttname"><a href="classdmlc_1_1SeekStream.html#a08fe391cbdb6a54c62e08c98c1246ca0">dmlc::SeekStream::~SeekStream</a></div><div class="ttdeci">virtual ~SeekStream(void)</div><div class="ttdef"><b>Definition:</b> io.h:112</div></div>
<div class="ttc" id="astructdmlc_1_1io_1_1FileInfo_html_a9c8a5478f63c40e1064271edf9f14eed"><div class="ttname"><a href="structdmlc_1_1io_1_1FileInfo.html#a9c8a5478f63c40e1064271edf9f14eed">dmlc::io::FileInfo::type</a></div><div class="ttdeci">FileType type</div><div class="ttdoc">the type of the file</div><div class="ttdef"><b>Definition:</b> io.h:576</div></div>
<div class="ttc" id="astructdmlc_1_1InputSplit_1_1Blob_html"><div class="ttname"><a href="structdmlc_1_1InputSplit_1_1Blob.html">dmlc::InputSplit::Blob</a></div><div class="ttdoc">a blob of memory region</div><div class="ttdef"><b>Definition:</b> io.h:158</div></div>
<div class="ttc" id="aclassdmlc_1_1SeekStream_html_abb9876b91c787b538d1aefe460d23290"><div class="ttname"><a href="classdmlc_1_1SeekStream.html#abb9876b91c787b538d1aefe460d23290">dmlc::SeekStream::Tell</a></div><div class="ttdeci">virtual size_t Tell(void)=0</div><div class="ttdoc">tell the position of the stream</div></div>
<div class="ttc" id="aclassdmlc_1_1ostream_html"><div class="ttname"><a href="classdmlc_1_1ostream.html">dmlc::ostream</a></div><div class="ttdoc">a std::ostream class that can can wrap Stream objects, can use ostream with that output to underlying...</div><div class="ttdef"><b>Definition:</b> io.h:318</div></div>
<div class="ttc" id="aclassdmlc_1_1io_1_1FileSystem_html_ad4d80e4dcd323d02025f5452a4d895b9"><div class="ttname"><a href="classdmlc_1_1io_1_1FileSystem.html#ad4d80e4dcd323d02025f5452a4d895b9">dmlc::io::FileSystem::OpenForRead</a></div><div class="ttdeci">virtual SeekStream * OpenForRead(const URI &amp;path, bool allow_null=false)=0</div><div class="ttdoc">open a seekable stream for read</div></div>
<div class="ttc" id="aclassdmlc_1_1InputSplit_html_a0f124b34e62d9319dca39fa42e5a59f7"><div class="ttname"><a href="classdmlc_1_1InputSplit.html#a0f124b34e62d9319dca39fa42e5a59f7">dmlc::InputSplit::NextRecord</a></div><div class="ttdeci">virtual bool NextRecord(Blob *out_rec)=0</div><div class="ttdoc">get the next record, the returning value is valid until next call to NextRecord, NextChunk or NextBat...</div></div>
<div class="ttc" id="astructdmlc_1_1io_1_1FileInfo_html_a43cfb350dbcdeae04c56c4b8652df9f6"><div class="ttname"><a href="structdmlc_1_1io_1_1FileInfo.html#a43cfb350dbcdeae04c56c4b8652df9f6">dmlc::io::FileInfo::size</a></div><div class="ttdeci">size_t size</div><div class="ttdoc">the size of the file</div><div class="ttdef"><b>Definition:</b> io.h:574</div></div>
<div class="ttc" id="aclassdmlc_1_1InputSplit_html_a00a1f234a44de0950d1011495f41b265"><div class="ttname"><a href="classdmlc_1_1InputSplit.html#a00a1f234a44de0950d1011495f41b265">dmlc::InputSplit::~InputSplit</a></div><div class="ttdeci">virtual ~InputSplit(void) DMLC_THROW_EXCEPTION</div><div class="ttdoc">destructor</div><div class="ttdef"><b>Definition:</b> io.h:234</div></div>
<div class="ttc" id="aclassdmlc_1_1Stream_html_aae7f6937435169a27dbb0050d9bbbd69"><div class="ttname"><a href="classdmlc_1_1Stream.html#aae7f6937435169a27dbb0050d9bbbd69">dmlc::Stream::ReadArray</a></div><div class="ttdeci">bool ReadArray(T *data, size_t num_elems)</div><div class="ttdoc">Endian aware read array of data.</div><div class="ttdef"><b>Definition:</b> io.h:467</div></div>
<div class="ttc" id="aclassdmlc_1_1InputSplit_html_a2f111755a3434097bdd2a765982180a7"><div class="ttname"><a href="classdmlc_1_1InputSplit.html#a2f111755a3434097bdd2a765982180a7">dmlc::InputSplit::BeforeFirst</a></div><div class="ttdeci">virtual void BeforeFirst(void)=0</div><div class="ttdoc">reset the position of InputSplit to beginning</div></div>
<div class="ttc" id="aclassdmlc_1_1Serializable_html_a053466933c5f130d811af938d4e209d0"><div class="ttname"><a href="classdmlc_1_1Serializable.html#a053466933c5f130d811af938d4e209d0">dmlc::Serializable::Load</a></div><div class="ttdeci">virtual void Load(Stream *fi)=0</div><div class="ttdoc">load the model from a stream</div></div>
<div class="ttc" id="aclassdmlc_1_1ostream_html_af0f8b262f987bbb01c43a188717cabdd"><div class="ttname"><a href="classdmlc_1_1ostream.html#af0f8b262f987bbb01c43a188717cabdd">dmlc::ostream::~ostream</a></div><div class="ttdeci">virtual ~ostream() DMLC_NO_EXCEPTION</div><div class="ttdef"><b>Definition:</b> io.h:331</div></div>
<div class="ttc" id="astructdmlc_1_1InputSplit_1_1Blob_html_af172e7193a283cbc29555d5c7e0041f7"><div class="ttname"><a href="structdmlc_1_1InputSplit_1_1Blob.html#af172e7193a283cbc29555d5c7e0041f7">dmlc::InputSplit::Blob::dptr</a></div><div class="ttdeci">void * dptr</div><div class="ttdoc">points to start of the memory region</div><div class="ttdef"><b>Definition:</b> io.h:160</div></div>
<div class="ttc" id="aclassdmlc_1_1Stream_html_a622f1377a64e841ca80c2dd8e1fa5ffd"><div class="ttname"><a href="classdmlc_1_1Stream.html#a622f1377a64e841ca80c2dd8e1fa5ffd">dmlc::Stream::Write</a></div><div class="ttdeci">virtual void Write(const void *ptr, size_t size)=0</div><div class="ttdoc">writes data to a stream</div></div>
<div class="ttc" id="astructdmlc_1_1io_1_1FileInfo_html_a4b435bdd180f6144518f1d3f0d0d3faa"><div class="ttname"><a href="structdmlc_1_1io_1_1FileInfo.html#a4b435bdd180f6144518f1d3f0d0d3faa">dmlc::io::FileInfo::FileInfo</a></div><div class="ttdeci">FileInfo()</div><div class="ttdoc">default constructor</div><div class="ttdef"><b>Definition:</b> io.h:578</div></div>
<div class="ttc" id="aclassdmlc_1_1InputSplit_html_af2fb3e0f9acd6bae599a398eb0758044"><div class="ttname"><a href="classdmlc_1_1InputSplit.html#af2fb3e0f9acd6bae599a398eb0758044">dmlc::InputSplit::GetTotalSize</a></div><div class="ttdeci">virtual size_t GetTotalSize(void)=0</div><div class="ttdoc">get the total size of the InputSplit</div></div>
<div class="ttc" id="aclassdmlc_1_1InputSplit_html_aaa17b8be6b3f1da35ced68379e3e8dbe"><div class="ttname"><a href="classdmlc_1_1InputSplit.html#aaa17b8be6b3f1da35ced68379e3e8dbe">dmlc::InputSplit::ResetPartition</a></div><div class="ttdeci">virtual void ResetPartition(unsigned part_index, unsigned num_parts)=0</div><div class="ttdoc">reset the Input split to a certain part id, The InputSplit will be pointed to the head of the new spe...</div></div>
<div class="ttc" id="aclassdmlc_1_1istream_html_a4a853b4457f953dec7081834ad962e35"><div class="ttname"><a href="classdmlc_1_1istream.html#a4a853b4457f953dec7081834ad962e35">dmlc::istream::bytes_read</a></div><div class="ttdeci">size_t bytes_read(void) const</div><div class="ttdef"><b>Definition:</b> io.h:411</div></div>
<div class="ttc" id="astructdmlc_1_1io_1_1FileInfo_html_ad31d04d8006c687aa2068949156544e0"><div class="ttname"><a href="structdmlc_1_1io_1_1FileInfo.html#ad31d04d8006c687aa2068949156544e0">dmlc::io::FileInfo::path</a></div><div class="ttdeci">URI path</div><div class="ttdoc">full path to the file</div><div class="ttdef"><b>Definition:</b> io.h:572</div></div>
<div class="ttc" id="astructdmlc_1_1io_1_1URI_html_a48993d32687bd27d23a9f7ae56b364e5"><div class="ttname"><a href="structdmlc_1_1io_1_1URI.html#a48993d32687bd27d23a9f7ae56b364e5">dmlc::io::URI::URI</a></div><div class="ttdeci">URI(const char *uri)</div><div class="ttdoc">construct from URI string</div><div class="ttdef"><b>Definition:</b> io.h:539</div></div>
<div class="ttc" id="aclassdmlc_1_1InputSplit_html_a2e835c07ce77d8d873592e006c242156"><div class="ttname"><a href="classdmlc_1_1InputSplit.html#a2e835c07ce77d8d873592e006c242156">dmlc::InputSplit::NextChunk</a></div><div class="ttdeci">virtual bool NextChunk(Blob *out_chunk)=0</div><div class="ttdoc">get a chunk of memory that can contain multiple records, the caller needs to parse the content of the...</div></div>
<div class="ttc" id="anamespacedmlc_1_1io_html_a295a71dbabfdbef0786bae24873a7b51a584c0e2875268906fb5a3e8ae587d60f"><div class="ttname"><a href="namespacedmlc_1_1io.html#a295a71dbabfdbef0786bae24873a7b51a584c0e2875268906fb5a3e8ae587d60f">dmlc::io::kDirectory</a></div><div class="ttdeci">@ kDirectory</div><div class="ttdoc">the file is directory</div><div class="ttdef"><b>Definition:</b> io.h:566</div></div>
<div class="ttc" id="aclassdmlc_1_1ostream_html_aafe415657c7e44e2167a77b9a442bafe"><div class="ttname"><a href="classdmlc_1_1ostream.html#aafe415657c7e44e2167a77b9a442bafe">dmlc::ostream::ostream</a></div><div class="ttdeci">ostream(Stream *stream, size_t buffer_size=(1&lt;&lt; 10))</div><div class="ttdoc">construct std::ostream type</div><div class="ttdef"><b>Definition:</b> io.h:325</div></div>
<div class="ttc" id="aclassdmlc_1_1SeekStream_html"><div class="ttname"><a href="classdmlc_1_1SeekStream.html">dmlc::SeekStream</a></div><div class="ttdoc">interface of i/o stream that support seek</div><div class="ttdef"><b>Definition:</b> io.h:109</div></div>
<div class="ttc" id="astructdmlc_1_1io_1_1URI_html_a78b53e079a958bac413f49601670aa3b"><div class="ttname"><a href="structdmlc_1_1io_1_1URI.html#a78b53e079a958bac413f49601670aa3b">dmlc::io::URI::protocol</a></div><div class="ttdeci">std::string protocol</div><div class="ttdoc">protocol</div><div class="ttdef"><b>Definition:</b> io.h:527</div></div>
<div class="ttc" id="astructdmlc_1_1io_1_1URI_html"><div class="ttname"><a href="structdmlc_1_1io_1_1URI.html">dmlc::io::URI</a></div><div class="ttdoc">common data structure for URI</div><div class="ttdef"><b>Definition:</b> io.h:525</div></div>
<div class="ttc" id="aserializer_8h_html"><div class="ttname"><a href="serializer_8h.html">serializer.h</a></div><div class="ttdoc">serializer template class that helps serialization. This file do not need to be directly used by most...</div></div>
<div class="ttc" id="astructdmlc_1_1io_1_1URI_html_a210e9bff4da5dac23a113da6526396f4"><div class="ttname"><a href="structdmlc_1_1io_1_1URI.html#a210e9bff4da5dac23a113da6526396f4">dmlc::io::URI::host</a></div><div class="ttdeci">std::string host</div><div class="ttdoc">host name, namenode for HDFS, bucket name for s3</div><div class="ttdef"><b>Definition:</b> io.h:531</div></div>
<div class="ttc" id="aclassdmlc_1_1Serializable_html_a751aaf917c52a7649132e94442fca2d8"><div class="ttname"><a href="classdmlc_1_1Serializable.html#a751aaf917c52a7649132e94442fca2d8">dmlc::Serializable::Save</a></div><div class="ttdeci">virtual void Save(Stream *fo) const =0</div><div class="ttdoc">saves the model to a stream</div></div>
<div class="ttc" id="aclassdmlc_1_1io_1_1FileSystem_html_a507723430906d48bf311190ffebcd79b"><div class="ttname"><a href="classdmlc_1_1io_1_1FileSystem.html#a507723430906d48bf311190ffebcd79b">dmlc::io::FileSystem::Open</a></div><div class="ttdeci">virtual Stream * Open(const URI &amp;path, const char *const flag, bool allow_null=false)=0</div><div class="ttdoc">open a stream</div></div>
<div class="ttc" id="aclassdmlc_1_1io_1_1FileSystem_html_ac028b881891578c7e2ba50c0a738ba50"><div class="ttname"><a href="classdmlc_1_1io_1_1FileSystem.html#ac028b881891578c7e2ba50c0a738ba50">dmlc::io::FileSystem::ListDirectoryRecursive</a></div><div class="ttdeci">virtual void ListDirectoryRecursive(const URI &amp;path, std::vector&lt; FileInfo &gt; *out_list)</div><div class="ttdoc">list files in a directory recursively using ListDirectory</div></div>
<div class="ttc" id="aclassdmlc_1_1ostream_html_adda195431c39a9afddea3151758e3c05"><div class="ttname"><a href="classdmlc_1_1ostream.html#adda195431c39a9afddea3151758e3c05">dmlc::ostream::bytes_written</a></div><div class="ttdeci">size_t bytes_written(void) const</div><div class="ttdef"><b>Definition:</b> io.h:344</div></div>
<div class="ttc" id="aclassdmlc_1_1io_1_1FileSystem_html_a00b2d929bc6b5899d54165c8af219814"><div class="ttname"><a href="classdmlc_1_1io_1_1FileSystem.html#a00b2d929bc6b5899d54165c8af219814">dmlc::io::FileSystem::~FileSystem</a></div><div class="ttdeci">virtual ~FileSystem()</div><div class="ttdoc">virtual destructor</div><div class="ttdef"><b>Definition:</b> io.h:593</div></div>
<div class="ttc" id="aclassdmlc_1_1ostream_html_a7cd937753b09a5ea66fb5ab20aa0a315"><div class="ttname"><a href="classdmlc_1_1ostream.html#a7cd937753b09a5ea66fb5ab20aa0a315">dmlc::ostream::set_stream</a></div><div class="ttdeci">void set_stream(Stream *stream)</div><div class="ttdoc">set internal stream to be stream, reset states</div><div class="ttdef"><b>Definition:</b> io.h:338</div></div>
<div class="ttc" id="aclassdmlc_1_1Stream_html_a747da13b990ff68dc9bf9ea5224ad174"><div class="ttname"><a href="classdmlc_1_1Stream.html#a747da13b990ff68dc9bf9ea5224ad174">dmlc::Stream::Read</a></div><div class="ttdeci">virtual size_t Read(void *ptr, size_t size)=0</div><div class="ttdoc">reads data from a stream</div></div>
<div class="ttc" id="aclassdmlc_1_1istream_html"><div class="ttname"><a href="classdmlc_1_1istream.html">dmlc::istream</a></div><div class="ttdoc">a std::istream class that can can wrap Stream objects, can use istream with that output to underlying...</div><div class="ttdef"><b>Definition:</b> io.h:389</div></div>
<div class="ttc" id="aclassdmlc_1_1InputSplit_html_a58c7f48bec6bd1a880e59c4bbfdf4417"><div class="ttname"><a href="classdmlc_1_1InputSplit.html#a58c7f48bec6bd1a880e59c4bbfdf4417">dmlc::InputSplit::HintChunkSize</a></div><div class="ttdeci">virtual void HintChunkSize(size_t chunk_size)</div><div class="ttdoc">hint the inputsplit how large the chunk size it should return when implementing NextChunk this is a h...</div><div class="ttdef"><b>Definition:</b> io.h:172</div></div>
<div class="ttc" id="astructdmlc_1_1io_1_1FileInfo_html"><div class="ttname"><a href="structdmlc_1_1io_1_1FileInfo.html">dmlc::io::FileInfo</a></div><div class="ttdoc">use to store file information</div><div class="ttdef"><b>Definition:</b> io.h:570</div></div>
<div class="ttc" id="astructdmlc_1_1serializer_1_1Handler_html_a57ace2d259a78520ebdc38b9fb588420"><div class="ttname"><a href="structdmlc_1_1serializer_1_1Handler.html#a57ace2d259a78520ebdc38b9fb588420">dmlc::serializer::Handler::Write</a></div><div class="ttdeci">static void Write(Stream *strm, const T &amp;data)</div><div class="ttdoc">write data to stream</div><div class="ttdef"><b>Definition:</b> serializer.h:265</div></div>
<div class="ttc" id="aclassdmlc_1_1SeekStream_html_a02cd26339ea4b0c8b9ee8ff615d223a8"><div class="ttname"><a href="classdmlc_1_1SeekStream.html#a02cd26339ea4b0c8b9ee8ff615d223a8">dmlc::SeekStream::CreateForRead</a></div><div class="ttdeci">static SeekStream * CreateForRead(const char *uri, bool allow_null=false)</div><div class="ttdoc">generic factory function create an SeekStream for read only, the stream will close the underlying fil...</div></div>
<div class="ttc" id="anamespacedmlc_1_1io_html_a295a71dbabfdbef0786bae24873a7b51"><div class="ttname"><a href="namespacedmlc_1_1io.html#a295a71dbabfdbef0786bae24873a7b51">dmlc::io::FileType</a></div><div class="ttdeci">FileType</div><div class="ttdoc">type of file</div><div class="ttdef"><b>Definition:</b> io.h:562</div></div>
<div class="ttc" id="anamespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div><div class="ttdef"><b>Definition:</b> optional.h:251</div></div>
<div class="ttc" id="aclassdmlc_1_1Stream_html_a4b1cb597f6f53d10b2e72b49bd695a20"><div class="ttname"><a href="classdmlc_1_1Stream.html#a4b1cb597f6f53d10b2e72b49bd695a20">dmlc::Stream::~Stream</a></div><div class="ttdeci">virtual ~Stream(void)</div><div class="ttdoc">virtual destructor</div><div class="ttdef"><b>Definition:</b> io.h:46</div></div>
<div class="ttc" id="aclassdmlc_1_1istream_html_abfb8b1af4df69cfb24836d837bd3e316"><div class="ttname"><a href="classdmlc_1_1istream.html#abfb8b1af4df69cfb24836d837bd3e316">dmlc::istream::~istream</a></div><div class="ttdeci">virtual ~istream() DMLC_NO_EXCEPTION</div><div class="ttdef"><b>Definition:</b> io.h:401</div></div>
<div class="ttc" id="aclassdmlc_1_1Serializable_html"><div class="ttname"><a href="classdmlc_1_1Serializable.html">dmlc::Serializable</a></div><div class="ttdoc">interface for serializable objects</div><div class="ttdef"><b>Definition:</b> io.h:132</div></div>
<div class="ttc" id="astructdmlc_1_1InputSplit_1_1Blob_html_a8d9f03549a0367784a175e2d67d94be9"><div class="ttname"><a href="structdmlc_1_1InputSplit_1_1Blob.html#a8d9f03549a0367784a175e2d67d94be9">dmlc::InputSplit::Blob::size</a></div><div class="ttdeci">size_t size</div><div class="ttdoc">size of the memory region</div><div class="ttdef"><b>Definition:</b> io.h:162</div></div>
<div class="ttc" id="anamespacedmlc_1_1io_html_a295a71dbabfdbef0786bae24873a7b51add06b95c0792e7674e860b2a2116097e"><div class="ttname"><a href="namespacedmlc_1_1io.html#a295a71dbabfdbef0786bae24873a7b51add06b95c0792e7674e860b2a2116097e">dmlc::io::kFile</a></div><div class="ttdeci">@ kFile</div><div class="ttdoc">the file is file</div><div class="ttdef"><b>Definition:</b> io.h:564</div></div>
<div class="ttc" id="astructdmlc_1_1io_1_1URI_html_a6aefa55a0899302d926972f5cb47e8c3"><div class="ttname"><a href="structdmlc_1_1io_1_1URI.html#a6aefa55a0899302d926972f5cb47e8c3">dmlc::io::URI::str</a></div><div class="ttdeci">std::string str(void) const</div><div class="ttdoc">string representation</div><div class="ttdef"><b>Definition:</b> io.h:556</div></div>
<div class="ttc" id="aclassdmlc_1_1Stream_html_a3e9f1aae4606bb2dff4e1be8ff5ec079"><div class="ttname"><a href="classdmlc_1_1Stream.html#a3e9f1aae4606bb2dff4e1be8ff5ec079">dmlc::Stream::WriteArray</a></div><div class="ttdeci">void WriteArray(const T *data, size_t num_elems)</div><div class="ttdoc">Endian aware write array of data.</div><div class="ttdef"><b>Definition:</b> io.h:460</div></div>
<div class="ttc" id="a3rdparty_2dmlc-core_2include_2dmlc_2base_8h_html_a80bde16113dc79e7adb7953e006d6b60"><div class="ttname"><a href="3rdparty_2dmlc-core_2include_2dmlc_2base_8h.html#a80bde16113dc79e7adb7953e006d6b60">DMLC_THROW_EXCEPTION</a></div><div class="ttdeci">#define DMLC_THROW_EXCEPTION</div><div class="ttdef"><b>Definition:</b> base.h:233</div></div>
<div class="ttc" id="aclassdmlc_1_1io_1_1FileSystem_html"><div class="ttname"><a href="classdmlc_1_1io_1_1FileSystem.html">dmlc::io::FileSystem</a></div><div class="ttdoc">file system system interface</div><div class="ttdef"><b>Definition:</b> io.h:582</div></div>
<div class="ttc" id="aclassdmlc_1_1InputSplit_html_a938da99f6cbaf1a4667bb00c75692e4b"><div class="ttname"><a href="classdmlc_1_1InputSplit.html#a938da99f6cbaf1a4667bb00c75692e4b">dmlc::InputSplit::NextBatch</a></div><div class="ttdeci">virtual bool NextBatch(Blob *out_chunk, size_t n_records)</div><div class="ttdoc">get a chunk of memory that can contain multiple records, with hint for how many records is needed,...</div><div class="ttdef"><b>Definition:</b> io.h:230</div></div>
<div class="ttc" id="aclassdmlc_1_1Stream_html"><div class="ttname"><a href="classdmlc_1_1Stream.html">dmlc::Stream</a></div><div class="ttdoc">interface of stream I/O for serialization</div><div class="ttdef"><b>Definition:</b> io.h:30</div></div>
<div class="ttc" id="aclassdmlc_1_1Stream_html_a243906329f0cea487b35841c9880c028"><div class="ttname"><a href="classdmlc_1_1Stream.html#a243906329f0cea487b35841c9880c028">dmlc::Stream::Create</a></div><div class="ttdeci">static Stream * Create(const char *uri, const char *const flag, bool allow_null=false)</div><div class="ttdoc">generic factory function create an stream, the stream will close the underlying files upon deletion</div></div>
<div class="ttc" id="aclassdmlc_1_1istream_html_a595429218782be17f99857b363465a16"><div class="ttname"><a href="classdmlc_1_1istream.html#a595429218782be17f99857b363465a16">dmlc::istream::set_stream</a></div><div class="ttdeci">void set_stream(Stream *stream)</div><div class="ttdoc">set internal stream to be stream, reset states</div><div class="ttdef"><b>Definition:</b> io.h:406</div></div>
<div class="ttc" id="aclassdmlc_1_1io_1_1FileSystem_html_a62577b6d6daa6e34656c5bd76b6cea60"><div class="ttname"><a href="classdmlc_1_1io_1_1FileSystem.html#a62577b6d6daa6e34656c5bd76b6cea60">dmlc::io::FileSystem::GetPathInfo</a></div><div class="ttdeci">virtual FileInfo GetPathInfo(const URI &amp;path)=0</div><div class="ttdoc">get information about a path</div></div>
<div class="ttc" id="aclassdmlc_1_1SeekStream_html_a2c3e3dd37a3d3854a2acfe2845ca6c12"><div class="ttname"><a href="classdmlc_1_1SeekStream.html#a2c3e3dd37a3d3854a2acfe2845ca6c12">dmlc::SeekStream::Seek</a></div><div class="ttdeci">virtual void Seek(size_t pos)=0</div><div class="ttdoc">seek to certain position of the file</div></div>
<div class="ttc" id="aclassdmlc_1_1InputSplit_html"><div class="ttname"><a href="classdmlc_1_1InputSplit.html">dmlc::InputSplit</a></div><div class="ttdoc">input split creates that allows reading of records from split of data, independent part that covers a...</div><div class="ttdef"><b>Definition:</b> io.h:155</div></div>
<div class="ttc" id="astructdmlc_1_1serializer_1_1Handler_html_a9568ef43a657578f7b4017e6b33f3e6c"><div class="ttname"><a href="structdmlc_1_1serializer_1_1Handler.html#a9568ef43a657578f7b4017e6b33f3e6c">dmlc::serializer::Handler::Read</a></div><div class="ttdeci">static bool Read(Stream *strm, T *data)</div><div class="ttdoc">read data to stream</div><div class="ttdef"><b>Definition:</b> serializer.h:283</div></div>
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 5 2023 03:47:39 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>