stdex/idrec_8hpp_source.html

478 lines
70 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>stdex: include/stdex/idrec.hpp 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 id="projectrow">
<td id="projectalign">
<div id="projectname">stdex
</div>
<div id="projectbrief">Additional custom or not Standard C++ covered algorithms</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @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:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
<!-- 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">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_fca3c47b2ea228727bd6729832f89576.html">stdex</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">idrec.hpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> SPDX-License-Identifier: MIT</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> Copyright © 2016-2023 Amebis</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">*/</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> </div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;compat.hpp&quot;</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;stream.hpp&quot;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &lt;ios&gt;</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &lt;istream&gt;</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &lt;ostream&gt;</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="keyword">namespace </span>stdex {</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">namespace </span>idrec {</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T_ID&gt;</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> _Success_(<span class="keywordflow">return</span>) <span class="keywordtype">bool</span> read_id(_In_ std::istream&amp; stream, _Out_ T_ID &amp;<span class="keywordtype">id</span>, _In_opt_ std::streamoff end = (std::streamoff)-1)</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> {</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordflow">if</span> (end == (std::streamoff)-1 || stream.tellg() &lt; end) {</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> stream.read((<span class="keywordtype">char</span>*)&amp;<span class="keywordtype">id</span>, <span class="keyword">sizeof</span>(<span class="keywordtype">id</span>));</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keywordflow">return</span> stream.good();</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> } <span class="keywordflow">else</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> }</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T_ID&gt;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> _Success_(<span class="keywordflow">return</span>) <span class="keywordtype">bool</span> read_id(_In_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic__file.html">stdex::stream::basic_file</a>&amp; stream, _Out_ T_ID &amp;<span class="keywordtype">id</span>, _In_opt_ stdex::stream::fpos_t end = stdex::stream::fpos_max)</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> {</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">if</span> (end == stdex::stream::fpos_max || stream.tell() &lt; end) {</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> stream &gt;&gt; id;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">return</span> stream.ok();</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> } <span class="keywordflow">else</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> }</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T_SIZE, T_SIZE ALIGN&gt;</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">bool</span> ignore(_In_ std::istream&amp; stream)</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> {</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="comment">// Read record size.</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> T_SIZE size;</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> stream.read((<span class="keywordtype">char</span>*)&amp;size, <span class="keyword">sizeof</span>(size));</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">if</span> (!stream.good()) _Unlikely_ <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// Skip the record data.</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> size += (T_SIZE)(ALIGN - size) % ALIGN;</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> stream.ignore(size);</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">if</span> (!stream.good()) _Unlikely_ <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> }</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T_SIZE, T_SIZE ALIGN&gt;</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">bool</span> ignore(_In_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; stream)</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> {</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="comment">// Read record size.</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> T_SIZE size;</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> stream &gt;&gt; size;</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">if</span> (!stream.ok()) _Unlikely_ <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="comment">// Skip the record data.</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> size += (T_SIZE)(ALIGN - size) % ALIGN;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> stream.skip(size);</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span> (!stream.ok()) _Unlikely_ <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> }</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T_ID, <span class="keyword">class</span> T_SIZE, T_SIZE ALIGN&gt;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">bool</span> find(_In_ std::istream&amp; stream, _In_ T_ID <span class="keywordtype">id</span>, _In_opt_ std::streamoff end = (std::streamoff)-1)</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> {</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> T_ID _id;</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">while</span> (end == (std::streamoff)-1 || stream.tellg() &lt; end) {</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> stream.read((<span class="keywordtype">char</span>*)&amp;_id, <span class="keyword">sizeof</span>(_id));</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">if</span> (!stream.good()) _Unlikely_ <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">if</span> (_id == <span class="keywordtype">id</span>) {</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="comment">// The record was found.</span></div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> } <span class="keywordflow">else</span></div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> ignore&lt;T_SIZE, ALIGN&gt;(stream);</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> }</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> }</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T_ID, <span class="keyword">class</span> T_SIZE, T_SIZE ALIGN&gt;</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordtype">bool</span> find(_In_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic__file.html">stdex::stream::basic_file</a>&amp; stream, _In_ T_ID <span class="keywordtype">id</span>, _In_opt_ stdex::stream::fpos_t end = stdex::stream::fpos_max)</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> {</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> T_ID _id;</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">while</span> (end == stdex::stream::fpos_max || stream.tell() &lt; end) {</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> stream &gt;&gt; _id;</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">if</span> (!stream.ok()) _Unlikely_ <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span> (_id == <span class="keywordtype">id</span>) {</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="comment">// The record was found.</span></div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> } <span class="keywordflow">else</span></div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> ignore&lt;T_SIZE, ALIGN&gt;(stream);</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> }</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> }</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T_ID, <span class="keyword">class</span> T_SIZE&gt;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> std::streamoff open(_In_ std::ostream&amp; stream, _In_ T_ID <span class="keywordtype">id</span>)</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> {</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> std::streamoff start = stream.tellp();</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// Write ID.</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">if</span> (stream.fail()) _Unlikely_ <span class="keywordflow">return</span> (std::streamoff)-1;</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> stream.write((<span class="keyword">const</span> <span class="keywordtype">char</span>*)&amp;<span class="keywordtype">id</span>, <span class="keyword">sizeof</span>(<span class="keywordtype">id</span>));</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="comment">// Write 0 as a placeholder for data size.</span></div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">if</span> (stream.fail()) _Unlikely_ <span class="keywordflow">return</span> (std::streamoff)-1;</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> T_SIZE size = 0;</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> stream.write((<span class="keyword">const</span> <span class="keywordtype">char</span>*)&amp;size, <span class="keyword">sizeof</span>(size));</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">return</span> start;</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> }</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T_ID, <span class="keyword">class</span> T_SIZE&gt;</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> stdex::stream::fpos_t open(_In_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic__file.html">stdex::stream::basic_file</a>&amp; stream, _In_ T_ID <span class="keywordtype">id</span>)</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> {</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">auto</span> start = stream.tell();</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="comment">// Write ID.</span></div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> stream &lt;&lt; id;</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> </div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="comment">// Write 0 as a placeholder for data size.</span></div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> stream &lt;&lt; (T_SIZE)0;</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">return</span> start;</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> }</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> </div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T_ID, <span class="keyword">class</span> T_SIZE, T_SIZE ALIGN&gt;</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> std::streamoff close(_In_ std::ostream&amp; stream, _In_ std::streamoff start)</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> {</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> std::streamoff end = stream.tellp();</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> T_SIZE</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> size = <span class="keyword">static_cast&lt;</span>T_SIZE<span class="keyword">&gt;</span>(end - start - <span class="keyword">sizeof</span>(T_ID) - <span class="keyword">sizeof</span>(T_SIZE)),</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> remainder = <span class="keyword">static_cast&lt;</span>T_SIZE<span class="keyword">&gt;</span>((ALIGN - size) % ALIGN); <span class="comment">// Number of bytes we need to add, to keep the data integral number of ALIGN blocks long</span></div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> </div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">if</span> (remainder) {</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="comment">// Append padding.</span></div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> padding[ALIGN] = {};</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> stream.write(padding, remainder);</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> end += remainder;</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> }</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="comment">// Update the data size.</span></div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">if</span> (stream.fail()) _Unlikely_ <span class="keywordflow">return</span> (std::streamoff)-1;</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> stream.seekp(start + <span class="keyword">sizeof</span>(T_ID));</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> stream.write((<span class="keyword">const</span> <span class="keywordtype">char</span>*)&amp;size, <span class="keyword">sizeof</span>(size));</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> stream.seekp(end);</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> </div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">return</span> end;</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> }</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> </div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T_ID, <span class="keyword">class</span> T_SIZE, T_SIZE ALIGN&gt;</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> stdex::stream::fpos_t close(_In_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic__file.html">stdex::stream::basic_file</a>&amp; stream, _In_ stdex::stream::fpos_t start)</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> {</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keyword">auto</span> end = stream.tell();</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> T_SIZE</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> size = <span class="keyword">static_cast&lt;</span>T_SIZE<span class="keyword">&gt;</span>(end - start - <span class="keyword">sizeof</span>(T_ID) - <span class="keyword">sizeof</span>(T_SIZE)),</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> remainder = <span class="keyword">static_cast&lt;</span>T_SIZE<span class="keyword">&gt;</span>((ALIGN - size) % ALIGN); <span class="comment">// Number of bytes we need to add, to keep the data integral number of ALIGN blocks long</span></div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> </div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">if</span> (remainder) {</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="comment">// Append padding.</span></div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> padding[ALIGN] = {};</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> stream.write_array(padding, <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>), remainder);</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> end += remainder;</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> }</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> </div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="comment">// Update the data size.</span></div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">if</span> (!stream.ok()) _Unlikely_ <span class="keywordflow">return</span> stdex::stream::fpos_max;</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> stream.seek(start + <span class="keyword">sizeof</span>(T_ID));</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> stream &lt;&lt; size;</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> stream.seek(end);</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> </div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">return</span> end;</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> }</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> </div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> T_ID, const T_ID ID, <span class="keyword">class</span> T_SIZE, T_SIZE ALIGN&gt;</div>
<div class="foldopen" id="foldopen00277" data-start="{" data-end="};">
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html"> 277</a></span> <span class="keyword">class </span><a class="code hl_class" href="classstdex_1_1idrec_1_1record.html">record</a></div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> {</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#a611da3801d9e7215324c9a5992a27f39"> 285</a></span> <a class="code hl_function" href="classstdex_1_1idrec_1_1record.html#a611da3801d9e7215324c9a5992a27f39">record</a>(_In_ T &amp;d) : <a class="code hl_variable" href="classstdex_1_1idrec_1_1record.html#a1ab09fae53142836c958a63137fb37cb">data</a>(d) {}</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> </div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#ab84a09093bd1a2cbf720329b84c6d73b"> 292</a></span> <a class="code hl_function" href="classstdex_1_1idrec_1_1record.html#ab84a09093bd1a2cbf720329b84c6d73b">record</a>(_In_ <span class="keyword">const</span> T &amp;d) : <a class="code hl_variable" href="classstdex_1_1idrec_1_1record.html#a1ab09fae53142836c958a63137fb37cb">data</a>((T&amp;)d) {}</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div>
<div class="foldopen" id="foldopen00297" data-start="{" data-end="}">
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#a19ef062ee06dbc1ca3d4fddc756ac4d6"> 297</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> T_ID <a class="code hl_function" href="classstdex_1_1idrec_1_1record.html#a19ef062ee06dbc1ca3d4fddc756ac4d6">id</a>()</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> {</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">return</span> ID;</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> }</div>
</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> </div>
<div class="foldopen" id="foldopen00309" data-start="{" data-end="}">
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#a3d4bff1bf080fb8cb3960b5b5018392c"> 309</a></span> <span class="keyword">const</span> <a class="code hl_class" href="classstdex_1_1idrec_1_1record.html">record&lt;T, T_ID, ID, T_SIZE, ALIGN&gt;</a>&amp; <a class="code hl_function" href="classstdex_1_1idrec_1_1record.html#a3d4bff1bf080fb8cb3960b5b5018392c">operator =</a>(_In_ <span class="keyword">const</span> <a class="code hl_class" href="classstdex_1_1idrec_1_1record.html">record&lt;T, T_ID, ID, T_SIZE, ALIGN&gt;</a> &amp;r)</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> {</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <a class="code hl_variable" href="classstdex_1_1idrec_1_1record.html#a1ab09fae53142836c958a63137fb37cb">data</a> = r.<a class="code hl_variable" href="classstdex_1_1idrec_1_1record.html#a1ab09fae53142836c958a63137fb37cb">data</a>;</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> }</div>
</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> </div>
<div class="foldopen" id="foldopen00322" data-start="{" data-end="}">
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#a379d9eeac3c52375982ba75df33604ca"> 322</a></span> <span class="keyword">static</span> std::streamoff <a class="code hl_function" href="classstdex_1_1idrec_1_1record.html#a379d9eeac3c52375982ba75df33604ca">open</a>(_In_ std::ostream&amp; stream)</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> {</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">return</span> stdex::idrec::open&lt;T_ID, T_SIZE&gt;(stream, ID);</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> }</div>
</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> </div>
<div class="foldopen" id="foldopen00334" data-start="{" data-end="}">
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#a0498a09948194be47553433c87121ec4"> 334</a></span> <span class="keyword">static</span> stdex::stream::foff_t <a class="code hl_function" href="classstdex_1_1idrec_1_1record.html#a0498a09948194be47553433c87121ec4">open</a>(_In_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic__file.html">stdex::stream::basic_file</a>&amp; stream)</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> {</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">return</span> stdex::idrec::open&lt;T_ID, T_SIZE&gt;(stream, ID);</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> }</div>
</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> </div>
<div class="foldopen" id="foldopen00347" data-start="{" data-end="}">
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#ae63ba9487daaf8ec39dfe7dd04c13cc9"> 347</a></span> <span class="keyword">static</span> std::streamoff <a class="code hl_function" href="classstdex_1_1idrec_1_1record.html#ae63ba9487daaf8ec39dfe7dd04c13cc9">close</a>(_In_ std::ostream&amp; stream, _In_ std::streamoff start)</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> {</div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">return</span> stdex::idrec::close&lt;T_ID, T_SIZE, ALIGN&gt;(stream, start);</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> }</div>
</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> </div>
<div class="foldopen" id="foldopen00360" data-start="{" data-end="}">
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#a0a91b8bf08dbd79ac40b4361a9faee2a"> 360</a></span> <span class="keyword">static</span> stdex::stream::foff_t <a class="code hl_function" href="classstdex_1_1idrec_1_1record.html#a0a91b8bf08dbd79ac40b4361a9faee2a">close</a>(_In_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic__file.html">stdex::stream::basic_file</a>&amp; stream, _In_ stdex::stream::foff_t start)</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> {</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">return</span> stdex::idrec::close&lt;T_ID, T_SIZE, ALIGN&gt;(stream, start);</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> }</div>
</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> </div>
<div class="foldopen" id="foldopen00375" data-start="{" data-end="}">
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#a19523040d07119055884a7a2f8ef25fd"> 375</a></span> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classstdex_1_1idrec_1_1record.html#a19523040d07119055884a7a2f8ef25fd">find</a>(_In_ std::istream&amp; stream, _In_opt_ std::streamoff end = (std::streamoff)-1)</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> {</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> <span class="keywordflow">return</span> stdex::idrec::find&lt;T_ID, T_SIZE, ALIGN&gt;(stream, ID, end);</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> }</div>
</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> </div>
<div class="foldopen" id="foldopen00390" data-start="{" data-end="}">
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#a6566678aa326da5b2d84c38b76d1c195"> 390</a></span> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classstdex_1_1idrec_1_1record.html#a6566678aa326da5b2d84c38b76d1c195">find</a>(_In_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic__file.html">stdex::stream::basic_file</a>&amp; stream, _In_opt_ stdex::stream::foff_t end = stdex::stream::foff_max)</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> {</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">return</span> stdex::idrec::find&lt;T_ID, T_SIZE, ALIGN&gt;(stream, ID, end);</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> }</div>
</div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> </div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#a1ab09fae53142836c958a63137fb37cb"> 395</a></span> T &amp;<a class="code hl_variable" href="classstdex_1_1idrec_1_1record.html#a1ab09fae53142836c958a63137fb37cb">data</a>; </div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> </div>
<div class="foldopen" id="foldopen00405" data-start="{" data-end="};">
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#a865df6cea13c7ab2b2a532408e2c5228"> 405</a></span> <span class="keyword">friend</span> std::ostream&amp; <a class="code hl_friend" href="classstdex_1_1idrec_1_1record.html#a865df6cea13c7ab2b2a532408e2c5228">operator &lt;&lt;</a>(_In_ std::ostream&amp; stream, _In_ <span class="keyword">const</span> <a class="code hl_class" href="classstdex_1_1idrec_1_1record.html">record&lt;T, T_ID, ID, T_SIZE, ALIGN&gt;</a> r)</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> {</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> <span class="comment">// Parameter r does not need to be passed by reference. It has only one field (data), which is a reference itself already.</span></div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> </div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> <span class="keyword">auto</span> start = r.open(stream);</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">if</span> (stream.fail()) _Unlikely_ <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> stream &lt;&lt; r.data;</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> r.close(stream, start);</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> </div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> }</div>
</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> </div>
<div class="foldopen" id="foldopen00425" data-start="{" data-end="};">
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#aa4d2dd34b3980c81e72bccd6826309fe"> 425</a></span> <span class="keyword">friend</span> <a class="code hl_class" href="classstdex_1_1stream_1_1basic__file.html">stdex::stream::basic_file</a>&amp; <a class="code hl_friend" href="classstdex_1_1idrec_1_1record.html#a865df6cea13c7ab2b2a532408e2c5228">operator &lt;&lt;</a>(_In_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic__file.html">stdex::stream::basic_file</a>&amp; stream, _In_ <span class="keyword">const</span> <a class="code hl_class" href="classstdex_1_1idrec_1_1record.html">record&lt;T, T_ID, ID, T_SIZE, ALIGN&gt;</a> r)</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> {</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> <span class="comment">// Parameter r does not need to be passed by reference. It has only one field (data), which is a reference itself already.</span></div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> </div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <span class="keyword">auto</span> start = r.open(stream);</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">if</span> (!stream.ok()) _Unlikely_ <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> stream &lt;&lt; r.data;</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> r.close(stream, start);</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> </div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> }</div>
</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> </div>
<div class="foldopen" id="foldopen00445" data-start="{" data-end="};">
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#abe481a30a4497e2460386d4a7984fe67"> 445</a></span> <span class="keyword">friend</span> <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; <a class="code hl_friend" href="classstdex_1_1idrec_1_1record.html#a865df6cea13c7ab2b2a532408e2c5228">operator &lt;&lt;</a>(_In_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; stream, _In_ <span class="keyword">const</span> <a class="code hl_class" href="classstdex_1_1idrec_1_1record.html">record&lt;T, T_ID, ID, T_SIZE, ALIGN&gt;</a> r)</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> {</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> <span class="comment">// Parameter r does not need to be passed by reference. It has only one field (data), which is a reference itself already.</span></div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> </div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> <a class="code hl_class" href="classstdex_1_1stream_1_1memory__file.html">stdex::stream::memory_file</a> temp;</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="keyword">auto</span> start = r.open(temp);</div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">if</span> (!temp.<a class="code hl_function" href="classstdex_1_1stream_1_1basic.html#a0295e4efe18eef2a8962680274957ac1">ok</a>()) _Unlikely_ <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> temp &lt;&lt; r.<a class="code hl_function" href="classstdex_1_1stream_1_1memory__file.html#aff374fc64c7453dc0cef22f19bc400ce">data</a>;</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> r.close(temp, start);</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> temp.<a class="code hl_function" href="classstdex_1_1stream_1_1memory__file.html#a9e67e40e9e3c0f7b002fcdab5220b4e7">seek</a>(0);</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> stream.write_stream(temp);</div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> </div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> }</div>
</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> </div>
<div class="foldopen" id="foldopen00468" data-start="{" data-end="};">
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#a0573ee875d61fb6e10fdd6d7cf8542bc"> 468</a></span> <span class="keyword">friend</span> std::istream&amp; <a class="code hl_friend" href="classstdex_1_1idrec_1_1record.html#a0573ee875d61fb6e10fdd6d7cf8542bc">operator &gt;&gt;</a>(_In_ std::istream&amp; stream, _In_ <a class="code hl_class" href="classstdex_1_1idrec_1_1record.html">record&lt;T, T_ID, ID, T_SIZE, ALIGN&gt;</a> r)</div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> {</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> <span class="comment">// Parameter r does not need to be passed by reference. It has only one field (data), which is a reference itself already.</span></div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> </div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> <span class="comment">// Read data size.</span></div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> T_SIZE size;</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> stream.read((<span class="keywordtype">char</span>*)&amp;size, <span class="keyword">sizeof</span>(size));</div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> <span class="keywordflow">if</span> (!stream.good()) _Unlikely_ <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> </div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> <span class="comment">// Read data.</span></div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> std::streamoff start = stream.tellg();</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> stream &gt;&gt; r.data; <span class="comment">// TODO: operator &gt;&gt; should not read past the record data! Make a size limited stream and read from it instead.</span></div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">if</span> (!stream.good()) _Unlikely_ <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> </div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> size += <span class="keyword">static_cast&lt;</span>T_SIZE<span class="keyword">&gt;</span>((ALIGN - size) % ALIGN);</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> stream.seekg(start + size);</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> </div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> }</div>
</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> </div>
<div class="foldopen" id="foldopen00496" data-start="{" data-end="};">
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#a70685089eb1f47aff05a5bd45e607881"> 496</a></span> <span class="keyword">friend</span> <a class="code hl_class" href="classstdex_1_1stream_1_1basic__file.html">stdex::stream::basic_file</a>&amp; <a class="code hl_friend" href="classstdex_1_1idrec_1_1record.html#a0573ee875d61fb6e10fdd6d7cf8542bc">operator &gt;&gt;</a>(_In_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic__file.html">stdex::stream::basic_file</a>&amp; stream, _In_ <a class="code hl_class" href="classstdex_1_1idrec_1_1record.html">record&lt;T, T_ID, ID, T_SIZE, ALIGN&gt;</a> r)</div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> {</div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> <span class="comment">// Parameter r does not need to be passed by reference. It has only one field (data), which is a reference itself already.</span></div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> </div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> <span class="comment">// Read data size.</span></div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> T_SIZE size;</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> stream &gt;&gt; size;</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">if</span> (!stream.ok()) _Unlikely_ <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> </div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> <span class="comment">// Read data.</span></div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> <span class="keyword">auto</span> start = stream.tell();</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> {</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> <a class="code hl_class" href="classstdex_1_1stream_1_1limiter.html">stdex::stream::limiter</a> limiter(stream, size, 0);</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> limiter &gt;&gt; r.data;</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> <span class="keywordflow">if</span> (!limiter.<a class="code hl_function" href="classstdex_1_1stream_1_1basic.html#a0295e4efe18eef2a8962680274957ac1">ok</a>()) _Unlikely_ <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> }</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> </div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> size += <span class="keyword">static_cast&lt;</span>T_SIZE<span class="keyword">&gt;</span>((ALIGN - size) % ALIGN);</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> stream.seek(start + size);</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> </div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> }</div>
</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> </div>
<div class="foldopen" id="foldopen00527" data-start="{" data-end="};">
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"><a class="line" href="classstdex_1_1idrec_1_1record.html#a14d109489d0b00d36a691145725c7340"> 527</a></span> <span class="keyword">friend</span> <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; <a class="code hl_friend" href="classstdex_1_1idrec_1_1record.html#a0573ee875d61fb6e10fdd6d7cf8542bc">operator &gt;&gt;</a>(_In_ <a class="code hl_class" href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a>&amp; stream, _In_ <a class="code hl_class" href="classstdex_1_1idrec_1_1record.html">record&lt;T, T_ID, ID, T_SIZE, ALIGN&gt;</a> r)</div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> {</div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> <span class="comment">// Parameter r does not need to be passed by reference. It has only one field (data), which is a reference itself already.</span></div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> </div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> <span class="comment">// Read data size.</span></div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> T_SIZE size;</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> stream &gt;&gt; size;</div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">if</span> (!stream.ok()) _Unlikely_ <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> </div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> {</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> <a class="code hl_class" href="classstdex_1_1stream_1_1limiter.html">stdex::stream::limiter</a> limiter(stream, size, 0);</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> limiter &gt;&gt; r.data;</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> <span class="keywordflow">if</span> (!limiter.<a class="code hl_function" href="classstdex_1_1stream_1_1basic.html#a0295e4efe18eef2a8962680274957ac1">ok</a>()) _Unlikely_ <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> limiter.<a class="code hl_function" href="classstdex_1_1stream_1_1basic.html#a52ce3bdf28a9a7fc5a881616c8db2da4">skip</a>(limiter.<a class="code hl_variable" href="classstdex_1_1stream_1_1limiter.html#a455a9e38efe1e7473e501dd00fb3d7f0">read_limit</a>);</div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> }</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> stream.skip(<span class="keyword">static_cast&lt;</span>T_SIZE<span class="keyword">&gt;</span>((ALIGN - size) % ALIGN));</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> </div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <span class="keywordflow">return</span> stream;</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> }</div>
</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> };</div>
</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> };</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span>};</div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html">stdex::idrec::record</a></div><div class="ttdoc">Helper class for read/write of records to/from memory.</div><div class="ttdef"><b>Definition</b> idrec.hpp:278</div></div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html_a0498a09948194be47553433c87121ec4"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html#a0498a09948194be47553433c87121ec4">stdex::idrec::record::open</a></div><div class="ttdeci">static stdex::stream::foff_t open(stdex::stream::basic_file &amp;stream)</div><div class="ttdoc">Writes record header.</div><div class="ttdef"><b>Definition</b> idrec.hpp:334</div></div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html_a0573ee875d61fb6e10fdd6d7cf8542bc"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html#a0573ee875d61fb6e10fdd6d7cf8542bc">stdex::idrec::record::operator&gt;&gt;</a></div><div class="ttdeci">friend std::istream &amp; operator&gt;&gt;(std::istream &amp;stream, record&lt; T, T_ID, ID, T_SIZE, ALIGN &gt; r)</div><div class="ttdoc">Reads record from a stream.</div><div class="ttdef"><b>Definition</b> idrec.hpp:468</div></div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html_a0a91b8bf08dbd79ac40b4361a9faee2a"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html#a0a91b8bf08dbd79ac40b4361a9faee2a">stdex::idrec::record::close</a></div><div class="ttdeci">static stdex::stream::foff_t close(stdex::stream::basic_file &amp;stream, stdex::stream::foff_t start)</div><div class="ttdoc">Updates record header.</div><div class="ttdef"><b>Definition</b> idrec.hpp:360</div></div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html_a19523040d07119055884a7a2f8ef25fd"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html#a19523040d07119055884a7a2f8ef25fd">stdex::idrec::record::find</a></div><div class="ttdeci">static bool find(std::istream &amp;stream, std::streamoff end=(std::streamoff) -1)</div><div class="ttdoc">Finds record data.</div><div class="ttdef"><b>Definition</b> idrec.hpp:375</div></div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html_a19ef062ee06dbc1ca3d4fddc756ac4d6"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html#a19ef062ee06dbc1ca3d4fddc756ac4d6">stdex::idrec::record::id</a></div><div class="ttdeci">static constexpr T_ID id()</div><div class="ttdoc">Returns record id.</div><div class="ttdef"><b>Definition</b> idrec.hpp:297</div></div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html_a1ab09fae53142836c958a63137fb37cb"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html#a1ab09fae53142836c958a63137fb37cb">stdex::idrec::record::data</a></div><div class="ttdeci">T &amp; data</div><div class="ttdoc">Record data reference.</div><div class="ttdef"><b>Definition</b> idrec.hpp:395</div></div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html_a379d9eeac3c52375982ba75df33604ca"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html#a379d9eeac3c52375982ba75df33604ca">stdex::idrec::record::open</a></div><div class="ttdeci">static std::streamoff open(std::ostream &amp;stream)</div><div class="ttdoc">Writes record header.</div><div class="ttdef"><b>Definition</b> idrec.hpp:322</div></div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html_a3d4bff1bf080fb8cb3960b5b5018392c"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html#a3d4bff1bf080fb8cb3960b5b5018392c">stdex::idrec::record::operator=</a></div><div class="ttdeci">const record&lt; T, T_ID, ID, T_SIZE, ALIGN &gt; &amp; operator=(const record&lt; T, T_ID, ID, T_SIZE, ALIGN &gt; &amp;r)</div><div class="ttdoc">Assignment operator.</div><div class="ttdef"><b>Definition</b> idrec.hpp:309</div></div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html_a611da3801d9e7215324c9a5992a27f39"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html#a611da3801d9e7215324c9a5992a27f39">stdex::idrec::record::record</a></div><div class="ttdeci">record(T &amp;d)</div><div class="ttdoc">Constructs the class.</div><div class="ttdef"><b>Definition</b> idrec.hpp:285</div></div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html_a6566678aa326da5b2d84c38b76d1c195"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html#a6566678aa326da5b2d84c38b76d1c195">stdex::idrec::record::find</a></div><div class="ttdeci">static bool find(stdex::stream::basic_file &amp;stream, stdex::stream::foff_t end=stdex::stream::foff_max)</div><div class="ttdoc">Finds record data.</div><div class="ttdef"><b>Definition</b> idrec.hpp:390</div></div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html_a865df6cea13c7ab2b2a532408e2c5228"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html#a865df6cea13c7ab2b2a532408e2c5228">stdex::idrec::record::operator&lt;&lt;</a></div><div class="ttdeci">friend std::ostream &amp; operator&lt;&lt;(std::ostream &amp;stream, const record&lt; T, T_ID, ID, T_SIZE, ALIGN &gt; r)</div><div class="ttdoc">Writes record to a stream.</div><div class="ttdef"><b>Definition</b> idrec.hpp:405</div></div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html_ab84a09093bd1a2cbf720329b84c6d73b"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html#ab84a09093bd1a2cbf720329b84c6d73b">stdex::idrec::record::record</a></div><div class="ttdeci">record(const T &amp;d)</div><div class="ttdoc">Constructs the class.</div><div class="ttdef"><b>Definition</b> idrec.hpp:292</div></div>
<div class="ttc" id="aclassstdex_1_1idrec_1_1record_html_ae63ba9487daaf8ec39dfe7dd04c13cc9"><div class="ttname"><a href="classstdex_1_1idrec_1_1record.html#ae63ba9487daaf8ec39dfe7dd04c13cc9">stdex::idrec::record::close</a></div><div class="ttdeci">static std::streamoff close(std::ostream &amp;stream, std::streamoff start)</div><div class="ttdoc">Updates record header.</div><div class="ttdef"><b>Definition</b> idrec.hpp:347</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1basic__file_html"><div class="ttname"><a href="classstdex_1_1stream_1_1basic__file.html">stdex::stream::basic_file</a></div><div class="ttdoc">Basic seekable stream operations.</div><div class="ttdef"><b>Definition</b> stream.hpp:824</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1basic_html"><div class="ttname"><a href="classstdex_1_1stream_1_1basic.html">stdex::stream::basic</a></div><div class="ttdoc">UTF-8 byte-order-mark</div><div class="ttdef"><b>Definition</b> stream.hpp:79</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1basic_html_a0295e4efe18eef2a8962680274957ac1"><div class="ttname"><a href="classstdex_1_1stream_1_1basic.html#a0295e4efe18eef2a8962680274957ac1">stdex::stream::basic::ok</a></div><div class="ttdeci">bool ok() const</div><div class="ttdoc">Returns true if the stream state is clean i.e. previous operation was succesful.</div><div class="ttdef"><b>Definition</b> stream.hpp:175</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1basic_html_a52ce3bdf28a9a7fc5a881616c8db2da4"><div class="ttname"><a href="classstdex_1_1stream_1_1basic.html#a52ce3bdf28a9a7fc5a881616c8db2da4">stdex::stream::basic::skip</a></div><div class="ttdeci">virtual void skip(fsize_t amount)</div><div class="ttdoc">Skips given amount of bytes of data on the stream.</div><div class="ttdef"><b>Definition</b> stream.hpp:142</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1limiter_html"><div class="ttname"><a href="classstdex_1_1stream_1_1limiter.html">stdex::stream::limiter</a></div><div class="ttdoc">Limits reading from/writing to stream to a predefined number of bytes.</div><div class="ttdef"><b>Definition</b> stream.hpp:1551</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1limiter_html_a455a9e38efe1e7473e501dd00fb3d7f0"><div class="ttname"><a href="classstdex_1_1stream_1_1limiter.html#a455a9e38efe1e7473e501dd00fb3d7f0">stdex::stream::limiter::read_limit</a></div><div class="ttdeci">fsize_t read_limit</div><div class="ttdoc">Number of bytes left that may be read from the stream.</div><div class="ttdef"><b>Definition</b> stream.hpp:1603</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1memory__file_html"><div class="ttname"><a href="classstdex_1_1stream_1_1memory__file.html">stdex::stream::memory_file</a></div><div class="ttdoc">In-memory file.</div><div class="ttdef"><b>Definition</b> stream.hpp:3178</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1memory__file_html_a9e67e40e9e3c0f7b002fcdab5220b4e7"><div class="ttname"><a href="classstdex_1_1stream_1_1memory__file.html#a9e67e40e9e3c0f7b002fcdab5220b4e7">stdex::stream::memory_file::seek</a></div><div class="ttdeci">virtual fpos_t seek(foff_t offset, seek_t how=seek_t::beg)</div><div class="ttdoc">Seeks to specified relative file position.</div><div class="ttdef"><b>Definition</b> stream.hpp:3856</div></div>
<div class="ttc" id="aclassstdex_1_1stream_1_1memory__file_html_aff374fc64c7453dc0cef22f19bc400ce"><div class="ttname"><a href="classstdex_1_1stream_1_1memory__file.html#aff374fc64c7453dc0cef22f19bc400ce">stdex::stream::memory_file::data</a></div><div class="ttdeci">const void * data() const</div><div class="ttdoc">Returns pointer to data.</div><div class="ttdef"><b>Definition</b> stream.hpp:3505</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Dec 6 2023 10:02:32 for stdex by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>