blob: 921afa794e11abdb302fc418f5f2cab6cb6f899e [file]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Avro C++: api/Stream.hh 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">Avro C++
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_0188a3e6da905bc60aceb35bf790b8c9.html">api</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Stream.hh</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * https://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#ifndef avro_Stream_hh__</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#define avro_Stream_hh__</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;boost/utility.hpp&quot;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &quot;Config.hh&quot;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;Exception.hh&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceavro.html">avro</a> {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classavro_1_1InputStream.html"> 36</a></span>&#160;<span class="keyword">class </span>AVRO_DECL <a class="code" href="classavro_1_1InputStream.html">InputStream</a> : boost::noncopyable {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classavro_1_1InputStream.html#a252c2091ab50e6060e33ccbc7878bc6c"> 42</a></span>&#160; <a class="code" href="classavro_1_1InputStream.html#a252c2091ab50e6060e33ccbc7878bc6c">InputStream</a>() { }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classavro_1_1InputStream.html#a1536aeefa0571f9fd80181503b6f501e"> 48</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classavro_1_1InputStream.html#a1536aeefa0571f9fd80181503b6f501e">~InputStream</a>() { }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> next(<span class="keyword">const</span> uint8_t** data, <span class="keywordtype">size_t</span>* len) = 0;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> backup(<span class="keywordtype">size_t</span> len) = 0;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> skip(<span class="keywordtype">size_t</span> len) = 0;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> byteCount() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;};</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="keyword">typedef</span> std::unique_ptr&lt;InputStream&gt; InputStreamPtr;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classavro_1_1SeekableInputStream.html"> 83</a></span>&#160;<span class="keyword">class </span>AVRO_DECL <a class="code" href="classavro_1_1SeekableInputStream.html">SeekableInputStream</a> : <span class="keyword">public</span> <a class="code" href="classavro_1_1InputStream.html">InputStream</a> {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classavro_1_1SeekableInputStream.html#a52fe8b3d7074457b098dbdcfe6835557"> 89</a></span>&#160; <a class="code" href="classavro_1_1SeekableInputStream.html#a52fe8b3d7074457b098dbdcfe6835557">SeekableInputStream</a>() { }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classavro_1_1SeekableInputStream.html#a0f24f251960fc35d9b82401b0d07e5f0"> 95</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classavro_1_1SeekableInputStream.html#a0f24f251960fc35d9b82401b0d07e5f0">~SeekableInputStream</a>() { }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> seek(int64_t position) = 0;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;};</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="keyword">typedef</span> std::unique_ptr&lt;SeekableInputStream&gt; SeekableInputStreamPtr;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classavro_1_1OutputStream.html"> 110</a></span>&#160;<span class="keyword">class </span>AVRO_DECL <a class="code" href="classavro_1_1OutputStream.html">OutputStream</a> : boost::noncopyable {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classavro_1_1OutputStream.html#af22df848c85168c0f43100b5b1016a27"> 116</a></span>&#160; <a class="code" href="classavro_1_1OutputStream.html#af22df848c85168c0f43100b5b1016a27">OutputStream</a>() { }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classavro_1_1OutputStream.html#a77073ae356848aef1232f38e0068ce58"> 122</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classavro_1_1OutputStream.html#a77073ae356848aef1232f38e0068ce58">~OutputStream</a>() { }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> next(uint8_t** data, <span class="keywordtype">size_t</span>* len) = 0;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> backup(<span class="keywordtype">size_t</span> len) = 0;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keyword">virtual</span> uint64_t byteCount() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> flush() = 0;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;};</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="keyword">typedef</span> std::unique_ptr&lt;OutputStream&gt; OutputStreamPtr;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;AVRO_DECL OutputStreamPtr <a class="code" href="namespaceavro.html#a0e961740e43d3f800220f03de11654e8">memoryOutputStream</a>(<span class="keywordtype">size_t</span> chunkSize = 4 * 1024);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;AVRO_DECL InputStreamPtr <a class="code" href="namespaceavro.html#a98b7a8baaef11e477db89699ab27359b">memoryInputStream</a>(<span class="keyword">const</span> uint8_t* data, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;AVRO_DECL InputStreamPtr <a class="code" href="namespaceavro.html#a98b7a8baaef11e477db89699ab27359b">memoryInputStream</a>(<span class="keyword">const</span> <a class="code" href="classavro_1_1OutputStream.html">OutputStream</a>&amp; source);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;AVRO_DECL std::shared_ptr&lt;std::vector&lt;uint8_t&gt; &gt; <a class="code" href="namespaceavro.html#a1d938bbd6332e4c247e5a975ca066647">snapshot</a>(<span class="keyword">const</span> <a class="code" href="classavro_1_1OutputStream.html">OutputStream</a>&amp; source);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;AVRO_DECL OutputStreamPtr <a class="code" href="namespaceavro.html#a164e34d709ba33d2464c295e7874f784">fileOutputStream</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* filename,</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordtype">size_t</span> bufferSize = 8 * 1024);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;AVRO_DECL InputStreamPtr <a class="code" href="namespaceavro.html#a1e5251d2ad9581e353399c1bac90c9fb">fileInputStream</a>(</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *filename, <span class="keywordtype">size_t</span> bufferSize = 8 * 1024);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;AVRO_DECL SeekableInputStreamPtr fileSeekableInputStream(</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *filename, <span class="keywordtype">size_t</span> bufferSize = 8 * 1024);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;AVRO_DECL OutputStreamPtr <a class="code" href="namespaceavro.html#acb2ea7a6b8a82014ce7d76abcc171812">ostreamOutputStream</a>(std::ostream&amp; os,</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordtype">size_t</span> bufferSize = 8 * 1024);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;AVRO_DECL InputStreamPtr <a class="code" href="namespaceavro.html#aff15582cf7ee211e1b2e0968a0edbd7e">istreamInputStream</a>(</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; std::istream &amp;in, <span class="keywordtype">size_t</span> bufferSize = 8 * 1024);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;AVRO_DECL InputStreamPtr <a class="code" href="namespaceavro.html#a9033beeae2950b3e73d99482d3936929">nonSeekableIstreamInputStream</a>(</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; std::istream&amp; is, <span class="keywordtype">size_t</span> bufferSize = 8 * 1024);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html"> 231</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structavro_1_1StreamReader.html">StreamReader</a> {</div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html#ac496ab63c9b3d68c60e8e5697cdd3008"> 235</a></span>&#160; <a class="code" href="classavro_1_1InputStream.html">InputStream</a>* <a class="code" href="structavro_1_1StreamReader.html#ac496ab63c9b3d68c60e8e5697cdd3008">in_</a>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html#ac404aa90132b520e7c45cec577d18d94"> 240</a></span>&#160; <span class="keyword">const</span> uint8_t* <a class="code" href="structavro_1_1StreamReader.html#ac404aa90132b520e7c45cec577d18d94">next_</a>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html#a463de69a6b09caa9cb8467b75ecfd710"> 245</a></span>&#160; <span class="keyword">const</span> uint8_t* <a class="code" href="structavro_1_1StreamReader.html#a463de69a6b09caa9cb8467b75ecfd710">end_</a>;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html#a1f69076d05b5711cf0695d1a91193737"> 250</a></span>&#160; <a class="code" href="structavro_1_1StreamReader.html#a1f69076d05b5711cf0695d1a91193737">StreamReader</a>() : in_(0), next_(0), end_(0) { }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html#ad364f5ec1191462b88d75fdc29ddd639"> 255</a></span>&#160; <a class="code" href="structavro_1_1StreamReader.html#ad364f5ec1191462b88d75fdc29ddd639">StreamReader</a>(<a class="code" href="classavro_1_1InputStream.html">InputStream</a>&amp; in) : in_(0), next_(0), end_(0) { reset(in); }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html#a293c20163efcc2d0380fab80f3c82058"> 261</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="structavro_1_1StreamReader.html#a293c20163efcc2d0380fab80f3c82058">reset</a>(<a class="code" href="classavro_1_1InputStream.html">InputStream</a>&amp; is) {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (in_ != 0 &amp;&amp; end_ != next_) {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; in_-&gt;<a class="code" href="classavro_1_1InputStream.html#a03f9cfac5f7a0141bfe7d6cc4bc7a0d0">backup</a>(end_ - next_);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; in_ = &amp;is;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; next_ = end_ = 0;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html#ace1b429f51df3702a33d2991031ac2f8"> 273</a></span>&#160; uint8_t <a class="code" href="structavro_1_1StreamReader.html#ace1b429f51df3702a33d2991031ac2f8">read</a>() {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">if</span> (next_ == end_) {</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; more();</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">return</span> *next_++;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html#ae2f45670ed6815c76103245665f0ee25"> 284</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="structavro_1_1StreamReader.html#ae2f45670ed6815c76103245665f0ee25">readBytes</a>(uint8_t* b, <span class="keywordtype">size_t</span> n) {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">while</span> (n &gt; 0) {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">if</span> (next_ == end_) {</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; more();</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordtype">size_t</span> q = end_ - next_;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">if</span> (q &gt; n) {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; q = n;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; ::memcpy(b, next_, q);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; next_ += q;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; b += q;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; n -= q;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html#a25be160ee9e5fd541c0004066376c4ac"> 304</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="structavro_1_1StreamReader.html#a25be160ee9e5fd541c0004066376c4ac">skipBytes</a>(<span class="keywordtype">size_t</span> n) {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">if</span> (n &gt; static_cast&lt;size_t&gt;(end_ - next_)) {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; n -= end_ - next_;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; next_ = end_;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; in_-&gt;<a class="code" href="classavro_1_1InputStream.html#a4ec852f779fc68dea8fef197ec3eef1d">skip</a>(n);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; next_ += n;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html#af255c4f8690be489a0b623328e1cee76"> 320</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structavro_1_1StreamReader.html#af255c4f8690be489a0b623328e1cee76">fill</a>() {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordtype">size_t</span> n = 0;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">while</span> (in_-&gt;<a class="code" href="classavro_1_1InputStream.html#a87767c15b0661981d24f7a42bfcef6b5">next</a>(&amp;next_, &amp;n)) {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (n != 0) {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; end_ = next_ + n;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</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;</div><div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html#a9501052d3dbbf54070f565bc0f0d644a"> 334</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="structavro_1_1StreamReader.html#a9501052d3dbbf54070f565bc0f0d644a">more</a>() {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">if</span> (! fill()) {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classavro_1_1Exception.html">Exception</a>(<span class="stringliteral">&quot;EOF reached&quot;</span>);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html#ad87f4fb3d42428965766169da50a7487"> 343</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structavro_1_1StreamReader.html#ad87f4fb3d42428965766169da50a7487">hasMore</a>() {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span> (next_ == end_) ? fill() : <span class="keyword">true</span>;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"><a class="line" href="structavro_1_1StreamReader.html#a8c31fc602f068368d7a0e91eea71c4de"> 351</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="structavro_1_1StreamReader.html#a8c31fc602f068368d7a0e91eea71c4de">drain</a>(<span class="keywordtype">bool</span> unRead) {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">if</span> (unRead) {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; --next_;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; in_-&gt;<a class="code" href="classavro_1_1InputStream.html#a03f9cfac5f7a0141bfe7d6cc4bc7a0d0">backup</a>(end_ - next_);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; end_ = next_;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; }</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;</div><div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="structavro_1_1StreamWriter.html"> 363</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structavro_1_1StreamWriter.html">StreamWriter</a> {</div><div class="line"><a name="l00367"></a><span class="lineno"><a class="line" href="structavro_1_1StreamWriter.html#a18f69b15f00ea780ee61f50c9467e0a7"> 367</a></span>&#160; <a class="code" href="classavro_1_1OutputStream.html">OutputStream</a>* <a class="code" href="structavro_1_1StreamWriter.html#a18f69b15f00ea780ee61f50c9467e0a7">out_</a>;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="structavro_1_1StreamWriter.html#a8c0e8d18a3dd81d77dbefe7cf5783986"> 372</a></span>&#160; uint8_t* <a class="code" href="structavro_1_1StreamWriter.html#a8c0e8d18a3dd81d77dbefe7cf5783986">next_</a>;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="structavro_1_1StreamWriter.html#a4f7275c5b1eb184a154760c1cbb192a5"> 377</a></span>&#160; uint8_t* <a class="code" href="structavro_1_1StreamWriter.html#a4f7275c5b1eb184a154760c1cbb192a5">end_</a>;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;</div><div class="line"><a name="l00382"></a><span class="lineno"><a class="line" href="structavro_1_1StreamWriter.html#a5e20cd787a15c2941c90b6d077c73d14"> 382</a></span>&#160; <a class="code" href="structavro_1_1StreamWriter.html#a5e20cd787a15c2941c90b6d077c73d14">StreamWriter</a>() : out_(0), next_(0), end_(0) { }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="structavro_1_1StreamWriter.html#a9e1685a3f609d96f8da8678ee8036350"> 387</a></span>&#160; <a class="code" href="structavro_1_1StreamWriter.html#a9e1685a3f609d96f8da8678ee8036350">StreamWriter</a>(<a class="code" href="classavro_1_1OutputStream.html">OutputStream</a>&amp; out) : out_(0), next_(0), end_(0) { reset(out); }</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"><a class="line" href="structavro_1_1StreamWriter.html#af3aaff674b77d7f98de86597da26b1f3"> 393</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="structavro_1_1StreamWriter.html#af3aaff674b77d7f98de86597da26b1f3">reset</a>(<a class="code" href="classavro_1_1OutputStream.html">OutputStream</a>&amp; os) {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">if</span> (out_ != 0 &amp;&amp; end_ != next_) {</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; out_-&gt;<a class="code" href="classavro_1_1OutputStream.html#a81881efd901311b1fc6610f77791adfe">backup</a>(end_ - next_);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; out_ = &amp;os;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; next_ = end_;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;</div><div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="structavro_1_1StreamWriter.html#a8edff3e28052978180a42b2f792eb28d"> 404</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="structavro_1_1StreamWriter.html#a8edff3e28052978180a42b2f792eb28d">write</a>(uint8_t c) {</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">if</span> (next_ == end_) {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; more();</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; *next_++ = c;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;</div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="structavro_1_1StreamWriter.html#a803e4adca5c39eeeb2fb179cdd26123a"> 414</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="structavro_1_1StreamWriter.html#a803e4adca5c39eeeb2fb179cdd26123a">writeBytes</a>(<span class="keyword">const</span> uint8_t* b, <span class="keywordtype">size_t</span> n) {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">while</span> (n &gt; 0) {</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">if</span> (next_ == end_) {</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; more();</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; }</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordtype">size_t</span> q = end_ - next_;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">if</span> (q &gt; n) {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; q = n;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; }</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; ::memcpy(next_, b, q);</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; next_ += q;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; b += q;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; n -= q;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;</div><div class="line"><a name="l00434"></a><span class="lineno"><a class="line" href="structavro_1_1StreamWriter.html#a8163904c80aca61a9a1c35d9b1b4604d"> 434</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="structavro_1_1StreamWriter.html#a8163904c80aca61a9a1c35d9b1b4604d">flush</a>() {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">if</span> (next_ != end_) {</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; out_-&gt;<a class="code" href="classavro_1_1OutputStream.html#a81881efd901311b1fc6610f77791adfe">backup</a>(end_ - next_);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; next_ = end_;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; out_-&gt;<a class="code" href="classavro_1_1OutputStream.html#a4eba4b0bca41a7174460e2672782273d">flush</a>();</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="structavro_1_1StreamWriter.html#a2fbdd9e896bdfb7f704b52243b4f1661"> 446</a></span>&#160; int64_t <a class="code" href="structavro_1_1StreamWriter.html#a2fbdd9e896bdfb7f704b52243b4f1661">byteCount</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">return</span> out_-&gt;<a class="code" href="classavro_1_1OutputStream.html#ab799b7bad4c75b5ade65fa6fd117a4b4">byteCount</a>();</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;</div><div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="structavro_1_1StreamWriter.html#a93740c70becb0f206a05c5dd1f2a7880"> 453</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="structavro_1_1StreamWriter.html#a93740c70becb0f206a05c5dd1f2a7880">more</a>() {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordtype">size_t</span> n = 0;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">while</span> (out_-&gt;<a class="code" href="classavro_1_1OutputStream.html#a257177c7b0f2e98c523cb2ae68737e18">next</a>(&amp;next_, &amp;n)) {</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">if</span> (n != 0) {</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; end_ = next_ + n;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; }</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classavro_1_1Exception.html">Exception</a>(<span class="stringliteral">&quot;EOF reached&quot;</span>);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</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="l00469"></a><span class="lineno"><a class="line" href="namespaceavro.html#adeab3d9f5f2a4a4f96d3ffb8ba27e523"> 469</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespaceavro.html#adeab3d9f5f2a4a4f96d3ffb8ba27e523">copy</a>(<a class="code" href="classavro_1_1InputStream.html">InputStream</a>&amp; in, <a class="code" href="classavro_1_1OutputStream.html">OutputStream</a>&amp; out)</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="keyword">const</span> uint8_t *p = 0;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordtype">size_t</span> n = 0;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="code" href="structavro_1_1StreamWriter.html">StreamWriter</a> w(out);</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">while</span> (in.<a class="code" href="classavro_1_1InputStream.html#a87767c15b0661981d24f7a42bfcef6b5">next</a>(&amp;p, &amp;n)) {</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; w.<a class="code" href="structavro_1_1StreamWriter.html#a803e4adca5c39eeeb2fb179cdd26123a">writeBytes</a>(p, n);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; }</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; w.<a class="code" href="structavro_1_1StreamWriter.html#a8163904c80aca61a9a1c35d9b1b4604d">flush</a>();</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;}</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;} <span class="comment">// namespace avro</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;</div><div class="ttc" id="namespaceavro_html_adeab3d9f5f2a4a4f96d3ffb8ba27e523"><div class="ttname"><a href="namespaceavro.html#adeab3d9f5f2a4a4f96d3ffb8ba27e523">avro::copy</a></div><div class="ttdeci">void copy(InputStream &amp;in, OutputStream &amp;out)</div><div class="ttdoc">A convenience function to copy all the contents of an input stream into an output stream...</div><div class="ttdef"><b>Definition:</b> Stream.hh:469</div></div>
<div class="ttc" id="structavro_1_1StreamWriter_html_a9e1685a3f609d96f8da8678ee8036350"><div class="ttname"><a href="structavro_1_1StreamWriter.html#a9e1685a3f609d96f8da8678ee8036350">avro::StreamWriter::StreamWriter</a></div><div class="ttdeci">StreamWriter(OutputStream &amp;out)</div><div class="ttdoc">Constructs a new writer with the given underlying stream. </div><div class="ttdef"><b>Definition:</b> Stream.hh:387</div></div>
<div class="ttc" id="classavro_1_1InputStream_html_a03f9cfac5f7a0141bfe7d6cc4bc7a0d0"><div class="ttname"><a href="classavro_1_1InputStream.html#a03f9cfac5f7a0141bfe7d6cc4bc7a0d0">avro::InputStream::backup</a></div><div class="ttdeci">virtual void backup(size_t len)=0</div><div class="ttdoc">&quot;Returns&quot; back some of the data to the stream. </div></div>
<div class="ttc" id="namespaceavro_html_a0e961740e43d3f800220f03de11654e8"><div class="ttname"><a href="namespaceavro.html#a0e961740e43d3f800220f03de11654e8">avro::memoryOutputStream</a></div><div class="ttdeci">AVRO_DECL OutputStreamPtr memoryOutputStream(size_t chunkSize=4 *1024)</div><div class="ttdoc">Returns a new OutputStream, which grows in memory chunks of specified size. </div></div>
<div class="ttc" id="structavro_1_1StreamReader_html_ac404aa90132b520e7c45cec577d18d94"><div class="ttname"><a href="structavro_1_1StreamReader.html#ac404aa90132b520e7c45cec577d18d94">avro::StreamReader::next_</a></div><div class="ttdeci">const uint8_t * next_</div><div class="ttdoc">The next location to read from. </div><div class="ttdef"><b>Definition:</b> Stream.hh:240</div></div>
<div class="ttc" id="structavro_1_1StreamWriter_html_a2fbdd9e896bdfb7f704b52243b4f1661"><div class="ttname"><a href="structavro_1_1StreamWriter.html#a2fbdd9e896bdfb7f704b52243b4f1661">avro::StreamWriter::byteCount</a></div><div class="ttdeci">int64_t byteCount() const</div><div class="ttdoc">Return the number of bytes written so far. </div><div class="ttdef"><b>Definition:</b> Stream.hh:446</div></div>
<div class="ttc" id="structavro_1_1StreamWriter_html_a8163904c80aca61a9a1c35d9b1b4604d"><div class="ttname"><a href="structavro_1_1StreamWriter.html#a8163904c80aca61a9a1c35d9b1b4604d">avro::StreamWriter::flush</a></div><div class="ttdeci">void flush()</div><div class="ttdoc">backs up upto the currently written data and flushes the underlying stream. </div><div class="ttdef"><b>Definition:</b> Stream.hh:434</div></div>
<div class="ttc" id="structavro_1_1StreamReader_html_ad364f5ec1191462b88d75fdc29ddd639"><div class="ttname"><a href="structavro_1_1StreamReader.html#ad364f5ec1191462b88d75fdc29ddd639">avro::StreamReader::StreamReader</a></div><div class="ttdeci">StreamReader(InputStream &amp;in)</div><div class="ttdoc">Constructs a reader with the given underlying stream. </div><div class="ttdef"><b>Definition:</b> Stream.hh:255</div></div>
<div class="ttc" id="structavro_1_1StreamWriter_html_a4f7275c5b1eb184a154760c1cbb192a5"><div class="ttname"><a href="structavro_1_1StreamWriter.html#a4f7275c5b1eb184a154760c1cbb192a5">avro::StreamWriter::end_</a></div><div class="ttdeci">uint8_t * end_</div><div class="ttdoc">One past the last location one can write to. </div><div class="ttdef"><b>Definition:</b> Stream.hh:377</div></div>
<div class="ttc" id="structavro_1_1StreamReader_html_a1f69076d05b5711cf0695d1a91193737"><div class="ttname"><a href="structavro_1_1StreamReader.html#a1f69076d05b5711cf0695d1a91193737">avro::StreamReader::StreamReader</a></div><div class="ttdeci">StreamReader()</div><div class="ttdoc">Constructs an empty reader. </div><div class="ttdef"><b>Definition:</b> Stream.hh:250</div></div>
<div class="ttc" id="classavro_1_1InputStream_html_a1536aeefa0571f9fd80181503b6f501e"><div class="ttname"><a href="classavro_1_1InputStream.html#a1536aeefa0571f9fd80181503b6f501e">avro::InputStream::~InputStream</a></div><div class="ttdeci">virtual ~InputStream()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> Stream.hh:48</div></div>
<div class="ttc" id="classavro_1_1OutputStream_html_ab799b7bad4c75b5ade65fa6fd117a4b4"><div class="ttname"><a href="classavro_1_1OutputStream.html#ab799b7bad4c75b5ade65fa6fd117a4b4">avro::OutputStream::byteCount</a></div><div class="ttdeci">virtual uint64_t byteCount() const =0</div><div class="ttdoc">Number of bytes written so far into this stream. </div></div>
<div class="ttc" id="namespaceavro_html"><div class="ttname"><a href="namespaceavro.html">avro</a></div><div class="ttdoc">A bunch of templates and specializations for encoding and decoding specific types. </div><div class="ttdef"><b>Definition:</b> AvroParse.hh:30</div></div>
<div class="ttc" id="structavro_1_1StreamReader_html_a25be160ee9e5fd541c0004066376c4ac"><div class="ttname"><a href="structavro_1_1StreamReader.html#a25be160ee9e5fd541c0004066376c4ac">avro::StreamReader::skipBytes</a></div><div class="ttdeci">void skipBytes(size_t n)</div><div class="ttdoc">Skips the given number of bytes. </div><div class="ttdef"><b>Definition:</b> Stream.hh:304</div></div>
<div class="ttc" id="structavro_1_1StreamWriter_html_a803e4adca5c39eeeb2fb179cdd26123a"><div class="ttname"><a href="structavro_1_1StreamWriter.html#a803e4adca5c39eeeb2fb179cdd26123a">avro::StreamWriter::writeBytes</a></div><div class="ttdeci">void writeBytes(const uint8_t *b, size_t n)</div><div class="ttdoc">Writes the specified number of bytes starting at b. </div><div class="ttdef"><b>Definition:</b> Stream.hh:414</div></div>
<div class="ttc" id="structavro_1_1StreamReader_html_ae2f45670ed6815c76103245665f0ee25"><div class="ttname"><a href="structavro_1_1StreamReader.html#ae2f45670ed6815c76103245665f0ee25">avro::StreamReader::readBytes</a></div><div class="ttdeci">void readBytes(uint8_t *b, size_t n)</div><div class="ttdoc">Reads the given number of bytes from the underlying stream. </div><div class="ttdef"><b>Definition:</b> Stream.hh:284</div></div>
<div class="ttc" id="structavro_1_1StreamReader_html_ad87f4fb3d42428965766169da50a7487"><div class="ttname"><a href="structavro_1_1StreamReader.html#ad87f4fb3d42428965766169da50a7487">avro::StreamReader::hasMore</a></div><div class="ttdeci">bool hasMore()</div><div class="ttdoc">Returns true if and only if the end of stream is not reached. </div><div class="ttdef"><b>Definition:</b> Stream.hh:343</div></div>
<div class="ttc" id="classavro_1_1SeekableInputStream_html_a0f24f251960fc35d9b82401b0d07e5f0"><div class="ttname"><a href="classavro_1_1SeekableInputStream.html#a0f24f251960fc35d9b82401b0d07e5f0">avro::SeekableInputStream::~SeekableInputStream</a></div><div class="ttdeci">virtual ~SeekableInputStream()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> Stream.hh:95</div></div>
<div class="ttc" id="structavro_1_1StreamWriter_html_a93740c70becb0f206a05c5dd1f2a7880"><div class="ttname"><a href="structavro_1_1StreamWriter.html#a93740c70becb0f206a05c5dd1f2a7880">avro::StreamWriter::more</a></div><div class="ttdeci">void more()</div><div class="ttdoc">Gets more space to write to. </div><div class="ttdef"><b>Definition:</b> Stream.hh:453</div></div>
<div class="ttc" id="structavro_1_1StreamReader_html_ac496ab63c9b3d68c60e8e5697cdd3008"><div class="ttname"><a href="structavro_1_1StreamReader.html#ac496ab63c9b3d68c60e8e5697cdd3008">avro::StreamReader::in_</a></div><div class="ttdeci">InputStream * in_</div><div class="ttdoc">The underlying input stream. </div><div class="ttdef"><b>Definition:</b> Stream.hh:235</div></div>
<div class="ttc" id="classavro_1_1SeekableInputStream_html"><div class="ttname"><a href="classavro_1_1SeekableInputStream.html">avro::SeekableInputStream</a></div><div class="ttdoc">An InputStream which also supports seeking to a specific offset. </div><div class="ttdef"><b>Definition:</b> Stream.hh:83</div></div>
<div class="ttc" id="structavro_1_1StreamReader_html_a8c31fc602f068368d7a0e91eea71c4de"><div class="ttname"><a href="structavro_1_1StreamReader.html#a8c31fc602f068368d7a0e91eea71c4de">avro::StreamReader::drain</a></div><div class="ttdeci">void drain(bool unRead)</div><div class="ttdoc">Returns unused bytes back to the underlying stream. </div><div class="ttdef"><b>Definition:</b> Stream.hh:351</div></div>
<div class="ttc" id="structavro_1_1StreamWriter_html_a8edff3e28052978180a42b2f792eb28d"><div class="ttname"><a href="structavro_1_1StreamWriter.html#a8edff3e28052978180a42b2f792eb28d">avro::StreamWriter::write</a></div><div class="ttdeci">void write(uint8_t c)</div><div class="ttdoc">Writes a single byte. </div><div class="ttdef"><b>Definition:</b> Stream.hh:404</div></div>
<div class="ttc" id="structavro_1_1StreamWriter_html_a5e20cd787a15c2941c90b6d077c73d14"><div class="ttname"><a href="structavro_1_1StreamWriter.html#a5e20cd787a15c2941c90b6d077c73d14">avro::StreamWriter::StreamWriter</a></div><div class="ttdeci">StreamWriter()</div><div class="ttdoc">Constructs a writer with no underlying stream. </div><div class="ttdef"><b>Definition:</b> Stream.hh:382</div></div>
<div class="ttc" id="classavro_1_1OutputStream_html_a257177c7b0f2e98c523cb2ae68737e18"><div class="ttname"><a href="classavro_1_1OutputStream.html#a257177c7b0f2e98c523cb2ae68737e18">avro::OutputStream::next</a></div><div class="ttdeci">virtual bool next(uint8_t **data, size_t *len)=0</div><div class="ttdoc">Returns a buffer that can be written into. </div></div>
<div class="ttc" id="structavro_1_1StreamWriter_html_af3aaff674b77d7f98de86597da26b1f3"><div class="ttname"><a href="structavro_1_1StreamWriter.html#af3aaff674b77d7f98de86597da26b1f3">avro::StreamWriter::reset</a></div><div class="ttdeci">void reset(OutputStream &amp;os)</div><div class="ttdoc">Replaces the current underlying stream with a new one. </div><div class="ttdef"><b>Definition:</b> Stream.hh:393</div></div>
<div class="ttc" id="classavro_1_1OutputStream_html_a81881efd901311b1fc6610f77791adfe"><div class="ttname"><a href="classavro_1_1OutputStream.html#a81881efd901311b1fc6610f77791adfe">avro::OutputStream::backup</a></div><div class="ttdeci">virtual void backup(size_t len)=0</div><div class="ttdoc">&quot;Returns&quot; back to the stream some of the buffer obtained from in the last call to next()...</div></div>
<div class="ttc" id="namespaceavro_html_a9033beeae2950b3e73d99482d3936929"><div class="ttname"><a href="namespaceavro.html#a9033beeae2950b3e73d99482d3936929">avro::nonSeekableIstreamInputStream</a></div><div class="ttdeci">AVRO_DECL InputStreamPtr nonSeekableIstreamInputStream(std::istream &amp;is, size_t bufferSize=8 *1024)</div><div class="ttdoc">Returns a new InputStream whose contents come from the given std::istream. </div></div>
<div class="ttc" id="namespaceavro_html_a164e34d709ba33d2464c295e7874f784"><div class="ttname"><a href="namespaceavro.html#a164e34d709ba33d2464c295e7874f784">avro::fileOutputStream</a></div><div class="ttdeci">AVRO_DECL OutputStreamPtr fileOutputStream(const char *filename, size_t bufferSize=8 *1024)</div><div class="ttdoc">Returns a new OutputStream whose contents would be stored in a file. </div></div>
<div class="ttc" id="structavro_1_1StreamReader_html_a463de69a6b09caa9cb8467b75ecfd710"><div class="ttname"><a href="structavro_1_1StreamReader.html#a463de69a6b09caa9cb8467b75ecfd710">avro::StreamReader::end_</a></div><div class="ttdeci">const uint8_t * end_</div><div class="ttdoc">One past the last valid location. </div><div class="ttdef"><b>Definition:</b> Stream.hh:245</div></div>
<div class="ttc" id="structavro_1_1StreamWriter_html_a8c0e8d18a3dd81d77dbefe7cf5783986"><div class="ttname"><a href="structavro_1_1StreamWriter.html#a8c0e8d18a3dd81d77dbefe7cf5783986">avro::StreamWriter::next_</a></div><div class="ttdeci">uint8_t * next_</div><div class="ttdoc">The next location to write to. </div><div class="ttdef"><b>Definition:</b> Stream.hh:372</div></div>
<div class="ttc" id="structavro_1_1StreamReader_html_a293c20163efcc2d0380fab80f3c82058"><div class="ttname"><a href="structavro_1_1StreamReader.html#a293c20163efcc2d0380fab80f3c82058">avro::StreamReader::reset</a></div><div class="ttdeci">void reset(InputStream &amp;is)</div><div class="ttdoc">Replaces the current input stream with the given one after backing up the original one if required...</div><div class="ttdef"><b>Definition:</b> Stream.hh:261</div></div>
<div class="ttc" id="structavro_1_1StreamReader_html"><div class="ttname"><a href="structavro_1_1StreamReader.html">avro::StreamReader</a></div><div class="ttdoc">A convenience class for reading from an InputStream. </div><div class="ttdef"><b>Definition:</b> Stream.hh:231</div></div>
<div class="ttc" id="namespaceavro_html_a1e5251d2ad9581e353399c1bac90c9fb"><div class="ttname"><a href="namespaceavro.html#a1e5251d2ad9581e353399c1bac90c9fb">avro::fileInputStream</a></div><div class="ttdeci">AVRO_DECL InputStreamPtr fileInputStream(const char *filename, size_t bufferSize=8 *1024)</div><div class="ttdoc">Returns a new InputStream whose contents come from the given file. </div></div>
<div class="ttc" id="classavro_1_1SeekableInputStream_html_a52fe8b3d7074457b098dbdcfe6835557"><div class="ttname"><a href="classavro_1_1SeekableInputStream.html#a52fe8b3d7074457b098dbdcfe6835557">avro::SeekableInputStream::SeekableInputStream</a></div><div class="ttdeci">SeekableInputStream()</div><div class="ttdoc">An empty constuctor. </div><div class="ttdef"><b>Definition:</b> Stream.hh:89</div></div>
<div class="ttc" id="classavro_1_1OutputStream_html"><div class="ttname"><a href="classavro_1_1OutputStream.html">avro::OutputStream</a></div><div class="ttdoc">A no-copy output stream. </div><div class="ttdef"><b>Definition:</b> Stream.hh:110</div></div>
<div class="ttc" id="classavro_1_1Exception_html"><div class="ttname"><a href="classavro_1_1Exception.html">avro::Exception</a></div><div class="ttdoc">Wrapper for std::runtime_error that provides convenience constructor for boost::format objects...</div><div class="ttdef"><b>Definition:</b> Exception.hh:31</div></div>
<div class="ttc" id="namespaceavro_html_a1d938bbd6332e4c247e5a975ca066647"><div class="ttname"><a href="namespaceavro.html#a1d938bbd6332e4c247e5a975ca066647">avro::snapshot</a></div><div class="ttdeci">AVRO_DECL std::shared_ptr&lt; std::vector&lt; uint8_t &gt; &gt; snapshot(const OutputStream &amp;source)</div><div class="ttdoc">Returns the contents written so far into the output stream, which should be a memory output stream...</div></div>
<div class="ttc" id="namespaceavro_html_aff15582cf7ee211e1b2e0968a0edbd7e"><div class="ttname"><a href="namespaceavro.html#aff15582cf7ee211e1b2e0968a0edbd7e">avro::istreamInputStream</a></div><div class="ttdeci">AVRO_DECL InputStreamPtr istreamInputStream(std::istream &amp;in, size_t bufferSize=8 *1024)</div><div class="ttdoc">Returns a new InputStream whose contents come from the given std::istream. </div></div>
<div class="ttc" id="structavro_1_1StreamReader_html_af255c4f8690be489a0b623328e1cee76"><div class="ttname"><a href="structavro_1_1StreamReader.html#af255c4f8690be489a0b623328e1cee76">avro::StreamReader::fill</a></div><div class="ttdeci">bool fill()</div><div class="ttdoc">Get as many byes from the underlying stream as possible in a single chunk. </div><div class="ttdef"><b>Definition:</b> Stream.hh:320</div></div>
<div class="ttc" id="classavro_1_1InputStream_html"><div class="ttname"><a href="classavro_1_1InputStream.html">avro::InputStream</a></div><div class="ttdoc">A no-copy input stream. </div><div class="ttdef"><b>Definition:</b> Stream.hh:36</div></div>
<div class="ttc" id="classavro_1_1InputStream_html_a252c2091ab50e6060e33ccbc7878bc6c"><div class="ttname"><a href="classavro_1_1InputStream.html#a252c2091ab50e6060e33ccbc7878bc6c">avro::InputStream::InputStream</a></div><div class="ttdeci">InputStream()</div><div class="ttdoc">An empty constuctor. </div><div class="ttdef"><b>Definition:</b> Stream.hh:42</div></div>
<div class="ttc" id="classavro_1_1OutputStream_html_a4eba4b0bca41a7174460e2672782273d"><div class="ttname"><a href="classavro_1_1OutputStream.html#a4eba4b0bca41a7174460e2672782273d">avro::OutputStream::flush</a></div><div class="ttdeci">virtual void flush()=0</div><div class="ttdoc">Flushes any data remaining in the buffer to the stream&amp;#39;s underlying store, if any. </div></div>
<div class="ttc" id="classavro_1_1OutputStream_html_af22df848c85168c0f43100b5b1016a27"><div class="ttname"><a href="classavro_1_1OutputStream.html#af22df848c85168c0f43100b5b1016a27">avro::OutputStream::OutputStream</a></div><div class="ttdeci">OutputStream()</div><div class="ttdoc">An empty constuctor. </div><div class="ttdef"><b>Definition:</b> Stream.hh:116</div></div>
<div class="ttc" id="structavro_1_1StreamWriter_html_a18f69b15f00ea780ee61f50c9467e0a7"><div class="ttname"><a href="structavro_1_1StreamWriter.html#a18f69b15f00ea780ee61f50c9467e0a7">avro::StreamWriter::out_</a></div><div class="ttdeci">OutputStream * out_</div><div class="ttdoc">The underlying output stream for this writer. </div><div class="ttdef"><b>Definition:</b> Stream.hh:367</div></div>
<div class="ttc" id="namespaceavro_html_acb2ea7a6b8a82014ce7d76abcc171812"><div class="ttname"><a href="namespaceavro.html#acb2ea7a6b8a82014ce7d76abcc171812">avro::ostreamOutputStream</a></div><div class="ttdeci">AVRO_DECL OutputStreamPtr ostreamOutputStream(std::ostream &amp;os, size_t bufferSize=8 *1024)</div><div class="ttdoc">Returns a new OutputStream whose contents will be sent to the given std::ostream. ...</div></div>
<div class="ttc" id="namespaceavro_html_a98b7a8baaef11e477db89699ab27359b"><div class="ttname"><a href="namespaceavro.html#a98b7a8baaef11e477db89699ab27359b">avro::memoryInputStream</a></div><div class="ttdeci">AVRO_DECL InputStreamPtr memoryInputStream(const uint8_t *data, size_t len)</div><div class="ttdoc">Returns a new InputStream, with the data from the given byte array. </div></div>
<div class="ttc" id="structavro_1_1StreamWriter_html"><div class="ttname"><a href="structavro_1_1StreamWriter.html">avro::StreamWriter</a></div><div class="ttdoc">A convinience class to write data into an OutputStream. </div><div class="ttdef"><b>Definition:</b> Stream.hh:363</div></div>
<div class="ttc" id="structavro_1_1StreamReader_html_a9501052d3dbbf54070f565bc0f0d644a"><div class="ttname"><a href="structavro_1_1StreamReader.html#a9501052d3dbbf54070f565bc0f0d644a">avro::StreamReader::more</a></div><div class="ttdeci">void more()</div><div class="ttdoc">Tries to get more data and if it cannot, throws an exception. </div><div class="ttdef"><b>Definition:</b> Stream.hh:334</div></div>
<div class="ttc" id="classavro_1_1InputStream_html_a4ec852f779fc68dea8fef197ec3eef1d"><div class="ttname"><a href="classavro_1_1InputStream.html#a4ec852f779fc68dea8fef197ec3eef1d">avro::InputStream::skip</a></div><div class="ttdeci">virtual void skip(size_t len)=0</div><div class="ttdoc">Skips number of bytes specified by len. </div></div>
<div class="ttc" id="classavro_1_1OutputStream_html_a77073ae356848aef1232f38e0068ce58"><div class="ttname"><a href="classavro_1_1OutputStream.html#a77073ae356848aef1232f38e0068ce58">avro::OutputStream::~OutputStream</a></div><div class="ttdeci">virtual ~OutputStream()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> Stream.hh:122</div></div>
<div class="ttc" id="classavro_1_1InputStream_html_a87767c15b0661981d24f7a42bfcef6b5"><div class="ttname"><a href="classavro_1_1InputStream.html#a87767c15b0661981d24f7a42bfcef6b5">avro::InputStream::next</a></div><div class="ttdeci">virtual bool next(const uint8_t **data, size_t *len)=0</div><div class="ttdoc">Returns some of available data. </div></div>
<div class="ttc" id="structavro_1_1StreamReader_html_ace1b429f51df3702a33d2991031ac2f8"><div class="ttname"><a href="structavro_1_1StreamReader.html#ace1b429f51df3702a33d2991031ac2f8">avro::StreamReader::read</a></div><div class="ttdeci">uint8_t read()</div><div class="ttdoc">Read just one byte from the underlying stream. </div><div class="ttdef"><b>Definition:</b> Stream.hh:273</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>