Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/windirstat/llfio.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins nedprod CI <foo@nowhere>2018-04-14 19:42:53 +0300
committerJenkins nedprod CI <foo@nowhere>2018-04-14 19:42:53 +0300
commit5d1d519ba3aae2d35525f2beb8a896f52824ba7a (patch)
tree505be1925c51513f0b3614327da75099b2f25ad8
parent1f7a04943fc4a3409021b9205831c56fa8b7d7fd (diff)
Travis CI updates documentation
-rw-r--r--classafio__v2__xxx_1_1algorithm_1_1mapped__span.html16
-rw-r--r--classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html4
-rw-r--r--classafio__v2__xxx_1_1async__file__handle-members.html10
-rw-r--r--classafio__v2__xxx_1_1async__file__handle.html95
-rw-r--r--classafio__v2__xxx_1_1async__file__handle.js2
-rw-r--r--classafio__v2__xxx_1_1file__handle-members.html10
-rw-r--r--classafio__v2__xxx_1_1file__handle.html95
-rw-r--r--classafio__v2__xxx_1_1file__handle.js2
-rw-r--r--classafio__v2__xxx_1_1handle.html2
-rw-r--r--classafio__v2__xxx_1_1mapped__file__handle-members.html36
-rw-r--r--classafio__v2__xxx_1_1mapped__file__handle.html51
-rw-r--r--classafio__v2__xxx_1_1mapped__file__handle.js4
-rw-r--r--classafio__v2__xxx_1_1section__handle.html10
-rw-r--r--file__handle_8hpp.html4
-rw-r--r--file__handle_8hpp.js2
-rw-r--r--functions_func_l.html10
-rw-r--r--functions_func_m.html6
-rw-r--r--functions_func_u.html4
-rw-r--r--functions_l.html8
-rw-r--r--functions_m.html8
-rw-r--r--functions_u.html4
-rw-r--r--namespaceafio__v2__xxx.html80
-rw-r--r--namespacemembers.html5
-rw-r--r--namespacemembers_func.html5
-rw-r--r--navtreeindex1.js16
-rw-r--r--navtreeindex2.js4
-rw-r--r--navtreeindex3.js16
-rw-r--r--navtreeindex4.js2
-rw-r--r--navtreeindex8.js4
-rw-r--r--search/all_12.js2
-rw-r--r--search/all_a.js2
-rw-r--r--search/all_b.js1
-rw-r--r--search/functions_12.js2
-rw-r--r--search/functions_a.js2
-rw-r--r--search/functions_b.js1
35 files changed, 309 insertions, 216 deletions
diff --git a/classafio__v2__xxx_1_1algorithm_1_1mapped__span.html b/classafio__v2__xxx_1_1algorithm_1_1mapped__span.html
index 8165ed8b..733a08d7 100644
--- a/classafio__v2__xxx_1_1algorithm_1_1mapped__span.html
+++ b/classafio__v2__xxx_1_1algorithm_1_1mapped__span.html
@@ -119,11 +119,11 @@ Public Member Functions</h2></td></tr>
constexpr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa5b20642220613876d8be474003785e9">mapped_span</a> ()</td></tr>
<tr class="memdesc:aa5b20642220613876d8be474003785e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor. <br /></td></tr>
<tr class="separator:aa5b20642220613876d8be474003785e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af6a43d3c0201079dac97d407ddb00aaa"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#af6a43d3c0201079dac97d407ddb00aaa">mapped_span</a> (<a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a> <a class="el" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">length</a>, section_handle::flag _flag=section_handle::flag::readwrite)</td></tr>
+<tr class="memitem:af6a43d3c0201079dac97d407ddb00aaa"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#af6a43d3c0201079dac97d407ddb00aaa">mapped_span</a> (<a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a> <a class="el" href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">length</a>, section_handle::flag _flag=section_handle::flag::readwrite)</td></tr>
<tr class="separator:af6a43d3c0201079dac97d407ddb00aaa"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aca48ca2f9558c5d6f57e398016311fe8"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aca48ca2f9558c5d6f57e398016311fe8">mapped_span</a> (<a class="el" href="classafio__v2__xxx_1_1section__handle.html">section_handle</a> &amp;sh, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a> <a class="el" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">length</a>=(<a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a>) -1, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa53a448cdf7c235bdba9252b52548b5b">extent_type</a> byteoffset=0, section_handle::flag _flag=section_handle::flag::readwrite)</td></tr>
+<tr class="memitem:aca48ca2f9558c5d6f57e398016311fe8"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aca48ca2f9558c5d6f57e398016311fe8">mapped_span</a> (<a class="el" href="classafio__v2__xxx_1_1section__handle.html">section_handle</a> &amp;sh, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a> <a class="el" href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">length</a>=(<a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a>) -1, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa53a448cdf7c235bdba9252b52548b5b">extent_type</a> byteoffset=0, section_handle::flag _flag=section_handle::flag::readwrite)</td></tr>
<tr class="separator:aca48ca2f9558c5d6f57e398016311fe8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a236f0978be161027886300e85bf5ae8d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#a236f0978be161027886300e85bf5ae8d">mapped_span</a> (<a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">mapped_file_handle</a> &amp;mfh, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a> <a class="el" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">length</a>=(<a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a>) -1, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa53a448cdf7c235bdba9252b52548b5b">extent_type</a> byteoffset=0)</td></tr>
+<tr class="memitem:a236f0978be161027886300e85bf5ae8d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#a236f0978be161027886300e85bf5ae8d">mapped_span</a> (<a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">mapped_file_handle</a> &amp;mfh, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a> <a class="el" href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">length</a>=(<a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a>) -1, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa53a448cdf7c235bdba9252b52548b5b">extent_type</a> byteoffset=0)</td></tr>
<tr class="separator:a236f0978be161027886300e85bf5ae8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
@@ -176,8 +176,8 @@ template&lt;class T &gt; </div>
</table>
</dd>
</dl>
-<div class="fragment"><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; : _mapping(<a class="code" href="classafio__v2__xxx_1_1map__handle.html#a9c43d182b257682d320f12f6e6be30b3">map_handle::map</a>(<a class="code" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">length</a> * <span class="keyword">sizeof</span>(T), _flag).value())</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; byte *addr = _mapping.<a class="code" href="classafio__v2__xxx_1_1map__handle.html#a6f203a9bb0bee94ac6b395ac5f3a2270">address</a>();</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">static_cast&lt;</span>span&lt;T&gt; &amp;<span class="keyword">&gt;</span>(*this) = span&lt;T&gt;(<span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(addr), <a class="code" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">length</a>); <span class="comment">// NOLINT</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div><div class="ttc" id="namespaceafio__v2__xxx_html_afe66c5875c48c8bd172901a1159ccbdc"><div class="ttname"><a href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">afio_v2_xxx::length</a></div><div class="ttdeci">result&lt; file_handle::extent_type &gt; length(const file_handle &amp;self) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:360</div></div>
-<div class="ttc" id="classafio__v2__xxx_1_1map__handle_html_a9c43d182b257682d320f12f6e6be30b3"><div class="ttname"><a href="classafio__v2__xxx_1_1map__handle.html#a9c43d182b257682d320f12f6e6be30b3">afio_v2_xxx::map_handle::map</a></div><div class="ttdeci">static result&lt; map_handle &gt; map(size_type bytes, section_handle::flag _flag=section_handle::flag::readwrite) noexcept</div></div>
+<div class="fragment"><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; : _mapping(<a class="code" href="classafio__v2__xxx_1_1map__handle.html#a9c43d182b257682d320f12f6e6be30b3">map_handle::map</a>(<a class="code" href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">length</a> * <span class="keyword">sizeof</span>(T), _flag).value())</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; byte *addr = _mapping.<a class="code" href="classafio__v2__xxx_1_1map__handle.html#a6f203a9bb0bee94ac6b395ac5f3a2270">address</a>();</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">static_cast&lt;</span>span&lt;T&gt; &amp;<span class="keyword">&gt;</span>(*this) = span&lt;T&gt;(<span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(addr), <a class="code" href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">length</a>); <span class="comment">// NOLINT</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1map__handle_html_a9c43d182b257682d320f12f6e6be30b3"><div class="ttname"><a href="classafio__v2__xxx_1_1map__handle.html#a9c43d182b257682d320f12f6e6be30b3">afio_v2_xxx::map_handle::map</a></div><div class="ttdeci">static result&lt; map_handle &gt; map(size_type bytes, section_handle::flag _flag=section_handle::flag::readwrite) noexcept</div></div>
+<div class="ttc" id="namespaceafio__v2__xxx_html_afc6d4594196e16ac67b25d91e48d09ee"><div class="ttname"><a href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">afio_v2_xxx::length</a></div><div class="ttdeci">result&lt; section_handle::extent_type &gt; length(const section_handle &amp;self) noexcept</div><div class="ttdoc">Return the current maximum permitted extent of the memory section. </div><div class="ttdef"><b>Definition:</b> map_handle.hpp:585</div></div>
<div class="ttc" id="classafio__v2__xxx_1_1map__handle_html_a6f203a9bb0bee94ac6b395ac5f3a2270"><div class="ttname"><a href="classafio__v2__xxx_1_1map__handle.html#a6f203a9bb0bee94ac6b395ac5f3a2270">afio_v2_xxx::map_handle::address</a></div><div class="ttdeci">byte * address() const noexcept</div><div class="ttdoc">The address in memory where this mapped view resides. </div><div class="ttdef"><b>Definition:</b> map_handle.hpp:411</div></div>
</div><!-- fragment -->
</div>
@@ -239,8 +239,8 @@ template&lt;class T &gt; </div>
</table>
</dd>
</dl>
-<div class="fragment"><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; : <a class="code" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa5b20642220613876d8be474003785e9">mapped_span</a>((<a class="code" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">length</a> == 0) ? <a class="code" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa5b20642220613876d8be474003785e9">mapped_span</a>() : <a class="code" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa5b20642220613876d8be474003785e9">mapped_span</a>(</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;#ifdef _WIN32</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; byteoffset &amp; ~65535,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;#<span class="keywordflow">else</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="namespaceafio__v2__xxx_1_1utils.html#a7e0604f2e7f98b94ddb09989184968f5">utils::round_down_to_page_size</a>(byteoffset),</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;#endif</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; byteoffset, sh, (<a class="code" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">length</a> == (<a class="code" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a>) -1) ? 0 : <a class="code" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">length</a> * <span class="keyword">sizeof</span>(T), _flag)) <span class="comment">// NOLINT</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1algorithm_1_1mapped__span_html_aa5b20642220613876d8be474003785e9"><div class="ttname"><a href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa5b20642220613876d8be474003785e9">afio_v2_xxx::algorithm::mapped_span::mapped_span</a></div><div class="ttdeci">constexpr mapped_span()</div><div class="ttdoc">Default constructor. </div><div class="ttdef"><b>Definition:</b> mapped_span.hpp:69</div></div>
-<div class="ttc" id="namespaceafio__v2__xxx_html_afe66c5875c48c8bd172901a1159ccbdc"><div class="ttname"><a href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">afio_v2_xxx::length</a></div><div class="ttdeci">result&lt; file_handle::extent_type &gt; length(const file_handle &amp;self) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:360</div></div>
+<div class="fragment"><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; : <a class="code" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa5b20642220613876d8be474003785e9">mapped_span</a>((<a class="code" href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">length</a> == 0) ? <a class="code" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa5b20642220613876d8be474003785e9">mapped_span</a>() : <a class="code" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa5b20642220613876d8be474003785e9">mapped_span</a>(</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;#ifdef _WIN32</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; byteoffset &amp; ~65535,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;#<span class="keywordflow">else</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="namespaceafio__v2__xxx_1_1utils.html#a7e0604f2e7f98b94ddb09989184968f5">utils::round_down_to_page_size</a>(byteoffset),</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;#endif</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; byteoffset, sh, (<a class="code" href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">length</a> == (<a class="code" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a>) -1) ? 0 : <a class="code" href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">length</a> * <span class="keyword">sizeof</span>(T), _flag)) <span class="comment">// NOLINT</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1algorithm_1_1mapped__span_html_aa5b20642220613876d8be474003785e9"><div class="ttname"><a href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa5b20642220613876d8be474003785e9">afio_v2_xxx::algorithm::mapped_span::mapped_span</a></div><div class="ttdeci">constexpr mapped_span()</div><div class="ttdoc">Default constructor. </div><div class="ttdef"><b>Definition:</b> mapped_span.hpp:69</div></div>
+<div class="ttc" id="namespaceafio__v2__xxx_html_afc6d4594196e16ac67b25d91e48d09ee"><div class="ttname"><a href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">afio_v2_xxx::length</a></div><div class="ttdeci">result&lt; section_handle::extent_type &gt; length(const section_handle &amp;self) noexcept</div><div class="ttdoc">Return the current maximum permitted extent of the memory section. </div><div class="ttdef"><b>Definition:</b> map_handle.hpp:585</div></div>
<div class="ttc" id="classafio__v2__xxx_1_1algorithm_1_1mapped__span_html_aa33d0ce0be15b0738c6b36341843ccb5"><div class="ttname"><a href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">afio_v2_xxx::algorithm::mapped_span::size_type</a></div><div class="ttdeci">typename section_handle::size_type size_type</div><div class="ttdoc">The size type. </div><div class="ttdef"><b>Definition:</b> mapped_span.hpp:50</div></div>
<div class="ttc" id="namespaceafio__v2__xxx_1_1utils_html_a7e0604f2e7f98b94ddb09989184968f5"><div class="ttname"><a href="namespaceafio__v2__xxx_1_1utils.html#a7e0604f2e7f98b94ddb09989184968f5">afio_v2_xxx::utils::round_down_to_page_size</a></div><div class="ttdeci">T round_down_to_page_size(T i) noexcept</div><div class="ttdoc">Round a value to its next lowest page size multiple. </div><div class="ttdef"><b>Definition:</b> utils.hpp:51</div></div>
</div><!-- fragment -->
@@ -296,7 +296,7 @@ template&lt;class T &gt; </div>
</table>
</dd>
</dl>
-<div class="fragment"><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; : span&lt;T&gt;(<span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(mfh.address() + byteoffset), (<a class="code" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">length</a> == (<a class="code" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a>) -1) ? (mfh.length().value() / <span class="keyword">sizeof</span>(T)) : <a class="code" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">length</a>) <span class="comment">// NOLINT</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="ttc" id="namespaceafio__v2__xxx_html_afe66c5875c48c8bd172901a1159ccbdc"><div class="ttname"><a href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">afio_v2_xxx::length</a></div><div class="ttdeci">result&lt; file_handle::extent_type &gt; length(const file_handle &amp;self) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:360</div></div>
+<div class="fragment"><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; : span&lt;T&gt;(<span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(mfh.address() + byteoffset), (<a class="code" href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">length</a> == (<a class="code" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">size_type</a>) -1) ? (mfh.maximum_extent().value() / <span class="keyword">sizeof</span>(T)) : <a class="code" href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">length</a>) <span class="comment">// NOLINT</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="ttc" id="namespaceafio__v2__xxx_html_afc6d4594196e16ac67b25d91e48d09ee"><div class="ttname"><a href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">afio_v2_xxx::length</a></div><div class="ttdeci">result&lt; section_handle::extent_type &gt; length(const section_handle &amp;self) noexcept</div><div class="ttdoc">Return the current maximum permitted extent of the memory section. </div><div class="ttdef"><b>Definition:</b> map_handle.hpp:585</div></div>
<div class="ttc" id="classafio__v2__xxx_1_1algorithm_1_1mapped__span_html_aa33d0ce0be15b0738c6b36341843ccb5"><div class="ttname"><a href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">afio_v2_xxx::algorithm::mapped_span::size_type</a></div><div class="ttdeci">typename section_handle::size_type size_type</div><div class="ttdoc">The size type. </div><div class="ttdef"><b>Definition:</b> mapped_span.hpp:50</div></div>
</div><!-- fragment -->
</div>
diff --git a/classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html b/classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html
index f53025ca..38b1a9bf 100644
--- a/classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html
+++ b/classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html
@@ -251,10 +251,10 @@ Protected Member Functions</h2></td></tr>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000006">Todo:</a></b></dt><dd>Read from header.last_known_good immediately if possible in order to avoid a duplicate read later </dd></dl>
<p>Implements <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex.html">afio_v2_xxx::algorithm::shared_fs_mutex::shared_fs_mutex</a>.</p>
-<div class="fragment"><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; AFIO_LOG_FUNCTION_CALL(<span class="keyword">this</span>);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; atomic_append_detail::lock_request lock_request;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">if</span>(out.entities.size() &gt; <span class="keyword">sizeof</span>(lock_request.entities) / <span class="keyword">sizeof</span>(lock_request.entities[0]))</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">return</span> std::errc::argument_list_too_long;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; std::chrono::steady_clock::time_point began_steady;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; std::chrono::system_clock::time_point end_utc;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">if</span>(d)</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; {</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">if</span>((d).steady)</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; began_steady = std::chrono::steady_clock::now();</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; {</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; end_utc = (d).to_time_point();</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// Fire this if an error occurs</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">auto</span> disableunlock = undoer([&amp;] { out.release(); });</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; <span class="comment">// Write my lock request immediately</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; memset(&amp;lock_request, 0, <span class="keyword">sizeof</span>(lock_request));</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; lock_request.unique_id = _unique_id;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">auto</span> count = std::chrono::system_clock::now() - std::chrono::system_clock::from_time_t(_header.time_offset);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; lock_request.us_count = std::chrono::duration_cast&lt;std::chrono::microseconds&gt;(count).count();</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; lock_request.items = out.entities.size();</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; memcpy(lock_request.entities, out.entities.data(), <span class="keyword">sizeof</span>(lock_request.entities[0]) * out.entities.size());</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">if</span>(!_skip_hashing)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; lock_request.hash = QUICKCPPLIB_NAMESPACE::algorithm::hash::fast_hash::hash((reinterpret_cast&lt;char *&gt;(&amp;lock_request)) + 16, <span class="keyword">sizeof</span>(lock_request) - 16);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="comment">// My lock request will be the file&#39;s current length or higher</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; OUTCOME_TRY(my_lock_request_offset, _h.<a class="code" href="classafio__v2__xxx_1_1file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5">length</a>());</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; OUTCOME_TRYV(_h.<a class="code" href="classafio__v2__xxx_1_1handle.html#af1610ec7fb0a41f039e3e17e0dc467ab">set_append_only</a>(<span class="keyword">true</span>));</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keyword">auto</span> undo = undoer([<span class="keyword">this</span>] { (void) _h.<a class="code" href="classafio__v2__xxx_1_1handle.html#af1610ec7fb0a41f039e3e17e0dc467ab">set_append_only</a>(<span class="keyword">false</span>); });</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; file_handle::extent_guard append_guard;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">if</span>(_nfs_compatibility)</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keyword">auto</span> lastbyte = <span class="keyword">static_cast&lt;</span>file_handle::extent_type<span class="keyword">&gt;</span>(-1);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// Lock up to the beginning of the shadow lock space</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; lastbyte &amp;= ~(1ULL &lt;&lt; 63U);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; OUTCOME_TRY(append_guard_, _h.<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(my_lock_request_offset, lastbyte, <span class="keyword">true</span>));</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; append_guard = std::move(append_guard_);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; OUTCOME_TRYV(_h.<a class="code" href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">write</a>(0, {{reinterpret_cast&lt;byte *&gt;(&amp;lock_request), sizeof(lock_request)}}));</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</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; <span class="comment">// Find the record I just wrote</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keyword">alignas</span>(64) byte _buffer[4096 + 2048]; <span class="comment">// 6Kb cache line aligned buffer</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// Read onwards from length as reported before I wrote my lock request</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// until I find my lock request. This loop should never actually iterate</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="comment">// except under extreme load conditions.</span><span class="comment"></span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="comment"> //! \todo Read from header.last_known_good immediately if possible in order</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="comment"> //! to avoid a duplicate read later</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="comment"></span> <span class="keywordflow">for</span>(;;)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; file_handle::io_result&lt;file_handle::buffers_type&gt; readoutcome = _h.<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(my_lock_request_offset, {{_buffer, <span class="keyword">sizeof</span>(_buffer)}});</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="comment">// Should never happen :)</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span>(readoutcome.has_error())</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; AFIO_LOG_FATAL(<span class="keyword">this</span>, <span class="stringliteral">&quot;atomic_append::lock() saw an error when searching for just written data&quot;</span>);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; std::terminate();</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">const</span> atomic_append_detail::lock_request *record, *lastrecord;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">for</span>(record = reinterpret_cast&lt;const atomic_append_detail::lock_request *&gt;(readoutcome.value()[0].data), lastrecord = reinterpret_cast&lt;const atomic_append_detail::lock_request *&gt;(readoutcome.value()[0].data + readoutcome.value()[0].len); record &lt; lastrecord &amp;&amp; record-&gt;hash != lock_request.hash; ++record)</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; my_lock_request_offset += <span class="keyword">sizeof</span>(atomic_append_detail::lock_request);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">if</span>(record-&gt;hash == lock_request.hash)</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; {</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="comment">// extent_guard is now valid and will be unlocked on error</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; out.hint = my_lock_request_offset;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; disableunlock.dismiss();</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="comment">// Lock my request for writing so others can sleep on me</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; file_handle::extent_guard my_request_guard;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">if</span>(!spin_not_sleep)</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="keyword">auto</span> lock_offset = my_lock_request_offset;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="comment">// Set the top bit to use the shadow lock space on Windows</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; lock_offset |= (1ULL &lt;&lt; 63U);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; OUTCOME_TRY(my_request_guard_, _h.<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(lock_offset, <span class="keyword">sizeof</span>(lock_request), <span class="keyword">true</span>));</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; my_request_guard = std::move(my_request_guard_);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="comment">// Read every record preceding mine until header.first_known_good inclusive</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">auto</span> record_offset = my_lock_request_offset - <span class="keyword">sizeof</span>(atomic_append_detail::lock_request);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">do</span></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; reload:</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="comment">// Refresh the header and load a snapshot of everything between record_offset</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="comment">// and first_known_good or -6Kb, whichever the sooner</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; OUTCOME_TRYV(_read_header());</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="comment">// If there are no preceding records, we&#39;re done</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">if</span>(record_offset &lt; _header.first_known_good)</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; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">auto</span> start_offset = record_offset;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">if</span>(start_offset &gt; <span class="keyword">sizeof</span>(_buffer) - <span class="keyword">sizeof</span>(atomic_append_detail::lock_request))</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; {</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; start_offset -= <span class="keyword">sizeof</span>(_buffer) - <span class="keyword">sizeof</span>(atomic_append_detail::lock_request);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">else</span></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; start_offset = <span class="keyword">sizeof</span>(atomic_append_detail::lock_request);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span>(start_offset &lt; _header.first_known_good)</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; start_offset = _header.first_known_good;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; assert(record_offset &gt;= start_offset);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; assert(record_offset - start_offset &lt;= <span class="keyword">sizeof</span>(_buffer));</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; OUTCOME_TRY(batchread, _h.<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(start_offset, {{_buffer, (size_t)(record_offset - start_offset) + sizeof(atomic_append_detail::lock_request)}}));</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; assert(batchread[0].len == record_offset - start_offset + <span class="keyword">sizeof</span>(atomic_append_detail::lock_request));</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keyword">const</span> atomic_append_detail::lock_request *record = <span class="keyword">reinterpret_cast&lt;</span>atomic_append_detail::lock_request *<span class="keyword">&gt;</span>(batchread[0].data + batchread[0].len - <span class="keyword">sizeof</span>(atomic_append_detail::lock_request));</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">const</span> atomic_append_detail::lock_request *firstrecord = <span class="keyword">reinterpret_cast&lt;</span>atomic_append_detail::lock_request *<span class="keyword">&gt;</span>(batchread[0].data);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="comment">// Skip all completed lock requests or not mentioning any of my entities</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">for</span>(; record &gt;= firstrecord; record_offset -= <span class="keyword">sizeof</span>(atomic_append_detail::lock_request), --record)</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; {</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="comment">// If a completed lock request, skip</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">if</span>(!record-&gt;hash &amp;&amp; (record-&gt;unique_id == 0u))</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="comment">// If record hash doesn&#39;t match contents it&#39;s a torn read, reload</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">if</span>(!_skip_hashing)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">if</span>(record-&gt;hash != QUICKCPPLIB_NAMESPACE::algorithm::hash::fast_hash::hash((reinterpret_cast&lt;const char *&gt;(record)) + 16, <span class="keyword">sizeof</span>(atomic_append_detail::lock_request) - 16))</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; {</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">goto</span> reload;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; }</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="comment">// Does this record lock anything I am locking?</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span> &amp;entity : out.entities)</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> n = 0; n &lt; record-&gt;items; n++)</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; {</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">if</span>(record-&gt;entities[n].value == entity.value)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; {</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="comment">// Is the lock I want exclusive or the lock he wants exclusive?</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// If so, need to block</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">if</span>((record-&gt;entities[n].exclusive != 0u) || (entity.exclusive != 0u))</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; {</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">goto</span> beginwait;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</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="l00401"></a><span class="lineno"> 401</span>&#160; }</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="comment">// None of this batch of records has anything to do with my request, so keep going</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; beginwait:</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">// Sleep until this record is freed using a shared lock</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="comment">// on the record in our way. Note there is a race here</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="comment">// between when the lock requester writes the lock</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="comment">// request and when he takes an exclusive lock on it,</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="comment">// so if our shared lock succeeds we need to immediately</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="comment">// unlock and retry based on the data.</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; std::this_thread::yield();</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">if</span>(!spin_not_sleep)</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; deadline nd;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">if</span>(d)</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">if</span>((d).steady)</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; {</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; std::chrono::nanoseconds ns = std::chrono::duration_cast&lt;std::chrono::nanoseconds&gt;((began_steady + std::chrono::nanoseconds((d).nsecs)) - std::chrono::steady_clock::now());</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">if</span>(ns.count() &lt; 0)</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; (nd).nsecs = 0;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; }</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; {</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; (nd).nsecs = ns.count();</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="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; (nd) = (d);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keyword">auto</span> lock_offset = record_offset;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// Set the top bit to use the shadow lock space on Windows</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; lock_offset |= (1ULL &lt;&lt; 63U);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; OUTCOME_TRYV(_h.<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(lock_offset, <span class="keyword">sizeof</span>(*record), <span class="keyword">false</span>, nd));</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="comment">// Make sure we haven&#39;t timed out during this wait</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">if</span>(d)</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordflow">if</span>((d).steady)</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; {</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keywordflow">if</span>(std::chrono::steady_clock::now() &gt;= (began_steady + std::chrono::nanoseconds((d).nsecs)))</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">return</span> std::errc::timed_out;</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="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">if</span>(std::chrono::system_clock::now() &gt;= end_utc)</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordflow">return</span> std::errc::timed_out;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; } <span class="keywordflow">while</span>(record_offset &gt;= _header.first_known_good);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">return</span> success();</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_aefac4710e5617264347f437b04732c01"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">afio_v2_xxx::io_handle::write</a></div><div class="ttdeci">virtual io_result&lt; const_buffers_type &gt; write(io_request&lt; const_buffers_type &gt; reqs, deadline d=deadline()) noexcept</div><div class="ttdoc">Write data to the open handle. </div></div>
+<div class="fragment"><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; AFIO_LOG_FUNCTION_CALL(<span class="keyword">this</span>);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; atomic_append_detail::lock_request lock_request;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">if</span>(out.entities.size() &gt; <span class="keyword">sizeof</span>(lock_request.entities) / <span class="keyword">sizeof</span>(lock_request.entities[0]))</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">return</span> std::errc::argument_list_too_long;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; std::chrono::steady_clock::time_point began_steady;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; std::chrono::system_clock::time_point end_utc;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">if</span>(d)</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; {</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">if</span>((d).steady)</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; began_steady = std::chrono::steady_clock::now();</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; {</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; end_utc = (d).to_time_point();</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// Fire this if an error occurs</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">auto</span> disableunlock = undoer([&amp;] { out.release(); });</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; <span class="comment">// Write my lock request immediately</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; memset(&amp;lock_request, 0, <span class="keyword">sizeof</span>(lock_request));</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; lock_request.unique_id = _unique_id;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">auto</span> count = std::chrono::system_clock::now() - std::chrono::system_clock::from_time_t(_header.time_offset);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; lock_request.us_count = std::chrono::duration_cast&lt;std::chrono::microseconds&gt;(count).count();</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; lock_request.items = out.entities.size();</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; memcpy(lock_request.entities, out.entities.data(), <span class="keyword">sizeof</span>(lock_request.entities[0]) * out.entities.size());</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">if</span>(!_skip_hashing)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; lock_request.hash = QUICKCPPLIB_NAMESPACE::algorithm::hash::fast_hash::hash((reinterpret_cast&lt;char *&gt;(&amp;lock_request)) + 16, <span class="keyword">sizeof</span>(lock_request) - 16);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="comment">// My lock request will be the file&#39;s current length or higher</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; OUTCOME_TRY(my_lock_request_offset, _h.<a class="code" href="classafio__v2__xxx_1_1file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f">maximum_extent</a>());</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; OUTCOME_TRYV(_h.<a class="code" href="classafio__v2__xxx_1_1handle.html#af1610ec7fb0a41f039e3e17e0dc467ab">set_append_only</a>(<span class="keyword">true</span>));</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keyword">auto</span> undo = undoer([<span class="keyword">this</span>] { (void) _h.<a class="code" href="classafio__v2__xxx_1_1handle.html#af1610ec7fb0a41f039e3e17e0dc467ab">set_append_only</a>(<span class="keyword">false</span>); });</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; file_handle::extent_guard append_guard;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">if</span>(_nfs_compatibility)</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keyword">auto</span> lastbyte = <span class="keyword">static_cast&lt;</span>file_handle::extent_type<span class="keyword">&gt;</span>(-1);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// Lock up to the beginning of the shadow lock space</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; lastbyte &amp;= ~(1ULL &lt;&lt; 63U);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; OUTCOME_TRY(append_guard_, _h.<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(my_lock_request_offset, lastbyte, <span class="keyword">true</span>));</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; append_guard = std::move(append_guard_);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; OUTCOME_TRYV(_h.<a class="code" href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">write</a>(0, {{reinterpret_cast&lt;byte *&gt;(&amp;lock_request), sizeof(lock_request)}}));</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</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; <span class="comment">// Find the record I just wrote</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keyword">alignas</span>(64) byte _buffer[4096 + 2048]; <span class="comment">// 6Kb cache line aligned buffer</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// Read onwards from length as reported before I wrote my lock request</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// until I find my lock request. This loop should never actually iterate</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="comment">// except under extreme load conditions.</span><span class="comment"></span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="comment"> //! \todo Read from header.last_known_good immediately if possible in order</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="comment"> //! to avoid a duplicate read later</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="comment"></span> <span class="keywordflow">for</span>(;;)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; file_handle::io_result&lt;file_handle::buffers_type&gt; readoutcome = _h.<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(my_lock_request_offset, {{_buffer, <span class="keyword">sizeof</span>(_buffer)}});</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="comment">// Should never happen :)</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span>(readoutcome.has_error())</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; AFIO_LOG_FATAL(<span class="keyword">this</span>, <span class="stringliteral">&quot;atomic_append::lock() saw an error when searching for just written data&quot;</span>);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; std::terminate();</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">const</span> atomic_append_detail::lock_request *record, *lastrecord;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">for</span>(record = reinterpret_cast&lt;const atomic_append_detail::lock_request *&gt;(readoutcome.value()[0].data), lastrecord = reinterpret_cast&lt;const atomic_append_detail::lock_request *&gt;(readoutcome.value()[0].data + readoutcome.value()[0].len); record &lt; lastrecord &amp;&amp; record-&gt;hash != lock_request.hash; ++record)</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; my_lock_request_offset += <span class="keyword">sizeof</span>(atomic_append_detail::lock_request);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">if</span>(record-&gt;hash == lock_request.hash)</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; {</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="comment">// extent_guard is now valid and will be unlocked on error</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; out.hint = my_lock_request_offset;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; disableunlock.dismiss();</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="comment">// Lock my request for writing so others can sleep on me</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; file_handle::extent_guard my_request_guard;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">if</span>(!spin_not_sleep)</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="keyword">auto</span> lock_offset = my_lock_request_offset;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="comment">// Set the top bit to use the shadow lock space on Windows</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; lock_offset |= (1ULL &lt;&lt; 63U);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; OUTCOME_TRY(my_request_guard_, _h.<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(lock_offset, <span class="keyword">sizeof</span>(lock_request), <span class="keyword">true</span>));</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; my_request_guard = std::move(my_request_guard_);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="comment">// Read every record preceding mine until header.first_known_good inclusive</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">auto</span> record_offset = my_lock_request_offset - <span class="keyword">sizeof</span>(atomic_append_detail::lock_request);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">do</span></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; reload:</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="comment">// Refresh the header and load a snapshot of everything between record_offset</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="comment">// and first_known_good or -6Kb, whichever the sooner</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; OUTCOME_TRYV(_read_header());</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="comment">// If there are no preceding records, we&#39;re done</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">if</span>(record_offset &lt; _header.first_known_good)</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; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">auto</span> start_offset = record_offset;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">if</span>(start_offset &gt; <span class="keyword">sizeof</span>(_buffer) - <span class="keyword">sizeof</span>(atomic_append_detail::lock_request))</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; {</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; start_offset -= <span class="keyword">sizeof</span>(_buffer) - <span class="keyword">sizeof</span>(atomic_append_detail::lock_request);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">else</span></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; start_offset = <span class="keyword">sizeof</span>(atomic_append_detail::lock_request);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span>(start_offset &lt; _header.first_known_good)</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; start_offset = _header.first_known_good;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; assert(record_offset &gt;= start_offset);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; assert(record_offset - start_offset &lt;= <span class="keyword">sizeof</span>(_buffer));</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; OUTCOME_TRY(batchread, _h.<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(start_offset, {{_buffer, (size_t)(record_offset - start_offset) + sizeof(atomic_append_detail::lock_request)}}));</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; assert(batchread[0].len == record_offset - start_offset + <span class="keyword">sizeof</span>(atomic_append_detail::lock_request));</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keyword">const</span> atomic_append_detail::lock_request *record = <span class="keyword">reinterpret_cast&lt;</span>atomic_append_detail::lock_request *<span class="keyword">&gt;</span>(batchread[0].data + batchread[0].len - <span class="keyword">sizeof</span>(atomic_append_detail::lock_request));</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">const</span> atomic_append_detail::lock_request *firstrecord = <span class="keyword">reinterpret_cast&lt;</span>atomic_append_detail::lock_request *<span class="keyword">&gt;</span>(batchread[0].data);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="comment">// Skip all completed lock requests or not mentioning any of my entities</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">for</span>(; record &gt;= firstrecord; record_offset -= <span class="keyword">sizeof</span>(atomic_append_detail::lock_request), --record)</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; {</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="comment">// If a completed lock request, skip</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">if</span>(!record-&gt;hash &amp;&amp; (record-&gt;unique_id == 0u))</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="comment">// If record hash doesn&#39;t match contents it&#39;s a torn read, reload</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">if</span>(!_skip_hashing)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">if</span>(record-&gt;hash != QUICKCPPLIB_NAMESPACE::algorithm::hash::fast_hash::hash((reinterpret_cast&lt;const char *&gt;(record)) + 16, <span class="keyword">sizeof</span>(atomic_append_detail::lock_request) - 16))</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; {</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">goto</span> reload;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; }</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="comment">// Does this record lock anything I am locking?</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span> &amp;entity : out.entities)</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> n = 0; n &lt; record-&gt;items; n++)</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; {</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">if</span>(record-&gt;entities[n].value == entity.value)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; {</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="comment">// Is the lock I want exclusive or the lock he wants exclusive?</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// If so, need to block</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">if</span>((record-&gt;entities[n].exclusive != 0u) || (entity.exclusive != 0u))</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; {</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">goto</span> beginwait;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</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="l00401"></a><span class="lineno"> 401</span>&#160; }</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="comment">// None of this batch of records has anything to do with my request, so keep going</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; beginwait:</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">// Sleep until this record is freed using a shared lock</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="comment">// on the record in our way. Note there is a race here</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="comment">// between when the lock requester writes the lock</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="comment">// request and when he takes an exclusive lock on it,</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="comment">// so if our shared lock succeeds we need to immediately</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="comment">// unlock and retry based on the data.</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; std::this_thread::yield();</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">if</span>(!spin_not_sleep)</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; deadline nd;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">if</span>(d)</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">if</span>((d).steady)</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; {</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; std::chrono::nanoseconds ns = std::chrono::duration_cast&lt;std::chrono::nanoseconds&gt;((began_steady + std::chrono::nanoseconds((d).nsecs)) - std::chrono::steady_clock::now());</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">if</span>(ns.count() &lt; 0)</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; (nd).nsecs = 0;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; }</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; {</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; (nd).nsecs = ns.count();</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="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; (nd) = (d);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keyword">auto</span> lock_offset = record_offset;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="comment">// Set the top bit to use the shadow lock space on Windows</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; lock_offset |= (1ULL &lt;&lt; 63U);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; OUTCOME_TRYV(_h.<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(lock_offset, <span class="keyword">sizeof</span>(*record), <span class="keyword">false</span>, nd));</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="comment">// Make sure we haven&#39;t timed out during this wait</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">if</span>(d)</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordflow">if</span>((d).steady)</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; {</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keywordflow">if</span>(std::chrono::steady_clock::now() &gt;= (began_steady + std::chrono::nanoseconds((d).nsecs)))</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">return</span> std::errc::timed_out;</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="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">if</span>(std::chrono::system_clock::now() &gt;= end_utc)</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordflow">return</span> std::errc::timed_out;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; } <span class="keywordflow">while</span>(record_offset &gt;= _header.first_known_good);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">return</span> success();</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_aefac4710e5617264347f437b04732c01"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">afio_v2_xxx::io_handle::write</a></div><div class="ttdeci">virtual io_result&lt; const_buffers_type &gt; write(io_request&lt; const_buffers_type &gt; reqs, deadline d=deadline()) noexcept</div><div class="ttdoc">Write data to the open handle. </div></div>
<div class="ttc" id="classafio__v2__xxx_1_1handle_html_af1610ec7fb0a41f039e3e17e0dc467ab"><div class="ttname"><a href="classafio__v2__xxx_1_1handle.html#af1610ec7fb0a41f039e3e17e0dc467ab">afio_v2_xxx::handle::set_append_only</a></div><div class="ttdeci">virtual result&lt; void &gt; set_append_only(bool enable) noexcept</div></div>
-<div class="ttc" id="classafio__v2__xxx_1_1file__handle_html_a2083c37ffc746ec28f9e4d6b094d3ba5"><div class="ttname"><a href="classafio__v2__xxx_1_1file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5">afio_v2_xxx::file_handle::length</a></div><div class="ttdeci">virtual result&lt; extent_type &gt; length() const noexcept</div></div>
<div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a71d7636f40607829cacc2c974c4a2a28"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">afio_v2_xxx::io_handle::read</a></div><div class="ttdeci">virtual io_result&lt; buffers_type &gt; read(io_request&lt; buffers_type &gt; reqs, deadline d=deadline()) noexcept</div><div class="ttdoc">Read data from the open handle. </div></div>
+<div class="ttc" id="classafio__v2__xxx_1_1file__handle_html_a0ada5a2b1d45c41a71bc5c66eb921c9f"><div class="ttname"><a href="classafio__v2__xxx_1_1file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f">afio_v2_xxx::file_handle::maximum_extent</a></div><div class="ttdeci">virtual result&lt; extent_type &gt; maximum_extent() const noexcept</div></div>
<div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a88689b15e6e8b6ce1f945737dee4369e"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">afio_v2_xxx::io_handle::lock</a></div><div class="ttdeci">virtual result&lt; extent_guard &gt; lock(extent_type offset, extent_type bytes, bool exclusive=true, deadline d=deadline()) noexcept</div><div class="ttdoc">Tries to lock the range of bytes specified for shared or exclusive access. Be aware this passes throu...</div></div>
</div><!-- fragment -->
</div>
diff --git a/classafio__v2__xxx_1_1async__file__handle-members.html b/classafio__v2__xxx_1_1async__file__handle-members.html
index 49876b60..bbe88e10 100644
--- a/classafio__v2__xxx_1_1async__file__handle-members.html
+++ b/classafio__v2__xxx_1_1async__file__handle-members.html
@@ -169,11 +169,11 @@ $(document).ready(function(){initNavTree('classafio__v2__xxx_1_1async__file__han
<tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html#a4194a05dd9694d2c47d5a45f925db1d7">is_valid</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html#a5be9a526bc5c1be758b0cfc36a262f6e">is_writable</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html#a00f42a44de714feb3ed86dd0a175e69c">kernel_caching</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5">length</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1file__handle.html">afio_v2_xxx::file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(extent_type offset, extent_type bytes, bool exclusive=true, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897">lock</a>(io_request&lt; buffers_type &gt; reqs, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#aeabd245b6edcfb57779b29c6f2ea9737">lock</a>(io_request&lt; const_buffers_type &gt; reqs, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a4d9cbbb7aae98704c6ad97de080c4210">max_buffers</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(extent_type offset, extent_type bytes, bool exclusive=true, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897">lock</a>(io_request&lt; buffers_type &gt; reqs, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#aeabd245b6edcfb57779b29c6f2ea9737">lock</a>(io_request&lt; const_buffers_type &gt; reqs, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a4d9cbbb7aae98704c6ad97de080c4210">max_buffers</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f">maximum_extent</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1file__handle.html">afio_v2_xxx::file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>mode</b> typedef (defined in <a class="el" href="classafio__v2__xxx_1_1async__file__handle.html">afio_v2_xxx::async_file_handle</a>)</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1async__file__handle.html">afio_v2_xxx::async_file_handle</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html#a875440f1b368472f1840c70c266f3a48">native_handle</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1async__file__handle.html#a8bac7dde456d65b956f324d981461dd2">operator=</a>(async_file_handle &amp;&amp;o) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1async__file__handle.html">afio_v2_xxx::async_file_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
diff --git a/classafio__v2__xxx_1_1async__file__handle.html b/classafio__v2__xxx_1_1async__file__handle.html
index 885f994e..375cb393 100644
--- a/classafio__v2__xxx_1_1async__file__handle.html
+++ b/classafio__v2__xxx_1_1async__file__handle.html
@@ -270,13 +270,12 @@ virtual result&lt; void &gt;&#160;</td><td class="memItemRight" valign="bottom">
<a class="el" href="classafio__v2__xxx_1_1io__service.html">io_service</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a672324d44ea84ccfb71594c1036628ac">service</a> () const noexcept</td></tr>
<tr class="memdesc:a672324d44ea84ccfb71594c1036628ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">The i/o service this handle is attached to, if any. <br /></td></tr>
<tr class="separator:a672324d44ea84ccfb71594c1036628ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2083c37ffc746ec28f9e4d6b094d3ba5"><td class="memItemLeft" align="right" valign="top">virtual result&lt; extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5">length</a> () const noexcept</td></tr>
-<tr class="separator:a2083c37ffc746ec28f9e4d6b094d3ba5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ada5a2b1d45c41a71bc5c66eb921c9f"><td class="memItemLeft" align="right" valign="top">virtual result&lt; extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f">maximum_extent</a> () const noexcept</td></tr>
+<tr class="separator:a0ada5a2b1d45c41a71bc5c66eb921c9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45873fd0b1ab27f936f046ed14124afd"><td class="memItemLeft" align="right" valign="top">virtual result&lt; extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a45873fd0b1ab27f936f046ed14124afd">truncate</a> (extent_type newsize) noexcept</td></tr>
<tr class="separator:a45873fd0b1ab27f936f046ed14124afd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a03d1774e3ad8678fb4aac4ced57beeef"><td class="memItemLeft" align="right" valign="top"><a id="a03d1774e3ad8678fb4aac4ced57beeef"></a>
-virtual result&lt; std::vector&lt; std::pair&lt; extent_type, extent_type &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a03d1774e3ad8678fb4aac4ced57beeef">extents</a> () const noexcept</td></tr>
-<tr class="memdesc:a03d1774e3ad8678fb4aac4ced57beeef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a list of currently valid extents for this open file. WARNING: racy! <br /></td></tr>
+<tr class="memitem:a03d1774e3ad8678fb4aac4ced57beeef"><td class="memItemLeft" align="right" valign="top">virtual result&lt; std::vector&lt; std::pair&lt; extent_type, extent_type &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a03d1774e3ad8678fb4aac4ced57beeef">extents</a> () const noexcept</td></tr>
+<tr class="memdesc:a03d1774e3ad8678fb4aac4ced57beeef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a list of currently valid extents for this open file. WARNING: racy! <a href="#a03d1774e3ad8678fb4aac4ced57beeef">More...</a><br /></td></tr>
<tr class="separator:a03d1774e3ad8678fb4aac4ced57beeef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a649aa39b0d4b60a05d4aab4be569dcb6"><td class="memItemLeft" align="right" valign="top">virtual result&lt; extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a649aa39b0d4b60a05d4aab4be569dcb6">zero</a> (extent_type offset, extent_type bytes, <a class="el" href="structafio__v2__xxx_1_1deadline.html">deadline</a> d=<a class="el" href="structafio__v2__xxx_1_1deadline.html">deadline</a>()) noexcept</td></tr>
<tr class="memdesc:a649aa39b0d4b60a05d4aab4be569dcb6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Efficiently zero, and possibly deallocate, data on storage. <a href="#a649aa39b0d4b60a05d4aab4be569dcb6">More...</a><br /></td></tr>
@@ -1330,6 +1329,34 @@ For portability, you can only assume that barriers write order for a single hand
</div>
</div>
+<a id="a03d1774e3ad8678fb4aac4ced57beeef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a03d1774e3ad8678fb4aac4ced57beeef">&#9670;&nbsp;</a></span>extents()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual result&lt;std::vector&lt;std::pair&lt;extent_type, extent_type&gt; &gt; &gt; afio_v2_xxx::file_handle::extents </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span><span class="mlabel">noexcept</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns a list of currently valid extents for this open file. WARNING: racy! </p>
+<dl class="section return"><dt>Returns</dt><dd>A vector of pairs of extent offset + extent length representing the valid extents in this file. Filing systems which do not support extents return a single extent matching the length of the file rather than returning an error. </dd></dl>
+
+</div>
+</div>
<a id="accb36f2bfd98393dc868653798c02d34"></a>
<h2 class="memtitle"><span class="permalink"><a href="#accb36f2bfd98393dc868653798c02d34">&#9670;&nbsp;</a></span>file()</h2>
@@ -1402,35 +1429,6 @@ For portability, you can only assume that barriers write order for a single hand
</div>
</div>
-<a id="a2083c37ffc746ec28f9e4d6b094d3ba5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2083c37ffc746ec28f9e4d6b094d3ba5">&#9670;&nbsp;</a></span>length()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual result&lt;extent_type&gt; afio_v2_xxx::file_handle::length </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span><span class="mlabel">noexcept</span><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-<p>Return the current maximum permitted extent of the file.</p>
-<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX fstat() or GetFileInformationByHandleEx() can return. </dd></dl>
-
-<p>Reimplemented in <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a6e92c497a0070314630c6dbf6f76b933">afio_v2_xxx::mapped_file_handle</a>.</p>
-
-</div>
-</div>
<a id="a88689b15e6e8b6ce1f945737dee4369e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a88689b15e6e8b6ce1f945737dee4369e">&#9670;&nbsp;</a></span>lock() <span class="overload">[1/3]</span></h2>
@@ -1605,6 +1603,35 @@ For portability, you can only assume that barriers write order for a single hand
</div>
</div>
+<a id="a0ada5a2b1d45c41a71bc5c66eb921c9f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ada5a2b1d45c41a71bc5c66eb921c9f">&#9670;&nbsp;</a></span>maximum_extent()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual result&lt;extent_type&gt; afio_v2_xxx::file_handle::maximum_extent </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span><span class="mlabel">noexcept</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Return the current maximum permitted extent of the file.</p>
+<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX fstat() or GetFileInformationByHandleEx() can return. </dd></dl>
+
+<p>Reimplemented in <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a96936484028ac57f6150560b55b26da7">afio_v2_xxx::mapped_file_handle</a>.</p>
+
+</div>
+</div>
<a id="aaacc27a62ce0859506d7443f0d0e7adf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaacc27a62ce0859506d7443f0d0e7adf">&#9670;&nbsp;</a></span>parent_path_handle()</h2>
diff --git a/classafio__v2__xxx_1_1async__file__handle.js b/classafio__v2__xxx_1_1async__file__handle.js
index 36073f3e..a9edf73c 100644
--- a/classafio__v2__xxx_1_1async__file__handle.js
+++ b/classafio__v2__xxx_1_1async__file__handle.js
@@ -59,11 +59,11 @@ var classafio__v2__xxx_1_1async__file__handle =
[ "is_valid", "classafio__v2__xxx_1_1async__file__handle.html#a4194a05dd9694d2c47d5a45f925db1d7", null ],
[ "is_writable", "classafio__v2__xxx_1_1async__file__handle.html#a5be9a526bc5c1be758b0cfc36a262f6e", null ],
[ "kernel_caching", "classafio__v2__xxx_1_1async__file__handle.html#a00f42a44de714feb3ed86dd0a175e69c", null ],
- [ "length", "classafio__v2__xxx_1_1async__file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5", null ],
[ "lock", "classafio__v2__xxx_1_1async__file__handle.html#a88689b15e6e8b6ce1f945737dee4369e", null ],
[ "lock", "classafio__v2__xxx_1_1async__file__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897", null ],
[ "lock", "classafio__v2__xxx_1_1async__file__handle.html#aeabd245b6edcfb57779b29c6f2ea9737", null ],
[ "max_buffers", "classafio__v2__xxx_1_1async__file__handle.html#a4d9cbbb7aae98704c6ad97de080c4210", null ],
+ [ "maximum_extent", "classafio__v2__xxx_1_1async__file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f", null ],
[ "native_handle", "classafio__v2__xxx_1_1async__file__handle.html#a875440f1b368472f1840c70c266f3a48", null ],
[ "operator=", "classafio__v2__xxx_1_1async__file__handle.html#a8bac7dde456d65b956f324d981461dd2", null ],
[ "operator=", "classafio__v2__xxx_1_1async__file__handle.html#a155ccc6e3386f21bda7280fcbee35a44", null ],
diff --git a/classafio__v2__xxx_1_1file__handle-members.html b/classafio__v2__xxx_1_1file__handle-members.html
index be568eaa..b45f4c25 100644
--- a/classafio__v2__xxx_1_1file__handle-members.html
+++ b/classafio__v2__xxx_1_1file__handle-members.html
@@ -149,11 +149,11 @@ $(document).ready(function(){initNavTree('classafio__v2__xxx_1_1file__handle.htm
<tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html#a4194a05dd9694d2c47d5a45f925db1d7">is_valid</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html#a5be9a526bc5c1be758b0cfc36a262f6e">is_writable</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html#a00f42a44de714feb3ed86dd0a175e69c">kernel_caching</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5">length</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1file__handle.html">afio_v2_xxx::file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(extent_type offset, extent_type bytes, bool exclusive=true, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897">lock</a>(io_request&lt; buffers_type &gt; reqs, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#aeabd245b6edcfb57779b29c6f2ea9737">lock</a>(io_request&lt; const_buffers_type &gt; reqs, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a4d9cbbb7aae98704c6ad97de080c4210">max_buffers</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(extent_type offset, extent_type bytes, bool exclusive=true, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897">lock</a>(io_request&lt; buffers_type &gt; reqs, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#aeabd245b6edcfb57779b29c6f2ea9737">lock</a>(io_request&lt; const_buffers_type &gt; reqs, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a4d9cbbb7aae98704c6ad97de080c4210">max_buffers</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f">maximum_extent</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1file__handle.html">afio_v2_xxx::file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>mode</b> typedef (defined in <a class="el" href="classafio__v2__xxx_1_1file__handle.html">afio_v2_xxx::file_handle</a>)</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1file__handle.html">afio_v2_xxx::file_handle</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html#a875440f1b368472f1840c70c266f3a48">native_handle</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a8e2c8f7c0b75acc4bdf6456da836c880">operator=</a>(const file_handle &amp;)=delete</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1file__handle.html">afio_v2_xxx::file_handle</a></td><td class="entry"></td></tr>
diff --git a/classafio__v2__xxx_1_1file__handle.html b/classafio__v2__xxx_1_1file__handle.html
index b30ebbe2..744e7689 100644
--- a/classafio__v2__xxx_1_1file__handle.html
+++ b/classafio__v2__xxx_1_1file__handle.html
@@ -214,13 +214,12 @@ virtual <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1io__result.html
<a class="el" href="classafio__v2__xxx_1_1io__service.html">io_service</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a672324d44ea84ccfb71594c1036628ac">service</a> () const noexcept</td></tr>
<tr class="memdesc:a672324d44ea84ccfb71594c1036628ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">The i/o service this handle is attached to, if any. <br /></td></tr>
<tr class="separator:a672324d44ea84ccfb71594c1036628ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2083c37ffc746ec28f9e4d6b094d3ba5"><td class="memItemLeft" align="right" valign="top">virtual result&lt; extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5">length</a> () const noexcept</td></tr>
-<tr class="separator:a2083c37ffc746ec28f9e4d6b094d3ba5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ada5a2b1d45c41a71bc5c66eb921c9f"><td class="memItemLeft" align="right" valign="top">virtual result&lt; extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f">maximum_extent</a> () const noexcept</td></tr>
+<tr class="separator:a0ada5a2b1d45c41a71bc5c66eb921c9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45873fd0b1ab27f936f046ed14124afd"><td class="memItemLeft" align="right" valign="top">virtual result&lt; extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a45873fd0b1ab27f936f046ed14124afd">truncate</a> (extent_type newsize) noexcept</td></tr>
<tr class="separator:a45873fd0b1ab27f936f046ed14124afd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a03d1774e3ad8678fb4aac4ced57beeef"><td class="memItemLeft" align="right" valign="top"><a id="a03d1774e3ad8678fb4aac4ced57beeef"></a>
-virtual result&lt; std::vector&lt; std::pair&lt; extent_type, extent_type &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a03d1774e3ad8678fb4aac4ced57beeef">extents</a> () const noexcept</td></tr>
-<tr class="memdesc:a03d1774e3ad8678fb4aac4ced57beeef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a list of currently valid extents for this open file. WARNING: racy! <br /></td></tr>
+<tr class="memitem:a03d1774e3ad8678fb4aac4ced57beeef"><td class="memItemLeft" align="right" valign="top">virtual result&lt; std::vector&lt; std::pair&lt; extent_type, extent_type &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a03d1774e3ad8678fb4aac4ced57beeef">extents</a> () const noexcept</td></tr>
+<tr class="memdesc:a03d1774e3ad8678fb4aac4ced57beeef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a list of currently valid extents for this open file. WARNING: racy! <a href="#a03d1774e3ad8678fb4aac4ced57beeef">More...</a><br /></td></tr>
<tr class="separator:a03d1774e3ad8678fb4aac4ced57beeef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a649aa39b0d4b60a05d4aab4be569dcb6"><td class="memItemLeft" align="right" valign="top">virtual result&lt; extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a649aa39b0d4b60a05d4aab4be569dcb6">zero</a> (extent_type offset, extent_type bytes, <a class="el" href="structafio__v2__xxx_1_1deadline.html">deadline</a> d=<a class="el" href="structafio__v2__xxx_1_1deadline.html">deadline</a>()) noexcept</td></tr>
<tr class="memdesc:a649aa39b0d4b60a05d4aab4be569dcb6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Efficiently zero, and possibly deallocate, data on storage. <a href="#a649aa39b0d4b60a05d4aab4be569dcb6">More...</a><br /></td></tr>
@@ -587,6 +586,34 @@ For portability, you can only assume that barriers write order for a single hand
</div>
</div>
+<a id="a03d1774e3ad8678fb4aac4ced57beeef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a03d1774e3ad8678fb4aac4ced57beeef">&#9670;&nbsp;</a></span>extents()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual result&lt;std::vector&lt;std::pair&lt;extent_type, extent_type&gt; &gt; &gt; afio_v2_xxx::file_handle::extents </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span><span class="mlabel">noexcept</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns a list of currently valid extents for this open file. WARNING: racy! </p>
+<dl class="section return"><dt>Returns</dt><dd>A vector of pairs of extent offset + extent length representing the valid extents in this file. Filing systems which do not support extents return a single extent matching the length of the file rather than returning an error. </dd></dl>
+
+</div>
+</div>
<a id="accb36f2bfd98393dc868653798c02d34"></a>
<h2 class="memtitle"><span class="permalink"><a href="#accb36f2bfd98393dc868653798c02d34">&#9670;&nbsp;</a></span>file()</h2>
@@ -659,35 +686,6 @@ For portability, you can only assume that barriers write order for a single hand
</div>
</div>
-<a id="a2083c37ffc746ec28f9e4d6b094d3ba5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2083c37ffc746ec28f9e4d6b094d3ba5">&#9670;&nbsp;</a></span>length()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual result&lt;extent_type&gt; afio_v2_xxx::file_handle::length </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span><span class="mlabel">noexcept</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-<p>Return the current maximum permitted extent of the file.</p>
-<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX fstat() or GetFileInformationByHandleEx() can return. </dd></dl>
-
-<p>Reimplemented in <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a6e92c497a0070314630c6dbf6f76b933">afio_v2_xxx::mapped_file_handle</a>.</p>
-
-</div>
-</div>
<a id="a88689b15e6e8b6ce1f945737dee4369e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a88689b15e6e8b6ce1f945737dee4369e">&#9670;&nbsp;</a></span>lock() <span class="overload">[1/3]</span></h2>
@@ -862,6 +860,35 @@ For portability, you can only assume that barriers write order for a single hand
</div>
</div>
+<a id="a0ada5a2b1d45c41a71bc5c66eb921c9f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ada5a2b1d45c41a71bc5c66eb921c9f">&#9670;&nbsp;</a></span>maximum_extent()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual result&lt;extent_type&gt; afio_v2_xxx::file_handle::maximum_extent </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span><span class="mlabel">noexcept</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Return the current maximum permitted extent of the file.</p>
+<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX fstat() or GetFileInformationByHandleEx() can return. </dd></dl>
+
+<p>Reimplemented in <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a96936484028ac57f6150560b55b26da7">afio_v2_xxx::mapped_file_handle</a>.</p>
+
+</div>
+</div>
<a id="aaacc27a62ce0859506d7443f0d0e7adf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaacc27a62ce0859506d7443f0d0e7adf">&#9670;&nbsp;</a></span>parent_path_handle()</h2>
diff --git a/classafio__v2__xxx_1_1file__handle.js b/classafio__v2__xxx_1_1file__handle.js
index b41d680a..ce0319c9 100644
--- a/classafio__v2__xxx_1_1file__handle.js
+++ b/classafio__v2__xxx_1_1file__handle.js
@@ -48,11 +48,11 @@ var classafio__v2__xxx_1_1file__handle =
[ "is_valid", "classafio__v2__xxx_1_1file__handle.html#a4194a05dd9694d2c47d5a45f925db1d7", null ],
[ "is_writable", "classafio__v2__xxx_1_1file__handle.html#a5be9a526bc5c1be758b0cfc36a262f6e", null ],
[ "kernel_caching", "classafio__v2__xxx_1_1file__handle.html#a00f42a44de714feb3ed86dd0a175e69c", null ],
- [ "length", "classafio__v2__xxx_1_1file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5", null ],
[ "lock", "classafio__v2__xxx_1_1file__handle.html#a88689b15e6e8b6ce1f945737dee4369e", null ],
[ "lock", "classafio__v2__xxx_1_1file__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897", null ],
[ "lock", "classafio__v2__xxx_1_1file__handle.html#aeabd245b6edcfb57779b29c6f2ea9737", null ],
[ "max_buffers", "classafio__v2__xxx_1_1file__handle.html#a4d9cbbb7aae98704c6ad97de080c4210", null ],
+ [ "maximum_extent", "classafio__v2__xxx_1_1file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f", null ],
[ "native_handle", "classafio__v2__xxx_1_1file__handle.html#a875440f1b368472f1840c70c266f3a48", null ],
[ "operator=", "classafio__v2__xxx_1_1file__handle.html#a8e2c8f7c0b75acc4bdf6456da836c880", null ],
[ "operator=", "classafio__v2__xxx_1_1file__handle.html#a03d04933669de227c1ee5af9d75175ce", null ],
diff --git a/classafio__v2__xxx_1_1handle.html b/classafio__v2__xxx_1_1handle.html
index 1ba6a9b4..045b02d9 100644
--- a/classafio__v2__xxx_1_1handle.html
+++ b/classafio__v2__xxx_1_1handle.html
@@ -381,7 +381,7 @@ std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operato
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a45ff5c1c5662623d99156870dfeee0a7a244f58cf07c35fd48d7524b289551e5c"></a>truncate&#160;</td><td class="fielddoc"><p>Atomically truncate on open, leaving creation date unmodified. </p>
</td></tr>
</table>
-<div class="fragment"><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; : <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; open_existing = 0,</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; only_if_not_exist,</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; if_needed,</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="namespaceafio__v2__xxx.html#a84d22c966fcabe50de30ad8cf26c7241">truncate</a> <span class="comment">//!&lt; Atomically truncate on open, leaving creation date unmodified.</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"></span> <span class="comment">// NOTE: IF UPDATING THIS UPDATE THE std::ostream PRINTER BELOW!!!</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; };</div><div class="ttc" id="namespaceafio__v2__xxx_html_a84d22c966fcabe50de30ad8cf26c7241"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a84d22c966fcabe50de30ad8cf26c7241">afio_v2_xxx::truncate</a></div><div class="ttdeci">result&lt; file_handle::extent_type &gt; truncate(file_handle &amp;self, file_handle::extent_type newsize) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:373</div></div>
+<div class="fragment"><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; : <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; open_existing = 0,</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; only_if_not_exist,</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; if_needed,</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="namespaceafio__v2__xxx.html#a84d22c966fcabe50de30ad8cf26c7241">truncate</a> <span class="comment">//!&lt; Atomically truncate on open, leaving creation date unmodified.</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"></span> <span class="comment">// NOTE: IF UPDATING THIS UPDATE THE std::ostream PRINTER BELOW!!!</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; };</div><div class="ttc" id="namespaceafio__v2__xxx_html_a84d22c966fcabe50de30ad8cf26c7241"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a84d22c966fcabe50de30ad8cf26c7241">afio_v2_xxx::truncate</a></div><div class="ttdeci">result&lt; file_handle::extent_type &gt; truncate(file_handle &amp;self, file_handle::extent_type newsize) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:378</div></div>
</div><!-- fragment -->
</div>
</div>
diff --git a/classafio__v2__xxx_1_1mapped__file__handle-members.html b/classafio__v2__xxx_1_1mapped__file__handle-members.html
index e96495e2..0cca457c 100644
--- a/classafio__v2__xxx_1_1mapped__file__handle-members.html
+++ b/classafio__v2__xxx_1_1mapped__file__handle-members.html
@@ -155,23 +155,23 @@ $(document).ready(function(){initNavTree('classafio__v2__xxx_1_1mapped__file__ha
<tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html#a4194a05dd9694d2c47d5a45f925db1d7">is_valid</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html#a5be9a526bc5c1be758b0cfc36a262f6e">is_writable</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html#a00f42a44de714feb3ed86dd0a175e69c">kernel_caching</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a6e92c497a0070314630c6dbf6f76b933">length</a>() const noexcept override</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(extent_type offset, extent_type bytes, bool exclusive=true, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897">lock</a>(io_request&lt; buffers_type &gt; reqs, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#aeabd245b6edcfb57779b29c6f2ea9737">lock</a>(io_request&lt; const_buffers_type &gt; reqs, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#aa7fe74ccbf2fc255897bacaa6c41d319">map</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a767caa74d636805d0986adc59b70060c">map</a>() noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#aedf10997693cf088cf9d67720c4defe1">mapped_file</a>(size_type reservation, const path_handle &amp;base, path_view_type _path, mode _mode=mode::read, creation _creation=creation::open_existing, caching _caching=caching::all, flag flags=flag::none) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
- <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a1bb7ab6d64156732e0e6c26c47fbbf77">mapped_file</a>(const path_handle &amp;base, path_view_type _path, mode _mode=mode::read, creation _creation=creation::open_existing, caching _caching=caching::all, flag flags=flag::none) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a4195d7c5e0a05273ea92d9913189456c">mapped_file_handle</a>()</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a1e5228aa6431b2770752e842bae5123b">mapped_file_handle</a>(mapped_file_handle &amp;&amp;o) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#aa28cc8821b7516afacf6a8d2e19cdf14">mapped_file_handle</a>(const mapped_file_handle &amp;)=delete</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"></td></tr>
- <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#afd7469b8fa7aa8e0a3dd84cb42697621">mapped_file_handle</a>(file_handle &amp;&amp;o) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a12b186b46922da667e4efdd9a63e061c">mapped_file_handle</a>(file_handle &amp;&amp;o, size_type reservation) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
- <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a00875e717f4b2725bb58ecbb5310fc6f">mapped_random_file</a>(size_type reservation, const path_handle &amp;dirpath, mode _mode=mode::write, caching _caching=caching::temporary, flag flags=flag::none) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#ae19c88791bd2e0bca0d22ec576687a83">mapped_temp_file</a>(size_type reservation, path_view_type name=path_view_type(), mode _mode=mode::write, creation _creation=creation::if_needed, caching _caching=caching::temporary, flag flags=flag::unlink_on_close) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
- <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#afb68c9671a7ffb40cef4b6db0000a1a5">mapped_temp_inode</a>(const path_handle &amp;dir=path_discovery::storage_backed_temporary_files_directory(), mode _mode=mode::write, flag flags=flag::none) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a4d9cbbb7aae98704c6ad97de080c4210">max_buffers</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(extent_type offset, extent_type bytes, bool exclusive=true, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897">lock</a>(io_request&lt; buffers_type &gt; reqs, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#aeabd245b6edcfb57779b29c6f2ea9737">lock</a>(io_request&lt; const_buffers_type &gt; reqs, deadline d=deadline()) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#aa7fe74ccbf2fc255897bacaa6c41d319">map</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a767caa74d636805d0986adc59b70060c">map</a>() noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#aedf10997693cf088cf9d67720c4defe1">mapped_file</a>(size_type reservation, const path_handle &amp;base, path_view_type _path, mode _mode=mode::read, creation _creation=creation::open_existing, caching _caching=caching::all, flag flags=flag::none) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a1bb7ab6d64156732e0e6c26c47fbbf77">mapped_file</a>(const path_handle &amp;base, path_view_type _path, mode _mode=mode::read, creation _creation=creation::open_existing, caching _caching=caching::all, flag flags=flag::none) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a4195d7c5e0a05273ea92d9913189456c">mapped_file_handle</a>()</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a1e5228aa6431b2770752e842bae5123b">mapped_file_handle</a>(mapped_file_handle &amp;&amp;o) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#aa28cc8821b7516afacf6a8d2e19cdf14">mapped_file_handle</a>(const mapped_file_handle &amp;)=delete</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#afd7469b8fa7aa8e0a3dd84cb42697621">mapped_file_handle</a>(file_handle &amp;&amp;o) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a12b186b46922da667e4efdd9a63e061c">mapped_file_handle</a>(file_handle &amp;&amp;o, size_type reservation) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a00875e717f4b2725bb58ecbb5310fc6f">mapped_random_file</a>(size_type reservation, const path_handle &amp;dirpath, mode _mode=mode::write, caching _caching=caching::temporary, flag flags=flag::none) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#ae19c88791bd2e0bca0d22ec576687a83">mapped_temp_file</a>(size_type reservation, path_view_type name=path_view_type(), mode _mode=mode::write, creation _creation=creation::if_needed, caching _caching=caching::temporary, flag flags=flag::unlink_on_close) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#afb68c9671a7ffb40cef4b6db0000a1a5">mapped_temp_inode</a>(const path_handle &amp;dir=path_discovery::storage_backed_temporary_files_directory(), mode _mode=mode::write, flag flags=flag::none) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a4d9cbbb7aae98704c6ad97de080c4210">max_buffers</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a96936484028ac57f6150560b55b26da7">maximum_extent</a>() const noexcept override</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>mode</b> typedef (defined in <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a>)</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html#a875440f1b368472f1840c70c266f3a48">native_handle</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#ad8714dac7f0b13ceca5f21ba25e1fa10">operator=</a>(mapped_file_handle &amp;&amp;o) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
@@ -209,7 +209,7 @@ $(document).ready(function(){initNavTree('classafio__v2__xxx_1_1mapped__file__ha
<tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#ae7c763babcbc3c8bc253b1be95578894">temp_inode</a>(const path_handle &amp;dirh=path_discovery::storage_backed_temporary_files_directory(), mode _mode=mode::write, flag flags=flag::none) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1file__handle.html">afio_v2_xxx::file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a64bf34a474aa4de495b38ce314fd377b">truncate</a>(extent_type newsize) noexcept override</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a0a1c4773b9fa7bbd04fee0756075d319">try_lock</a>(extent_type offset, extent_type bytes, bool exclusive=true) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1io__handle.html">afio_v2_xxx::io_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a1dc81182455d0cceb0eb8db1a19df464">underlying_file_length</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a18f9e44522bdab10577af1abd953ad95">underlying_file_maximum_extent</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">afio_v2_xxx::mapped_file_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1fs__handle.html#a5a5244ab1a15053aefe93f2c253db5b3">unique_id</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1fs__handle.html">afio_v2_xxx::fs_handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1fs__handle.html#a0344f48ef10fa2b94199d5566aedd879">unique_id_type</a> typedef</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1fs__handle.html">afio_v2_xxx::fs_handle</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1fs__handle.html#a6860b9626adc4d8e6db3ebb92974c054">unlink</a>(deadline d=std::chrono::seconds(30)) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1fs__handle.html">afio_v2_xxx::fs_handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
diff --git a/classafio__v2__xxx_1_1mapped__file__handle.html b/classafio__v2__xxx_1_1mapped__file__handle.html
index cf9f265f..943ee7db 100644
--- a/classafio__v2__xxx_1_1mapped__file__handle.html
+++ b/classafio__v2__xxx_1_1mapped__file__handle.html
@@ -220,10 +220,10 @@ const <a class="el" href="classafio__v2__xxx_1_1map__handle.html">map_handle</a>
byte *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#ab1d9c370e86dc327e3efad1c71db3cb3">address</a> () const noexcept</td></tr>
<tr class="memdesc:ab1d9c370e86dc327e3efad1c71db3cb3"><td class="mdescLeft">&#160;</td><td class="mdescRight">The address in memory where this mapped file resides. <br /></td></tr>
<tr class="separator:ab1d9c370e86dc327e3efad1c71db3cb3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1dc81182455d0cceb0eb8db1a19df464"><td class="memItemLeft" align="right" valign="top"><a id="a1dc81182455d0cceb0eb8db1a19df464"></a>
-result&lt; extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a1dc81182455d0cceb0eb8db1a19df464">underlying_file_length</a> () const noexcept</td></tr>
-<tr class="memdesc:a1dc81182455d0cceb0eb8db1a19df464"><td class="mdescLeft">&#160;</td><td class="mdescRight">The length of the underlying file. <br /></td></tr>
-<tr class="separator:a1dc81182455d0cceb0eb8db1a19df464"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a18f9e44522bdab10577af1abd953ad95"><td class="memItemLeft" align="right" valign="top"><a id="a18f9e44522bdab10577af1abd953ad95"></a>
+result&lt; extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a18f9e44522bdab10577af1abd953ad95">underlying_file_maximum_extent</a> () const noexcept</td></tr>
+<tr class="memdesc:a18f9e44522bdab10577af1abd953ad95"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum extent of the underlying file. <br /></td></tr>
+<tr class="separator:a18f9e44522bdab10577af1abd953ad95"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae8e389b2dbdff1b1f155ea351f5ba9c5"><td class="memItemLeft" align="right" valign="top"><a id="ae8e389b2dbdff1b1f155ea351f5ba9c5"></a>
size_type&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#ae8e389b2dbdff1b1f155ea351f5ba9c5">capacity</a> () const noexcept</td></tr>
<tr class="memdesc:ae8e389b2dbdff1b1f155ea351f5ba9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">The address space (to be) reserved for future expansion of this file. <br /></td></tr>
@@ -247,10 +247,10 @@ virtual <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1io__result.html
<tr class="memitem:ade79cbd3cd40e6d194492319c3367da6"><td class="memItemLeft" align="right" valign="top"><a id="ade79cbd3cd40e6d194492319c3367da6"></a>
result&lt; <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html">mapped_file_handle</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>clone</b> (size_type reservation, <a class="el" href="classafio__v2__xxx_1_1handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18">mode</a> mode_=mode::unchanged, <a class="el" href="classafio__v2__xxx_1_1handle.html#a6f7e37c73271968271c2342023f58c9e">caching</a> caching_=caching::unchanged, <a class="el" href="structafio__v2__xxx_1_1deadline.html">deadline</a> d=std::chrono::seconds(30)) const noexcept</td></tr>
<tr class="separator:ade79cbd3cd40e6d194492319c3367da6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6e92c497a0070314630c6dbf6f76b933"><td class="memItemLeft" align="right" valign="top"><a id="a6e92c497a0070314630c6dbf6f76b933"></a>
-virtual result&lt; extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a6e92c497a0070314630c6dbf6f76b933">length</a> () const noexcept override</td></tr>
-<tr class="memdesc:a6e92c497a0070314630c6dbf6f76b933"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the current maximum permitted extent of the file. <br /></td></tr>
-<tr class="separator:a6e92c497a0070314630c6dbf6f76b933"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a96936484028ac57f6150560b55b26da7"><td class="memItemLeft" align="right" valign="top"><a id="a96936484028ac57f6150560b55b26da7"></a>
+virtual result&lt; extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a96936484028ac57f6150560b55b26da7">maximum_extent</a> () const noexcept override</td></tr>
+<tr class="memdesc:a96936484028ac57f6150560b55b26da7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the current maximum permitted extent of the file. <br /></td></tr>
+<tr class="separator:a96936484028ac57f6150560b55b26da7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a64bf34a474aa4de495b38ce314fd377b"><td class="memItemLeft" align="right" valign="top">virtual result&lt; extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a64bf34a474aa4de495b38ce314fd377b">truncate</a> (extent_type newsize) noexcept override</td></tr>
<tr class="memdesc:a64bf34a474aa4de495b38ce314fd377b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resize the current maximum permitted extent of the mapped file to the given extent, avoiding any new allocation of physical storage where supported, and mapping or unmapping any new pages up to the reservation to reflect the new maximum extent. If the new size exceeds the reservation, <code>reserve()</code> will be called to increase the reservation. <a href="#a64bf34a474aa4de495b38ce314fd377b">More...</a><br /></td></tr>
<tr class="separator:a64bf34a474aa4de495b38ce314fd377b"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -283,9 +283,8 @@ void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clas
<a class="el" href="classafio__v2__xxx_1_1io__service.html">io_service</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a672324d44ea84ccfb71594c1036628ac">service</a> () const noexcept</td></tr>
<tr class="memdesc:a672324d44ea84ccfb71594c1036628ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">The i/o service this handle is attached to, if any. <br /></td></tr>
<tr class="separator:a672324d44ea84ccfb71594c1036628ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a03d1774e3ad8678fb4aac4ced57beeef"><td class="memItemLeft" align="right" valign="top"><a id="a03d1774e3ad8678fb4aac4ced57beeef"></a>
-virtual result&lt; std::vector&lt; std::pair&lt; extent_type, extent_type &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a03d1774e3ad8678fb4aac4ced57beeef">extents</a> () const noexcept</td></tr>
-<tr class="memdesc:a03d1774e3ad8678fb4aac4ced57beeef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a list of currently valid extents for this open file. WARNING: racy! <br /></td></tr>
+<tr class="memitem:a03d1774e3ad8678fb4aac4ced57beeef"><td class="memItemLeft" align="right" valign="top">virtual result&lt; std::vector&lt; std::pair&lt; extent_type, extent_type &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1file__handle.html#a03d1774e3ad8678fb4aac4ced57beeef">extents</a> () const noexcept</td></tr>
+<tr class="memdesc:a03d1774e3ad8678fb4aac4ced57beeef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a list of currently valid extents for this open file. WARNING: racy! <a href="#a03d1774e3ad8678fb4aac4ced57beeef">More...</a><br /></td></tr>
<tr class="separator:a03d1774e3ad8678fb4aac4ced57beeef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4d9cbbb7aae98704c6ad97de080c4210"><td class="memItemLeft" align="right" valign="top">virtual size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1io__handle.html#a4d9cbbb7aae98704c6ad97de080c4210">max_buffers</a> () const noexcept</td></tr>
<tr class="memdesc:a4d9cbbb7aae98704c6ad97de080c4210"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <em>maximum</em> number of buffers which a single read or write syscall can process at a time for this specific open handle. On POSIX, this is known as <code>IOV_MAX</code>. <a href="#a4d9cbbb7aae98704c6ad97de080c4210">More...</a><br /></td></tr>
@@ -487,7 +486,7 @@ ino_t&#160;</td><td class="memItemRight" valign="bottom"><b>_inode</b> {0}</td><
<p>Note that zero length files cannot be memory mapped, and writes past the maximum extent do NOT auto-extend the size of the file, rather the data written beyond the maximum valid extent has undefined kernel-specific behaviour, which includes segfaulting. You must therefore always <code>truncate(newsize)</code> to resize the file and its maps before you can read or write to it, and be VERY careful to not read or write beyond the maximum extent of the file.</p>
<p>Therefore, when a file is created or is otherwise of zero length, <code>address()</code> will return a null pointer. Similarly, calling <code>truncate(0)</code> will close the map and section handles, they will be recreated on next truncation to a non-zero size.</p>
<p>For better performance when handling files which are growing, there is a concept of "address space reservation" via <code>reserve()</code> and <code>capacity()</code>, which on some kernels is automatically and efficiently expanded into when the underlying file grows. The implementation asks the kernel to set out a contiguous region of pages matching that reservation, and to map the file into the beginning of the reservation. The remainder of the pages may be inaccessible and may generate a segfault, or they may automatically reflect any growth in the underlying file. This is why <code>read()</code> and <code>write()</code> only know about the reservation size, and will read and write memory up to that reservation size, without checking if the memory involved exists or not yet. You are guaranteed that <code>address()</code> will not return a new value unless you truncate from a bigger length to a smaller length, or you call <code>reserve()</code> with a new reservation or <code>truncate()</code> with a value bigger than the reservation.</p>
-<p><code>length()</code> reports the last truncated length of the mapped file (possibly by any process in the system) up to the reservation limit, NOT the length of the underlying file. When you know that another process has extended the file and you wish to map the newly appended data, you can call <code>update_map()</code> which guarantees that the mapping your process sees is up to date, rather than relying on any kernel-specific automatic mapping. Whether automatic or enforced by <code>update_map()</code>, the reservation limit will not be exceeded nor will <code>address()</code> suddenly return something different.</p>
+<p><code>maximum_extent()</code> reports the last truncated length of the mapped file (possibly by any process in the system) up to the reservation limit, NOT the maximum extent of the underlying file. When you know that another process has extended the file and you wish to map the newly appended data, you can call <code>update_map()</code> which guarantees that the mapping your process sees is up to date, rather than relying on any kernel-specific automatic mapping. Whether automatic or enforced by <code>update_map()</code>, the reservation limit will not be exceeded nor will <code>address()</code> suddenly return something different.</p>
<p>It is thus up to you to detect that the reservation has been exhausted, and to reserve a new reservation which will change the value returned by <code>address()</code>. This entirely manual system is a bit tedious and cumbersome to use, but as mapping files is an expensive operation given TLB shootdown, we leave it up to the end user to decide when to expend the cost of mapping.</p>
<dl class="section warning"><dt>Warning</dt><dd>You must be cautious when the file is being extended by third parties which are not using this <code>mapped_file_handle</code> to write the new data. With unified page cache kernels, mixing mapped and normal i/o is generally safe except at the end of a file where race conditions and outright kernel bugs tend to abound. To avoid these, solely and exclusively use a dedicated handle configured to atomic append only to do the appends. </dd></dl>
</div><h2 class="groupheader">Member Function Documentation</h2>
@@ -667,6 +666,34 @@ For portability, you can only assume that barriers write order for a single hand
</div>
</div>
+<a id="a03d1774e3ad8678fb4aac4ced57beeef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a03d1774e3ad8678fb4aac4ced57beeef">&#9670;&nbsp;</a></span>extents()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual result&lt;std::vector&lt;std::pair&lt;extent_type, extent_type&gt; &gt; &gt; afio_v2_xxx::file_handle::extents </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span><span class="mlabel">noexcept</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns a list of currently valid extents for this open file. WARNING: racy! </p>
+<dl class="section return"><dt>Returns</dt><dd>A vector of pairs of extent offset + extent length representing the valid extents in this file. Filing systems which do not support extents return a single extent matching the length of the file rather than returning an error. </dd></dl>
+
+</div>
+</div>
<a id="accb36f2bfd98393dc868653798c02d34"></a>
<h2 class="memtitle"><span class="permalink"><a href="#accb36f2bfd98393dc868653798c02d34">&#9670;&nbsp;</a></span>file()</h2>
diff --git a/classafio__v2__xxx_1_1mapped__file__handle.js b/classafio__v2__xxx_1_1mapped__file__handle.js
index 529e1333..186e373e 100644
--- a/classafio__v2__xxx_1_1mapped__file__handle.js
+++ b/classafio__v2__xxx_1_1mapped__file__handle.js
@@ -51,13 +51,13 @@ var classafio__v2__xxx_1_1mapped__file__handle =
[ "is_valid", "classafio__v2__xxx_1_1mapped__file__handle.html#a4194a05dd9694d2c47d5a45f925db1d7", null ],
[ "is_writable", "classafio__v2__xxx_1_1mapped__file__handle.html#a5be9a526bc5c1be758b0cfc36a262f6e", null ],
[ "kernel_caching", "classafio__v2__xxx_1_1mapped__file__handle.html#a00f42a44de714feb3ed86dd0a175e69c", null ],
- [ "length", "classafio__v2__xxx_1_1mapped__file__handle.html#a6e92c497a0070314630c6dbf6f76b933", null ],
[ "lock", "classafio__v2__xxx_1_1mapped__file__handle.html#a88689b15e6e8b6ce1f945737dee4369e", null ],
[ "lock", "classafio__v2__xxx_1_1mapped__file__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897", null ],
[ "lock", "classafio__v2__xxx_1_1mapped__file__handle.html#aeabd245b6edcfb57779b29c6f2ea9737", null ],
[ "map", "classafio__v2__xxx_1_1mapped__file__handle.html#aa7fe74ccbf2fc255897bacaa6c41d319", null ],
[ "map", "classafio__v2__xxx_1_1mapped__file__handle.html#a767caa74d636805d0986adc59b70060c", null ],
[ "max_buffers", "classafio__v2__xxx_1_1mapped__file__handle.html#a4d9cbbb7aae98704c6ad97de080c4210", null ],
+ [ "maximum_extent", "classafio__v2__xxx_1_1mapped__file__handle.html#a96936484028ac57f6150560b55b26da7", null ],
[ "native_handle", "classafio__v2__xxx_1_1mapped__file__handle.html#a875440f1b368472f1840c70c266f3a48", null ],
[ "operator=", "classafio__v2__xxx_1_1mapped__file__handle.html#ad8714dac7f0b13ceca5f21ba25e1fa10", null ],
[ "operator=", "classafio__v2__xxx_1_1mapped__file__handle.html#ac7058e8556442440b6ae21bf3960b2fd", null ],
@@ -80,7 +80,7 @@ var classafio__v2__xxx_1_1mapped__file__handle =
[ "swap", "classafio__v2__xxx_1_1mapped__file__handle.html#a657c12a309cf02bf2351bfcc7f41463b", null ],
[ "truncate", "classafio__v2__xxx_1_1mapped__file__handle.html#a64bf34a474aa4de495b38ce314fd377b", null ],
[ "try_lock", "classafio__v2__xxx_1_1mapped__file__handle.html#a0a1c4773b9fa7bbd04fee0756075d319", null ],
- [ "underlying_file_length", "classafio__v2__xxx_1_1mapped__file__handle.html#a1dc81182455d0cceb0eb8db1a19df464", null ],
+ [ "underlying_file_maximum_extent", "classafio__v2__xxx_1_1mapped__file__handle.html#a18f9e44522bdab10577af1abd953ad95", null ],
[ "unique_id", "classafio__v2__xxx_1_1mapped__file__handle.html#a5a5244ab1a15053aefe93f2c253db5b3", null ],
[ "unlink", "classafio__v2__xxx_1_1mapped__file__handle.html#a6860b9626adc4d8e6db3ebb92974c054", null ],
[ "unlock", "classafio__v2__xxx_1_1mapped__file__handle.html#a96b9da71ee7791fbaaa2470c936ec763", null ],
diff --git a/classafio__v2__xxx_1_1section__handle.html b/classafio__v2__xxx_1_1section__handle.html
index a4606fe6..e2a1e375 100644
--- a/classafio__v2__xxx_1_1section__handle.html
+++ b/classafio__v2__xxx_1_1section__handle.html
@@ -218,7 +218,7 @@ void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clas
<tr class="separator:a5464eac84bedf1ce13318451b3a95e93"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f0dec7d839f348c39e7a185777866ea"><td class="memItemLeft" align="right" valign="top"><a id="a9f0dec7d839f348c39e7a185777866ea"></a>
result&lt; <a class="el" href="classafio__v2__xxx_1_1handle.html#a818fff07c92eaab72532092d1c2a14f9">extent_type</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1section__handle.html#a9f0dec7d839f348c39e7a185777866ea">length</a> () const noexcept</td></tr>
-<tr class="memdesc:a9f0dec7d839f348c39e7a185777866ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the current maximum permitted extent of the memory section. <br /></td></tr>
+<tr class="memdesc:a9f0dec7d839f348c39e7a185777866ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the current length of the memory section. <br /></td></tr>
<tr class="separator:a9f0dec7d839f348c39e7a185777866ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a229f515ed3251071d374476204e23e30"><td class="memItemLeft" align="right" valign="top">result&lt; <a class="el" href="classafio__v2__xxx_1_1handle.html#a818fff07c92eaab72532092d1c2a14f9">extent_type</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1section__handle.html#a229f515ed3251071d374476204e23e30">truncate</a> (<a class="el" href="classafio__v2__xxx_1_1handle.html#a818fff07c92eaab72532092d1c2a14f9">extent_type</a> newsize=0) noexcept</td></tr>
<tr class="separator:a229f515ed3251071d374476204e23e30"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -416,7 +416,7 @@ flag&#160;</td><td class="memItemRight" valign="bottom"><b>_flags</b> {flag::non
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a45ff5c1c5662623d99156870dfeee0a7a244f58cf07c35fd48d7524b289551e5c"></a>truncate&#160;</td><td class="fielddoc"><p>Atomically truncate on open, leaving creation date unmodified. </p>
</td></tr>
</table>
-<div class="fragment"><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; : <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; open_existing = 0,</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; only_if_not_exist,</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; if_needed,</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="namespaceafio__v2__xxx.html#a84d22c966fcabe50de30ad8cf26c7241">truncate</a> <span class="comment">//!&lt; Atomically truncate on open, leaving creation date unmodified.</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"></span> <span class="comment">// NOTE: IF UPDATING THIS UPDATE THE std::ostream PRINTER BELOW!!!</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; };</div><div class="ttc" id="namespaceafio__v2__xxx_html_a84d22c966fcabe50de30ad8cf26c7241"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a84d22c966fcabe50de30ad8cf26c7241">afio_v2_xxx::truncate</a></div><div class="ttdeci">result&lt; file_handle::extent_type &gt; truncate(file_handle &amp;self, file_handle::extent_type newsize) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:373</div></div>
+<div class="fragment"><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; : <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; open_existing = 0,</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; only_if_not_exist,</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; if_needed,</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="namespaceafio__v2__xxx.html#a84d22c966fcabe50de30ad8cf26c7241">truncate</a> <span class="comment">//!&lt; Atomically truncate on open, leaving creation date unmodified.</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"></span> <span class="comment">// NOTE: IF UPDATING THIS UPDATE THE std::ostream PRINTER BELOW!!!</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; };</div><div class="ttc" id="namespaceafio__v2__xxx_html_a84d22c966fcabe50de30ad8cf26c7241"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a84d22c966fcabe50de30ad8cf26c7241">afio_v2_xxx::truncate</a></div><div class="ttdeci">result&lt; file_handle::extent_type &gt; truncate(file_handle &amp;self, file_handle::extent_type newsize) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:378</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -563,7 +563,7 @@ flag&#160;</td><td class="memItemRight" valign="bottom"><b>_flags</b> {flag::non
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">backing</td><td>The handle to use as backing storage. </td></tr>
- <tr><td class="paramname">maximum_size</td><td>The initial size of this section, which cannot be larger than any backing file. Zero means to use <code>backing.length()</code>. </td></tr>
+ <tr><td class="paramname">maximum_size</td><td>The initial size of this section, which cannot be larger than any backing file. Zero means to use <code>backing.maximum_extent()</code>. </td></tr>
<tr><td class="paramname">_flag</td><td>How to create the section.</td></tr>
</table>
</dd>
@@ -610,7 +610,7 @@ flag&#160;</td><td class="memItemRight" valign="bottom"><b>_flags</b> {flag::non
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">backing</td><td>The handle to use as backing storage. </td></tr>
- <tr><td class="paramname">bytes</td><td>The initial size of this section, which cannot be larger than any backing file. Zero means to use <code>backing.length()</code>.</td></tr>
+ <tr><td class="paramname">bytes</td><td>The initial size of this section, which cannot be larger than any backing file. Zero means to use <code>backing.maximum_extent()</code>.</td></tr>
</table>
</dd>
</dl>
@@ -731,7 +731,7 @@ flag&#160;</td><td class="memItemRight" valign="bottom"><b>_flags</b> {flag::non
</div><div class="memdoc">
<p>Resize the current maximum permitted extent of the memory section to the given extent. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">newsize</td><td>The new size of the memory section, which cannot be zero. Specify zero to use <code>backing.length()</code>. This cannot exceed the size of any backing file used if that file is not writable.</td></tr>
+ <tr><td class="paramname">newsize</td><td>The new size of the memory section, which cannot be zero. Specify zero to use <code>backing.maximum_extent()</code>. This cannot exceed the size of any backing file used if that file is not writable.</td></tr>
</table>
</dd>
</dl>
diff --git a/file__handle_8hpp.html b/file__handle_8hpp.html
index 37c90ecc..a9f2bbc2 100644
--- a/file__handle_8hpp.html
+++ b/file__handle_8hpp.html
@@ -124,8 +124,8 @@ void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="name
<tr class="separator:aa14b24c8bc330dd8e472f42676ba03d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aca98b0cb43a2d925bb65e055b07b4a08"><td class="memItemLeft" align="right" valign="top">result&lt; file_handle &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceafio__v2__xxx.html#aca98b0cb43a2d925bb65e055b07b4a08">afio_v2_xxx::temp_inode</a> (const path_handle &amp;dirh=path_discovery::storage_backed_temporary_files_directory(), file_handle::mode _mode=file_handle::mode::write, file_handle::flag flags=file_handle::flag::none) noexcept</td></tr>
<tr class="separator:aca98b0cb43a2d925bb65e055b07b4a08"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afe66c5875c48c8bd172901a1159ccbdc"><td class="memItemLeft" align="right" valign="top">result&lt; file_handle::extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">afio_v2_xxx::length</a> (const file_handle &amp;self) noexcept</td></tr>
-<tr class="separator:afe66c5875c48c8bd172901a1159ccbdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8fbd7f7cc6449428269e22f9765b1d8d"><td class="memItemLeft" align="right" valign="top">result&lt; file_handle::extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceafio__v2__xxx.html#a8fbd7f7cc6449428269e22f9765b1d8d">afio_v2_xxx::maximum_extent</a> (const file_handle &amp;self) noexcept</td></tr>
+<tr class="separator:a8fbd7f7cc6449428269e22f9765b1d8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84d22c966fcabe50de30ad8cf26c7241"><td class="memItemLeft" align="right" valign="top">result&lt; file_handle::extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceafio__v2__xxx.html#a84d22c966fcabe50de30ad8cf26c7241">afio_v2_xxx::truncate</a> (file_handle &amp;self, file_handle::extent_type newsize) noexcept</td></tr>
<tr class="separator:a84d22c966fcabe50de30ad8cf26c7241"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac3c009153d916556b991d4a79c664fe9"><td class="memItemLeft" align="right" valign="top"><a id="ac3c009153d916556b991d4a79c664fe9"></a>
diff --git a/file__handle_8hpp.js b/file__handle_8hpp.js
index 89fb023b..2057fc73 100644
--- a/file__handle_8hpp.js
+++ b/file__handle_8hpp.js
@@ -4,7 +4,7 @@ var file__handle_8hpp =
[ "construct< file_handle >", "structafio__v2__xxx_1_1construct_3_01file__handle_01_4.html", "structafio__v2__xxx_1_1construct_3_01file__handle_01_4" ],
[ "extents", "file__handle_8hpp.html#ac3c009153d916556b991d4a79c664fe9", null ],
[ "file", "file__handle_8hpp.html#ab92ca63383ef7fe58af4620570d12803", null ],
- [ "length", "file__handle_8hpp.html#afe66c5875c48c8bd172901a1159ccbdc", null ],
+ [ "maximum_extent", "file__handle_8hpp.html#a8fbd7f7cc6449428269e22f9765b1d8d", null ],
[ "random_file", "file__handle_8hpp.html#aac0b7d76c4298e86cef49c832c93edec", null ],
[ "swap", "file__handle_8hpp.html#a579d619e4d73e584fdd41e34761afa67", null ],
[ "temp_file", "file__handle_8hpp.html#aa14b24c8bc330dd8e472f42676ba03d6", null ],
diff --git a/functions_func_l.html b/functions_func_l.html
index 4c67ba95..277f0ee0 100644
--- a/functions_func_l.html
+++ b/functions_func_l.html
@@ -84,17 +84,15 @@ $(document).ready(function(){initNavTree('functions_func_l.html','');});
<h3><a id="index_l"></a>- l -</h3><ul>
<li>length()
-: <a class="el" href="classafio__v2__xxx_1_1file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5">afio_v2_xxx::file_handle</a>
-, <a class="el" href="classafio__v2__xxx_1_1map__handle.html#aba6ebe9afaccfaf59a92c5b85c72e7d2">afio_v2_xxx::map_handle</a>
-, <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a6e92c497a0070314630c6dbf6f76b933">afio_v2_xxx::mapped_file_handle</a>
+: <a class="el" href="classafio__v2__xxx_1_1map__handle.html#aba6ebe9afaccfaf59a92c5b85c72e7d2">afio_v2_xxx::map_handle</a>
, <a class="el" href="classafio__v2__xxx_1_1section__handle.html#a9f0dec7d839f348c39e7a185777866ea">afio_v2_xxx::section_handle</a>
</li>
<li>lock()
-: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex.html#ac1dbb5f7b7887690b47b1d24940a054d">afio_v2_xxx::algorithm::shared_fs_mutex::shared_fs_mutex</a>
-, <a class="el" href="classafio__v2__xxx_1_1io__handle.html#aeabd245b6edcfb57779b29c6f2ea9737">afio_v2_xxx::io_handle</a>
+: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex.html#a2e82ae0ca11932f5287b0ca2f4834da6">afio_v2_xxx::algorithm::shared_fs_mutex::shared_fs_mutex</a>
+, <a class="el" href="classafio__v2__xxx_1_1io__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897">afio_v2_xxx::io_handle</a>
</li>
<li>lock_files()
-: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1lock__files.html#a46536a17171534e4a94e5ec4e5306a98">afio_v2_xxx::algorithm::shared_fs_mutex::lock_files</a>
+: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1lock__files.html#a21bdcd57cf9be0f1a3d6134dab68927f">afio_v2_xxx::algorithm::shared_fs_mutex::lock_files</a>
</li>
</ul>
</div><!-- contents -->
diff --git a/functions_func_m.html b/functions_func_m.html
index 7dde2d72..9fed96aa 100644
--- a/functions_func_m.html
+++ b/functions_func_m.html
@@ -115,8 +115,12 @@ $(document).ready(function(){initNavTree('functions_func_m.html','');});
: <a class="el" href="structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a659754b0f9d7e2f3fa26921ebe48e7c0">afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; has_default_construction, T &gt;</a>
, <a class="el" href="structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#ab6b3c4513e47e2905c8e6fe1c831d742">afio_v2_xxx::storage_profile::storage_profile</a>
</li>
+<li>maximum_extent()
+: <a class="el" href="classafio__v2__xxx_1_1file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f">afio_v2_xxx::file_handle</a>
+, <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a96936484028ac57f6150560b55b26da7">afio_v2_xxx::mapped_file_handle</a>
+</li>
<li>memory_map()
-: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html#ad8731e82e929f26c38a34450fc87d7bb">afio_v2_xxx::algorithm::shared_fs_mutex::memory_map&lt; Hasher, HashIndexSize, SpinlockType &gt;</a>
+: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html#af066bb4d3f9f7020b60733ff0bcc99df">afio_v2_xxx::algorithm::shared_fs_mutex::memory_map&lt; Hasher, HashIndexSize, SpinlockType &gt;</a>
</li>
<li>message()
: <a class="el" href="structafio__v2__xxx_1_1error__info.html#ae710a4b60f3da9ab91e32374f9a766d5">afio_v2_xxx::error_info</a>
diff --git a/functions_func_u.html b/functions_func_u.html
index 4bd651cd..2754685c 100644
--- a/functions_func_u.html
+++ b/functions_func_u.html
@@ -83,8 +83,8 @@ $(document).ready(function(){initNavTree('functions_func_u.html','');});
&#160;
<h3><a id="index_u"></a>- u -</h3><ul>
-<li>underlying_file_length()
-: <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a1dc81182455d0cceb0eb8db1a19df464">afio_v2_xxx::mapped_file_handle</a>
+<li>underlying_file_maximum_extent()
+: <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a18f9e44522bdab10577af1abd953ad95">afio_v2_xxx::mapped_file_handle</a>
</li>
<li>unique_id()
: <a class="el" href="classafio__v2__xxx_1_1fs__handle.html#a5a5244ab1a15053aefe93f2c253db5b3">afio_v2_xxx::fs_handle</a>
diff --git a/functions_l.html b/functions_l.html
index 699377c1..45977a74 100644
--- a/functions_l.html
+++ b/functions_l.html
@@ -91,15 +91,13 @@ $(document).ready(function(){initNavTree('functions_l.html','');});
, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#af355ceae82988f25cfa34d595550cbcf">afio_v2_xxx::io_handle::const_buffer_type</a>
</li>
<li>length()
-: <a class="el" href="classafio__v2__xxx_1_1file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5">afio_v2_xxx::file_handle</a>
-, <a class="el" href="classafio__v2__xxx_1_1map__handle.html#aba6ebe9afaccfaf59a92c5b85c72e7d2">afio_v2_xxx::map_handle</a>
-, <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a6e92c497a0070314630c6dbf6f76b933">afio_v2_xxx::mapped_file_handle</a>
+: <a class="el" href="classafio__v2__xxx_1_1map__handle.html#aba6ebe9afaccfaf59a92c5b85c72e7d2">afio_v2_xxx::map_handle</a>
, <a class="el" href="structafio__v2__xxx_1_1path__view_1_1c__str.html#a879ec6f6501d659bc7b04745c1a33eaa">afio_v2_xxx::path_view::c_str</a>
, <a class="el" href="classafio__v2__xxx_1_1section__handle.html#a9f0dec7d839f348c39e7a185777866ea">afio_v2_xxx::section_handle</a>
</li>
<li>lock()
-: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex.html#ac1dbb5f7b7887690b47b1d24940a054d">afio_v2_xxx::algorithm::shared_fs_mutex::shared_fs_mutex</a>
-, <a class="el" href="classafio__v2__xxx_1_1io__handle.html#aeabd245b6edcfb57779b29c6f2ea9737">afio_v2_xxx::io_handle</a>
+: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex.html#a2e82ae0ca11932f5287b0ca2f4834da6">afio_v2_xxx::algorithm::shared_fs_mutex::shared_fs_mutex</a>
+, <a class="el" href="classafio__v2__xxx_1_1io__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897">afio_v2_xxx::io_handle</a>
</li>
<li>lock_files()
: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1lock__files.html#a21bdcd57cf9be0f1a3d6134dab68927f">afio_v2_xxx::algorithm::shared_fs_mutex::lock_files</a>
diff --git a/functions_m.html b/functions_m.html
index c8dbd9b4..b224f8b2 100644
--- a/functions_m.html
+++ b/functions_m.html
@@ -100,7 +100,7 @@ $(document).ready(function(){initNavTree('functions_m.html','');});
: <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a00875e717f4b2725bb58ecbb5310fc6f">afio_v2_xxx::mapped_file_handle</a>
</li>
<li>mapped_span()
-: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa5b20642220613876d8be474003785e9">afio_v2_xxx::algorithm::mapped_span&lt; T &gt;</a>
+: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#a236f0978be161027886300e85bf5ae8d">afio_v2_xxx::algorithm::mapped_span&lt; T &gt;</a>
</li>
<li>mapped_temp_file()
: <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#ae19c88791bd2e0bca0d22ec576687a83">afio_v2_xxx::mapped_file_handle</a>
@@ -115,11 +115,15 @@ $(document).ready(function(){initNavTree('functions_m.html','');});
: <a class="el" href="structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a659754b0f9d7e2f3fa26921ebe48e7c0">afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; has_default_construction, T &gt;</a>
, <a class="el" href="structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#ab6b3c4513e47e2905c8e6fe1c831d742">afio_v2_xxx::storage_profile::storage_profile</a>
</li>
+<li>maximum_extent()
+: <a class="el" href="classafio__v2__xxx_1_1file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f">afio_v2_xxx::file_handle</a>
+, <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a96936484028ac57f6150560b55b26da7">afio_v2_xxx::mapped_file_handle</a>
+</li>
<li>maximum_prefetching
: <a class="el" href="structafio__v2__xxx_1_1handle_1_1flag__base.html#a51aaa32c78950cedbc1b7a61e1738d3ea67eb5d8757f506595ca2d5c06d8389dc">afio_v2_xxx::handle::flag_base</a>
</li>
<li>memory_map()
-: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html#ad8731e82e929f26c38a34450fc87d7bb">afio_v2_xxx::algorithm::shared_fs_mutex::memory_map&lt; Hasher, HashIndexSize, SpinlockType &gt;</a>
+: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html#af066bb4d3f9f7020b60733ff0bcc99df">afio_v2_xxx::algorithm::shared_fs_mutex::memory_map&lt; Hasher, HashIndexSize, SpinlockType &gt;</a>
</li>
<li>message()
: <a class="el" href="structafio__v2__xxx_1_1error__info.html#ae710a4b60f3da9ab91e32374f9a766d5">afio_v2_xxx::error_info</a>
diff --git a/functions_u.html b/functions_u.html
index 4762a9d2..e18c65e3 100644
--- a/functions_u.html
+++ b/functions_u.html
@@ -83,8 +83,8 @@ $(document).ready(function(){initNavTree('functions_u.html','');});
<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
<h3><a id="index_u"></a>- u -</h3><ul>
-<li>underlying_file_length()
-: <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a1dc81182455d0cceb0eb8db1a19df464">afio_v2_xxx::mapped_file_handle</a>
+<li>underlying_file_maximum_extent()
+: <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a18f9e44522bdab10577af1abd953ad95">afio_v2_xxx::mapped_file_handle</a>
</li>
<li>unique_id()
: <a class="el" href="classafio__v2__xxx_1_1fs__handle.html#a5a5244ab1a15053aefe93f2c253db5b3">afio_v2_xxx::fs_handle</a>
diff --git a/namespaceafio__v2__xxx.html b/namespaceafio__v2__xxx.html
index ec7df434..dca7ce34 100644
--- a/namespaceafio__v2__xxx.html
+++ b/namespaceafio__v2__xxx.html
@@ -308,8 +308,8 @@ void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="name
<tr class="separator:aa14b24c8bc330dd8e472f42676ba03d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aca98b0cb43a2d925bb65e055b07b4a08"><td class="memItemLeft" align="right" valign="top">result&lt; <a class="el" href="classafio__v2__xxx_1_1file__handle.html">file_handle</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceafio__v2__xxx.html#aca98b0cb43a2d925bb65e055b07b4a08">temp_inode</a> (const <a class="el" href="classafio__v2__xxx_1_1path__handle.html">path_handle</a> &amp;dirh=<a class="el" href="namespaceafio__v2__xxx_1_1path__discovery.html#af398b6c3762f60aa96cebd270879093e">path_discovery::storage_backed_temporary_files_directory</a>(), <a class="el" href="classafio__v2__xxx_1_1handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18">file_handle::mode</a> _mode=<a class="el" href="classafio__v2__xxx_1_1handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18aefb2a684e4afb7d55e6147fbe5a332ee">file_handle::mode::write</a>, file_handle::flag flags=file_handle::flag::none) noexcept</td></tr>
<tr class="separator:aca98b0cb43a2d925bb65e055b07b4a08"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afe66c5875c48c8bd172901a1159ccbdc"><td class="memItemLeft" align="right" valign="top">result&lt; file_handle::extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">length</a> (const <a class="el" href="classafio__v2__xxx_1_1file__handle.html">file_handle</a> &amp;self) noexcept</td></tr>
-<tr class="separator:afe66c5875c48c8bd172901a1159ccbdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8fbd7f7cc6449428269e22f9765b1d8d"><td class="memItemLeft" align="right" valign="top">result&lt; file_handle::extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceafio__v2__xxx.html#a8fbd7f7cc6449428269e22f9765b1d8d">maximum_extent</a> (const <a class="el" href="classafio__v2__xxx_1_1file__handle.html">file_handle</a> &amp;self) noexcept</td></tr>
+<tr class="separator:a8fbd7f7cc6449428269e22f9765b1d8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84d22c966fcabe50de30ad8cf26c7241"><td class="memItemLeft" align="right" valign="top">result&lt; file_handle::extent_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceafio__v2__xxx.html#a84d22c966fcabe50de30ad8cf26c7241">truncate</a> (<a class="el" href="classafio__v2__xxx_1_1file__handle.html">file_handle</a> &amp;self, file_handle::extent_type newsize) noexcept</td></tr>
<tr class="separator:a84d22c966fcabe50de30ad8cf26c7241"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac3c009153d916556b991d4a79c664fe9"><td class="memItemLeft" align="right" valign="top"><a id="ac3c009153d916556b991d4a79c664fe9"></a>
@@ -1413,39 +1413,11 @@ For portability, you can only assume that barriers write order for a single hand
</dd>
</dl>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX open() or CreateFile() can return. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;{</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#ab92ca63383ef7fe58af4620570d12803">file_handle::file</a>(std::forward&lt;decltype(base)&gt;(base), std::forward&lt;decltype(<a class="code" href="namespaceafio__v2__xxx.html#a7a98882ead35ebd6bd0700fdf571c44a">path</a>)&gt;(<a class="code" href="namespaceafio__v2__xxx.html#a7a98882ead35ebd6bd0700fdf571c44a">path</a>), std::forward&lt;decltype(_mode)&gt;(_mode), std::forward&lt;decltype(_creation)&gt;(_creation), std::forward&lt;decltype(_caching)&gt;(_caching), std::forward&lt;decltype(flags)&gt;(flags));</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_a7a98882ead35ebd6bd0700fdf571c44a"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a7a98882ead35ebd6bd0700fdf571c44a">afio_v2_xxx::path</a></div><div class="ttdeci">result&lt; path_handle &gt; path(const path_handle &amp;base, path_handle::path_view_type path) noexcept</div><div class="ttdef"><b>Definition:</b> path_handle.hpp:114</div></div>
-<div class="ttc" id="namespaceafio__v2__xxx_html_ab92ca63383ef7fe58af4620570d12803"><div class="ttname"><a href="namespaceafio__v2__xxx.html#ab92ca63383ef7fe58af4620570d12803">afio_v2_xxx::file</a></div><div class="ttdeci">result&lt; file_handle &gt; file(const path_handle &amp;base, file_handle::path_view_type path, file_handle::mode _mode=file_handle::mode::read, file_handle::creation _creation=file_handle::creation::open_existing, file_handle::caching _caching=file_handle::caching::all, file_handle::flag flags=file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:307</div></div>
+<div class="fragment"><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; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#ab92ca63383ef7fe58af4620570d12803">file_handle::file</a>(std::forward&lt;decltype(base)&gt;(base), std::forward&lt;decltype(<a class="code" href="namespaceafio__v2__xxx.html#a7a98882ead35ebd6bd0700fdf571c44a">path</a>)&gt;(<a class="code" href="namespaceafio__v2__xxx.html#a7a98882ead35ebd6bd0700fdf571c44a">path</a>), std::forward&lt;decltype(_mode)&gt;(_mode), std::forward&lt;decltype(_creation)&gt;(_creation), std::forward&lt;decltype(_caching)&gt;(_caching), std::forward&lt;decltype(flags)&gt;(flags));</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_a7a98882ead35ebd6bd0700fdf571c44a"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a7a98882ead35ebd6bd0700fdf571c44a">afio_v2_xxx::path</a></div><div class="ttdeci">result&lt; path_handle &gt; path(const path_handle &amp;base, path_handle::path_view_type path) noexcept</div><div class="ttdef"><b>Definition:</b> path_handle.hpp:114</div></div>
+<div class="ttc" id="namespaceafio__v2__xxx_html_ab92ca63383ef7fe58af4620570d12803"><div class="ttname"><a href="namespaceafio__v2__xxx.html#ab92ca63383ef7fe58af4620570d12803">afio_v2_xxx::file</a></div><div class="ttdeci">result&lt; file_handle &gt; file(const path_handle &amp;base, file_handle::path_view_type path, file_handle::mode _mode=file_handle::mode::read, file_handle::creation _creation=file_handle::creation::open_existing, file_handle::caching _caching=file_handle::caching::all, file_handle::flag flags=file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:310</div></div>
</div><!-- fragment -->
</div>
</div>
-<a id="afe66c5875c48c8bd172901a1159ccbdc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afe66c5875c48c8bd172901a1159ccbdc">&#9670;&nbsp;</a></span>length()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">result&lt;file_handle::extent_type&gt; afio_v2_xxx::length </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classafio__v2__xxx_1_1file__handle.html">file_handle</a> &amp;&#160;</td>
- <td class="paramname"><em>self</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">noexcept</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-<p>Return the current maximum permitted extent of the file.</p>
-<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX fstat() or GetFileInformationByHandleEx() can return. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;{</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.length();</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;}</div></div><!-- fragment -->
-</div>
-</div>
<a id="a2bea94a20aae6fb34ebe1ffd03e50891"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2bea94a20aae6fb34ebe1ffd03e50891">&#9670;&nbsp;</a></span>map() <span class="overload">[1/2]</span></h2>
@@ -1861,6 +1833,34 @@ For portability, you can only assume that barriers write order for a single hand
</div><!-- fragment -->
</div>
</div>
+<a id="a8fbd7f7cc6449428269e22f9765b1d8d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8fbd7f7cc6449428269e22f9765b1d8d">&#9670;&nbsp;</a></span>maximum_extent()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">result&lt;file_handle::extent_type&gt; afio_v2_xxx::maximum_extent </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classafio__v2__xxx_1_1file__handle.html">file_handle</a> &amp;&#160;</td>
+ <td class="paramname"><em>self</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">noexcept</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Return the current maximum permitted extent of the file.</p>
+<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX fstat() or GetFileInformationByHandleEx() can return. </dd></dl>
+<div class="fragment"><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;{</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.maximum_extent();</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
<a id="a7a98882ead35ebd6bd0700fdf571c44a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7a98882ead35ebd6bd0700fdf571c44a">&#9670;&nbsp;</a></span>path() <span class="overload">[1/2]</span></h2>
@@ -2026,7 +2026,7 @@ For portability, you can only assume that barriers write order for a single hand
</div><div class="memdoc">
<p>Create a file handle creating a randomly named file on a path. The file is opened exclusively with <code>creation::only_if_not_exist</code> so it will never collide with nor overwrite any existing file. Note also that caching defaults to temporary which hints to the OS to only flush changes to physical storage as lately as possible.</p>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX open() or CreateFile() can return. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;{</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#aac0b7d76c4298e86cef49c832c93edec">file_handle::random_file</a>(std::forward&lt;decltype(dirpath)&gt;(dirpath), std::forward&lt;decltype(_mode)&gt;(_mode), std::forward&lt;decltype(_caching)&gt;(_caching), std::forward&lt;decltype(flags)&gt;(flags));</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_aac0b7d76c4298e86cef49c832c93edec"><div class="ttname"><a href="namespaceafio__v2__xxx.html#aac0b7d76c4298e86cef49c832c93edec">afio_v2_xxx::random_file</a></div><div class="ttdeci">result&lt; file_handle &gt; random_file(const path_handle &amp;dirpath, file_handle::mode _mode=file_handle::mode::write, file_handle::caching _caching=file_handle::caching::temporary, file_handle::flag flags=file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:319</div></div>
+<div class="fragment"><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;{</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#aac0b7d76c4298e86cef49c832c93edec">file_handle::random_file</a>(std::forward&lt;decltype(dirpath)&gt;(dirpath), std::forward&lt;decltype(_mode)&gt;(_mode), std::forward&lt;decltype(_caching)&gt;(_caching), std::forward&lt;decltype(flags)&gt;(flags));</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_aac0b7d76c4298e86cef49c832c93edec"><div class="ttname"><a href="namespaceafio__v2__xxx.html#aac0b7d76c4298e86cef49c832c93edec">afio_v2_xxx::random_file</a></div><div class="ttdeci">result&lt; file_handle &gt; random_file(const path_handle &amp;dirpath, file_handle::mode _mode=file_handle::mode::write, file_handle::caching _caching=file_handle::caching::temporary, file_handle::flag flags=file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:323</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -2303,7 +2303,7 @@ For portability, you can only assume that barriers write order for a single hand
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">backing</td><td>The handle to use as backing storage. </td></tr>
- <tr><td class="paramname">maximum_size</td><td>The initial size of this section, which cannot be larger than any backing file. Zero means to use <code>backing.length()</code>. </td></tr>
+ <tr><td class="paramname">maximum_size</td><td>The initial size of this section, which cannot be larger than any backing file. Zero means to use <code>backing.maximum_extent()</code>. </td></tr>
<tr><td class="paramname">_flag</td><td>How to create the section.</td></tr>
</table>
</dd>
@@ -2351,7 +2351,7 @@ For portability, you can only assume that barriers write order for a single hand
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">backing</td><td>The handle to use as backing storage. </td></tr>
- <tr><td class="paramname">bytes</td><td>The initial size of this section, which cannot be larger than any backing file. Zero means to use <code>backing.length()</code>.</td></tr>
+ <tr><td class="paramname">bytes</td><td>The initial size of this section, which cannot be larger than any backing file. Zero means to use <code>backing.maximum_extent()</code>.</td></tr>
</table>
</dd>
</dl>
@@ -2526,7 +2526,7 @@ For portability, you can only assume that barriers write order for a single hand
<p>Create a file handle creating the named file on some path which the OS declares to be suitable for temporary files. Most OSs are very lazy about flushing changes made to these temporary files. Note the default flags are to have the newly created file deleted on first handle close. Note also that an empty name is equivalent to calling <code>random_file(path_discovery::storage_backed_temporary_files_directory())</code> and the creation parameter is ignored.</p>
<dl class="section note"><dt>Note</dt><dd>If the temporary file you are creating is not going to have its path sent to another process for usage, this is the WRONG function to use. Use <code>temp_inode()</code> instead, it is far more secure.</dd></dl>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX open() or CreateFile() can return. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;{</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#aa14b24c8bc330dd8e472f42676ba03d6">file_handle::temp_file</a>(std::forward&lt;decltype(name)&gt;(name), std::forward&lt;decltype(_mode)&gt;(_mode), std::forward&lt;decltype(_creation)&gt;(_creation), std::forward&lt;decltype(_caching)&gt;(_caching), std::forward&lt;decltype(flags)&gt;(flags));</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_aa14b24c8bc330dd8e472f42676ba03d6"><div class="ttname"><a href="namespaceafio__v2__xxx.html#aa14b24c8bc330dd8e472f42676ba03d6">afio_v2_xxx::temp_file</a></div><div class="ttdeci">result&lt; file_handle &gt; temp_file(file_handle::path_view_type name=file_handle::path_view_type(), file_handle::mode _mode=file_handle::mode::write, file_handle::creation _creation=file_handle::creation::if_needed, file_handle::caching _caching=file_handle::caching::temporary, file_handle::flag flags=file_handle::flag::unlink_on_close) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:338</div></div>
+<div class="fragment"><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;{</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#aa14b24c8bc330dd8e472f42676ba03d6">file_handle::temp_file</a>(std::forward&lt;decltype(name)&gt;(name), std::forward&lt;decltype(_mode)&gt;(_mode), std::forward&lt;decltype(_creation)&gt;(_creation), std::forward&lt;decltype(_caching)&gt;(_caching), std::forward&lt;decltype(flags)&gt;(flags));</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_aa14b24c8bc330dd8e472f42676ba03d6"><div class="ttname"><a href="namespaceafio__v2__xxx.html#aa14b24c8bc330dd8e472f42676ba03d6">afio_v2_xxx::temp_file</a></div><div class="ttdeci">result&lt; file_handle &gt; temp_file(file_handle::path_view_type name=file_handle::path_view_type(), file_handle::mode _mode=file_handle::mode::write, file_handle::creation _creation=file_handle::creation::if_needed, file_handle::caching _caching=file_handle::caching::temporary, file_handle::flag flags=file_handle::flag::unlink_on_close) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:342</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -2571,7 +2571,7 @@ For portability, you can only assume that barriers write order for a single hand
</div><div class="memdoc">
<p><em>Securely</em> create a file handle creating a temporary anonymous inode in the filesystem referred to by <em>dirpath</em>. The inode created has no name nor accessible path on the filing system and ceases to exist as soon as the last handle is closed, making it ideal for use as a temporary file where other processes do not need to have access to its contents via some path on the filing system (a classic use case is for backing shared memory maps).</p>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX open() or CreateFile() can return. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;{</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#aca98b0cb43a2d925bb65e055b07b4a08">file_handle::temp_inode</a>(std::forward&lt;decltype(dirh)&gt;(dirh), std::forward&lt;decltype(_mode)&gt;(_mode), std::forward&lt;decltype(flags)&gt;(flags));</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_aca98b0cb43a2d925bb65e055b07b4a08"><div class="ttname"><a href="namespaceafio__v2__xxx.html#aca98b0cb43a2d925bb65e055b07b4a08">afio_v2_xxx::temp_inode</a></div><div class="ttdeci">result&lt; file_handle &gt; temp_inode(const path_handle &amp;dirh=path_discovery::storage_backed_temporary_files_directory(), file_handle::mode _mode=file_handle::mode::write, file_handle::flag flags=file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:352</div></div>
+<div class="fragment"><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;{</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#aca98b0cb43a2d925bb65e055b07b4a08">file_handle::temp_inode</a>(std::forward&lt;decltype(dirh)&gt;(dirh), std::forward&lt;decltype(_mode)&gt;(_mode), std::forward&lt;decltype(flags)&gt;(flags));</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_aca98b0cb43a2d925bb65e055b07b4a08"><div class="ttname"><a href="namespaceafio__v2__xxx.html#aca98b0cb43a2d925bb65e055b07b4a08">afio_v2_xxx::temp_inode</a></div><div class="ttdeci">result&lt; file_handle &gt; temp_inode(const path_handle &amp;dirh=path_discovery::storage_backed_temporary_files_directory(), file_handle::mode _mode=file_handle::mode::write, file_handle::flag flags=file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:357</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -2618,7 +2618,7 @@ For portability, you can only assume that barriers write order for a single hand
</dd>
</dl>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX ftruncate() or SetFileInformationByHandle() can return. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;{</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.truncate(std::forward&lt;decltype(newsize)&gt;(newsize));</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;}</div></div><!-- fragment -->
+<div class="fragment"><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;{</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.truncate(std::forward&lt;decltype(newsize)&gt;(newsize));</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="a6164dd52993407a203124b0761cc3bbc"></a>
@@ -2657,7 +2657,7 @@ For portability, you can only assume that barriers write order for a single hand
<p>Resize the current maximum permitted extent of the memory section to the given extent. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">self</td><td>The object whose member function to call. </td></tr>
- <tr><td class="paramname">newsize</td><td>The new size of the memory section, which cannot be zero. Specify zero to use <code>backing.length()</code>. This cannot exceed the size of any backing file used if that file is not writable.</td></tr>
+ <tr><td class="paramname">newsize</td><td>The new size of the memory section, which cannot be zero. Specify zero to use <code>backing.maximum_extent()</code>. This cannot exceed the size of any backing file used if that file is not writable.</td></tr>
</table>
</dd>
</dl>
@@ -2987,7 +2987,7 @@ For portability, you can only assume that barriers write order for a single hand
</dl>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX write() can return, <code>errc::timed_out</code>, <code>errc::operation_canceled</code>. <code>errc::not_supported</code> may be returned if deadline i/o is not possible with this particular handle configuration (e.g. writing to regular files on POSIX or writing to a non-overlapped HANDLE on Windows). </dd></dl>
<dl class="section user"><dt>Memory Allocations</dt><dd>The default synchronous implementation in file_handle performs no memory allocation. The asynchronous implementation in async_file_handle may perform one calloc and one free. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;{</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.zero(std::forward&lt;decltype(offset)&gt;(offset), std::forward&lt;decltype(bytes)&gt;(bytes), std::forward&lt;decltype(d)&gt;(d));</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;}</div></div><!-- fragment -->
+<div class="fragment"><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; <span class="keywordflow">return</span> <span class="keyword">self</span>.zero(std::forward&lt;decltype(offset)&gt;(offset), std::forward&lt;decltype(bytes)&gt;(bytes), std::forward&lt;decltype(d)&gt;(d));</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
</div><!-- contents -->
diff --git a/namespacemembers.html b/namespacemembers.html
index 707b5e7c..9bd7f815 100644
--- a/namespacemembers.html
+++ b/namespacemembers.html
@@ -171,7 +171,7 @@ $(document).ready(function(){initNavTree('namespacemembers.html','');});
<h3><a id="index_l"></a>- l -</h3><ul>
<li>length()
-: <a class="el" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">afio_v2_xxx</a>
+: <a class="el" href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">afio_v2_xxx</a>
</li>
<li>log()
: <a class="el" href="namespaceafio__v2__xxx.html#a08363b8572e6a8971a6d236d54fb8287">afio_v2_xxx</a>
@@ -201,6 +201,9 @@ $(document).ready(function(){initNavTree('namespacemembers.html','');});
<li>mapped_temp_inode()
: <a class="el" href="namespaceafio__v2__xxx.html#ac021261f7a8696b0f4cbdcfacef1e88a">afio_v2_xxx</a>
</li>
+<li>maximum_extent()
+: <a class="el" href="namespaceafio__v2__xxx.html#a8fbd7f7cc6449428269e22f9765b1d8d">afio_v2_xxx</a>
+</li>
<li>memory_backed_temporary_files_directory()
: <a class="el" href="namespaceafio__v2__xxx_1_1path__discovery.html#ae34df4ad4e4f2c977ef99575713fd9bf">afio_v2_xxx::path_discovery</a>
</li>
diff --git a/namespacemembers_func.html b/namespacemembers_func.html
index a02c13db..da8ab13f 100644
--- a/namespacemembers_func.html
+++ b/namespacemembers_func.html
@@ -171,7 +171,7 @@ $(document).ready(function(){initNavTree('namespacemembers_func.html','');});
<h3><a id="index_l"></a>- l -</h3><ul>
<li>length()
-: <a class="el" href="namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc">afio_v2_xxx</a>
+: <a class="el" href="namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee">afio_v2_xxx</a>
</li>
<li>log()
: <a class="el" href="namespaceafio__v2__xxx.html#a08363b8572e6a8971a6d236d54fb8287">afio_v2_xxx</a>
@@ -198,6 +198,9 @@ $(document).ready(function(){initNavTree('namespacemembers_func.html','');});
<li>mapped_temp_inode()
: <a class="el" href="namespaceafio__v2__xxx.html#ac021261f7a8696b0f4cbdcfacef1e88a">afio_v2_xxx</a>
</li>
+<li>maximum_extent()
+: <a class="el" href="namespaceafio__v2__xxx.html#a8fbd7f7cc6449428269e22f9765b1d8d">afio_v2_xxx</a>
+</li>
<li>memory_backed_temporary_files_directory()
: <a class="el" href="namespaceafio__v2__xxx_1_1path__discovery.html#ae34df4ad4e4f2c977ef99575713fd9bf">afio_v2_xxx::path_discovery</a>
</li>
diff --git a/navtreeindex1.js b/navtreeindex1.js
index 4f76bc98..816e9225 100644
--- a/navtreeindex1.js
+++ b/navtreeindex1.js
@@ -32,6 +32,7 @@ var NAVTREEINDEX1 =
"classafio__v2__xxx_1_1async__file__handle.html#a03d1774e3ad8678fb4aac4ced57beeef":[3,0,0,4,44],
"classafio__v2__xxx_1_1async__file__handle.html#a03d2084c14493ccb95b19503df109bba":[3,0,0,4,92],
"classafio__v2__xxx_1_1async__file__handle.html#a0a1c4773b9fa7bbd04fee0756075d319":[3,0,0,4,82],
+"classafio__v2__xxx_1_1async__file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f":[3,0,0,4,63],
"classafio__v2__xxx_1_1async__file__handle.html#a0cd3e4803cfe986815ed8c27a70db777":[3,0,0,4,41],
"classafio__v2__xxx_1_1async__file__handle.html#a0ce3592c95434ac52711e86e9a22ed6d":[3,0,0,4,2],
"classafio__v2__xxx_1_1async__file__handle.html#a0dacafa3abaa61b3b26ffa305fc09970":[3,0,0,4,15],
@@ -39,7 +40,6 @@ var NAVTREEINDEX1 =
"classafio__v2__xxx_1_1async__file__handle.html#a1e9d59b7d6b6d4f0762db5aa013f373b":[3,0,0,4,17],
"classafio__v2__xxx_1_1async__file__handle.html#a1f4b597a58fd4713d04ec81ab70ab801":[3,0,0,4,79],
"classafio__v2__xxx_1_1async__file__handle.html#a1f7779618e9b0e27bd1619025dcbb617":[3,0,0,4,77],
-"classafio__v2__xxx_1_1async__file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5":[3,0,0,4,59],
"classafio__v2__xxx_1_1async__file__handle.html#a243156928e89b8988a1412f211b3b603":[3,0,0,4,34],
"classafio__v2__xxx_1_1async__file__handle.html#a26697f7ce532e54b954a47f48286b2cb":[3,0,0,4,70],
"classafio__v2__xxx_1_1async__file__handle.html#a2e4a0216d0cf67f26136f17fc0100a16":[3,0,0,4,8],
@@ -52,7 +52,7 @@ var NAVTREEINDEX1 =
"classafio__v2__xxx_1_1async__file__handle.html#a4194a05dd9694d2c47d5a45f925db1d7":[3,0,0,4,56],
"classafio__v2__xxx_1_1async__file__handle.html#a4252c4047fb520bcedfcd90040c17b37":[3,0,0,4,14],
"classafio__v2__xxx_1_1async__file__handle.html#a45873fd0b1ab27f936f046ed14124afd":[3,0,0,4,81],
-"classafio__v2__xxx_1_1async__file__handle.html#a4d9cbbb7aae98704c6ad97de080c4210":[3,0,0,4,63],
+"classafio__v2__xxx_1_1async__file__handle.html#a4d9cbbb7aae98704c6ad97de080c4210":[3,0,0,4,62],
"classafio__v2__xxx_1_1async__file__handle.html#a526c300d421155ccc071b04db4bca65d":[3,0,0,4,52],
"classafio__v2__xxx_1_1async__file__handle.html#a54790e954f57372b87b095451cc79c38":[3,0,0,4,37],
"classafio__v2__xxx_1_1async__file__handle.html#a549e10eb62780d500a19cd7cdc0536ac":[3,0,0,4,20],
@@ -77,7 +77,7 @@ var NAVTREEINDEX1 =
"classafio__v2__xxx_1_1async__file__handle.html#a747962d0776c0fa9e79c9aa9b86da1c0":[3,0,0,4,72],
"classafio__v2__xxx_1_1async__file__handle.html#a771ef2bf39ad784eb6265dde077792ad":[3,0,0,4,96],
"classafio__v2__xxx_1_1async__file__handle.html#a875440f1b368472f1840c70c266f3a48":[3,0,0,4,64],
-"classafio__v2__xxx_1_1async__file__handle.html#a88689b15e6e8b6ce1f945737dee4369e":[3,0,0,4,60],
+"classafio__v2__xxx_1_1async__file__handle.html#a88689b15e6e8b6ce1f945737dee4369e":[3,0,0,4,59],
"classafio__v2__xxx_1_1async__file__handle.html#a8b4e8c3d96a045d68b7490482a6fcf34":[3,0,0,4,4],
"classafio__v2__xxx_1_1async__file__handle.html#a8bac7dde456d65b956f324d981461dd2":[3,0,0,4,65],
"classafio__v2__xxx_1_1async__file__handle.html#a8d0223e2633274060d94f68b9431dc2f":[3,0,0,4,35],
@@ -105,7 +105,7 @@ var NAVTREEINDEX1 =
"classafio__v2__xxx_1_1async__file__handle.html#acd47b60681f19ee2d2906d27ee703611":[3,0,0,4,24],
"classafio__v2__xxx_1_1async__file__handle.html#acf004a49616f731287c3f57b025a9aec":[3,0,0,4,40],
"classafio__v2__xxx_1_1async__file__handle.html#ad02958278a0d92e4ec4fb864ba1eb35b":[3,0,0,4,50],
-"classafio__v2__xxx_1_1async__file__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897":[3,0,0,4,61],
+"classafio__v2__xxx_1_1async__file__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897":[3,0,0,4,60],
"classafio__v2__xxx_1_1async__file__handle.html#add161546c0769941fce4fd9f06934e03":[3,0,0,4,87],
"classafio__v2__xxx_1_1async__file__handle.html#ae33d4d0faa1377cd371bd6a0ae0769ae":[3,0,0,4,46],
"classafio__v2__xxx_1_1async__file__handle.html#ae56f6754d6ad0a037ebb134d83f45dfc":[3,0,0,4,78],
@@ -113,7 +113,7 @@ var NAVTREEINDEX1 =
"classafio__v2__xxx_1_1async__file__handle.html#ae881dbcdc2b71009f2a61895a0a45a3e":[3,0,0,4,7],
"classafio__v2__xxx_1_1async__file__handle.html#ae9f4f5f9cc386f5188a9977145edbe6c":[3,0,0,4,90],
"classafio__v2__xxx_1_1async__file__handle.html#aea56c3f195f2d1376e2603a9d9a9df59":[3,0,0,4,11],
-"classafio__v2__xxx_1_1async__file__handle.html#aeabd245b6edcfb57779b29c6f2ea9737":[3,0,0,4,62],
+"classafio__v2__xxx_1_1async__file__handle.html#aeabd245b6edcfb57779b29c6f2ea9737":[3,0,0,4,61],
"classafio__v2__xxx_1_1async__file__handle.html#aefac4710e5617264347f437b04732c01":[3,0,0,4,86],
"classafio__v2__xxx_1_1async__file__handle.html#af024e3d92d9a01ac367734e9cdc517fb":[3,0,0,4,91],
"classafio__v2__xxx_1_1async__file__handle.html#af056e7f0890da5d370afc08d6e5a56c8":[3,0,0,4,12],
@@ -204,9 +204,9 @@ var NAVTREEINDEX1 =
"classafio__v2__xxx_1_1file__handle.html#a054cbed933268b46efbf5d54a144e04b":[3,0,0,19,12],
"classafio__v2__xxx_1_1file__handle.html#a09a61bdba90e5632fb7234c6610fa03f":[3,0,0,19,5],
"classafio__v2__xxx_1_1file__handle.html#a0a1c4773b9fa7bbd04fee0756075d319":[3,0,0,19,69],
+"classafio__v2__xxx_1_1file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f":[3,0,0,19,52],
"classafio__v2__xxx_1_1file__handle.html#a1f7779618e9b0e27bd1619025dcbb617":[3,0,0,19,65],
"classafio__v2__xxx_1_1file__handle.html#a2066c93863f2531d297ea9a3ca9518c4":[3,0,0,19,1],
-"classafio__v2__xxx_1_1file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5":[3,0,0,19,48],
"classafio__v2__xxx_1_1file__handle.html#a243156928e89b8988a1412f211b3b603":[3,0,0,19,28],
"classafio__v2__xxx_1_1file__handle.html#a252eade7f755319a46ea0ba211a9ff78":[3,0,0,19,7],
"classafio__v2__xxx_1_1file__handle.html#a349e001cbe359d4e7a8f066c69e9361e":[3,0,0,19,40],
@@ -218,7 +218,7 @@ var NAVTREEINDEX1 =
"classafio__v2__xxx_1_1file__handle.html#a427c09aa323c231c01cd1749bbfda72d":[3,0,0,19,14],
"classafio__v2__xxx_1_1file__handle.html#a45873fd0b1ab27f936f046ed14124afd":[3,0,0,19,68],
"classafio__v2__xxx_1_1file__handle.html#a4b71167ad7e04f594adbdd0daa602528":[3,0,0,19,0],
-"classafio__v2__xxx_1_1file__handle.html#a4d9cbbb7aae98704c6ad97de080c4210":[3,0,0,19,52],
+"classafio__v2__xxx_1_1file__handle.html#a4d9cbbb7aae98704c6ad97de080c4210":[3,0,0,19,51],
"classafio__v2__xxx_1_1file__handle.html#a4e9ca4c246ba5a8bc26669553559fd2c":[3,0,0,19,8],
"classafio__v2__xxx_1_1file__handle.html#a526c300d421155ccc071b04db4bca65d":[3,0,0,19,41],
"classafio__v2__xxx_1_1file__handle.html#a54790e954f57372b87b095451cc79c38":[3,0,0,19,30],
@@ -242,7 +242,7 @@ var NAVTREEINDEX1 =
"classafio__v2__xxx_1_1file__handle.html#a829e02c14ce72c7228cf10668377bf75":[3,0,0,19,15],
"classafio__v2__xxx_1_1file__handle.html#a8405576beeec0745fe3e038367f01956":[3,0,0,19,3],
"classafio__v2__xxx_1_1file__handle.html#a875440f1b368472f1840c70c266f3a48":[3,0,0,19,53],
-"classafio__v2__xxx_1_1file__handle.html#a88689b15e6e8b6ce1f945737dee4369e":[3,0,0,19,49],
+"classafio__v2__xxx_1_1file__handle.html#a88689b15e6e8b6ce1f945737dee4369e":[3,0,0,19,48],
"classafio__v2__xxx_1_1file__handle.html#a8e2c8f7c0b75acc4bdf6456da836c880":[3,0,0,19,54],
"classafio__v2__xxx_1_1file__handle.html#a917a528bb0edef02b1a0f535646b7009":[3,0,0,19,29],
"classafio__v2__xxx_1_1file__handle.html#a928a8ab64d5b7d68dc7e2b3e5849df24":[3,0,0,19,58],
diff --git a/navtreeindex2.js b/navtreeindex2.js
index e81886d7..726915a0 100644
--- a/navtreeindex2.js
+++ b/navtreeindex2.js
@@ -12,7 +12,7 @@ var NAVTREEINDEX2 =
"classafio__v2__xxx_1_1file__handle.html#acf2feb73c81c358ec67681d527384f4c":[3,0,0,19,2],
"classafio__v2__xxx_1_1file__handle.html#ad02958278a0d92e4ec4fb864ba1eb35b":[3,0,0,19,39],
"classafio__v2__xxx_1_1file__handle.html#ad05b3b7347d4dabd53ee872bdea4c4ab":[3,0,0,19,6],
-"classafio__v2__xxx_1_1file__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897":[3,0,0,19,50],
+"classafio__v2__xxx_1_1file__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897":[3,0,0,19,49],
"classafio__v2__xxx_1_1file__handle.html#adce16c0da44c961430adad3691716c7e":[3,0,0,19,4],
"classafio__v2__xxx_1_1file__handle.html#adceeae22eec165949a0947e2d7eb1882":[3,0,0,19,9],
"classafio__v2__xxx_1_1file__handle.html#add161546c0769941fce4fd9f06934e03":[3,0,0,19,74],
@@ -21,7 +21,7 @@ var NAVTREEINDEX2 =
"classafio__v2__xxx_1_1file__handle.html#ae56f6754d6ad0a037ebb134d83f45dfc":[3,0,0,19,66],
"classafio__v2__xxx_1_1file__handle.html#ae579de33d4d008c50b4da07b641b3ba5":[3,0,0,19,23],
"classafio__v2__xxx_1_1file__handle.html#ae789484988ef5ae7eeb582439cf94904":[3,0,0,19,19],
-"classafio__v2__xxx_1_1file__handle.html#aeabd245b6edcfb57779b29c6f2ea9737":[3,0,0,19,51],
+"classafio__v2__xxx_1_1file__handle.html#aeabd245b6edcfb57779b29c6f2ea9737":[3,0,0,19,50],
"classafio__v2__xxx_1_1file__handle.html#aefac4710e5617264347f437b04732c01":[3,0,0,19,73],
"classafio__v2__xxx_1_1file__handle.html#af024e3d92d9a01ac367734e9cdc517fb":[3,0,0,19,76],
"classafio__v2__xxx_1_1file__handle.html#af1019cc2ee2dcdd727ef19b2efd50c77":[3,0,0,19,13],
diff --git a/navtreeindex3.js b/navtreeindex3.js
index 657a27a4..eca52920 100644
--- a/navtreeindex3.js
+++ b/navtreeindex3.js
@@ -65,8 +65,8 @@ var NAVTREEINDEX3 =
"classafio__v2__xxx_1_1mapped__file__handle.html#a0a1c4773b9fa7bbd04fee0756075d319":[3,0,0,26,79],
"classafio__v2__xxx_1_1mapped__file__handle.html#a12b186b46922da667e4efdd9a63e061c":[3,0,0,26,21],
"classafio__v2__xxx_1_1mapped__file__handle.html#a16df7a1dad404aadca8ee1166c558bf4":[3,0,0,26,2],
+"classafio__v2__xxx_1_1mapped__file__handle.html#a18f9e44522bdab10577af1abd953ad95":[3,0,0,26,80],
"classafio__v2__xxx_1_1mapped__file__handle.html#a1d291996a3f9712d93db5f0753478636":[3,0,0,26,5],
-"classafio__v2__xxx_1_1mapped__file__handle.html#a1dc81182455d0cceb0eb8db1a19df464":[3,0,0,26,80],
"classafio__v2__xxx_1_1mapped__file__handle.html#a1e5228aa6431b2770752e842bae5123b":[3,0,0,26,18],
"classafio__v2__xxx_1_1mapped__file__handle.html#a1f7779618e9b0e27bd1619025dcbb617":[3,0,0,26,74],
"classafio__v2__xxx_1_1mapped__file__handle.html#a243156928e89b8988a1412f211b3b603":[3,0,0,26,28],
@@ -82,7 +82,7 @@ var NAVTREEINDEX3 =
"classafio__v2__xxx_1_1mapped__file__handle.html#a4195d7c5e0a05273ea92d9913189456c":[3,0,0,26,17],
"classafio__v2__xxx_1_1mapped__file__handle.html#a4356735ad4ed5508a11d8425ecebb71d":[3,0,0,26,6],
"classafio__v2__xxx_1_1mapped__file__handle.html#a4987fc0ceef3c36f60a8b097083c22f4":[3,0,0,26,88],
-"classafio__v2__xxx_1_1mapped__file__handle.html#a4d9cbbb7aae98704c6ad97de080c4210":[3,0,0,26,57],
+"classafio__v2__xxx_1_1mapped__file__handle.html#a4d9cbbb7aae98704c6ad97de080c4210":[3,0,0,26,56],
"classafio__v2__xxx_1_1mapped__file__handle.html#a526c300d421155ccc071b04db4bca65d":[3,0,0,26,44],
"classafio__v2__xxx_1_1mapped__file__handle.html#a54790e954f57372b87b095451cc79c38":[3,0,0,26,31],
"classafio__v2__xxx_1_1mapped__file__handle.html#a5a5244ab1a15053aefe93f2c253db5b3":[3,0,0,26,81],
@@ -94,28 +94,28 @@ var NAVTREEINDEX3 =
"classafio__v2__xxx_1_1mapped__file__handle.html#a672324d44ea84ccfb71594c1036628ac":[3,0,0,26,71],
"classafio__v2__xxx_1_1mapped__file__handle.html#a6860b9626adc4d8e6db3ebb92974c054":[3,0,0,26,82],
"classafio__v2__xxx_1_1mapped__file__handle.html#a6ae97ef40cdd0932e0e35cae5b5c8eb4":[3,0,0,26,1],
-"classafio__v2__xxx_1_1mapped__file__handle.html#a6e92c497a0070314630c6dbf6f76b933":[3,0,0,26,51],
"classafio__v2__xxx_1_1mapped__file__handle.html#a71137cb82edd9a1bcb24f64886b5826d":[3,0,0,26,25],
"classafio__v2__xxx_1_1mapped__file__handle.html#a71d7636f40607829cacc2c974c4a2a28":[3,0,0,26,62],
"classafio__v2__xxx_1_1mapped__file__handle.html#a747962d0776c0fa9e79c9aa9b86da1c0":[3,0,0,26,66],
"classafio__v2__xxx_1_1mapped__file__handle.html#a74dfae7f50c56037cc4260227a13b6d8":[3,0,0,26,87],
-"classafio__v2__xxx_1_1mapped__file__handle.html#a767caa74d636805d0986adc59b70060c":[3,0,0,26,56],
+"classafio__v2__xxx_1_1mapped__file__handle.html#a767caa74d636805d0986adc59b70060c":[3,0,0,26,55],
"classafio__v2__xxx_1_1mapped__file__handle.html#a76d2631eef67d71930e9d1c690c31a8d":[3,0,0,26,11],
"classafio__v2__xxx_1_1mapped__file__handle.html#a771ef2bf39ad784eb6265dde077792ad":[3,0,0,26,97],
"classafio__v2__xxx_1_1mapped__file__handle.html#a7c7dc970e310638e02db15fb54a713c3":[3,0,0,26,68],
"classafio__v2__xxx_1_1mapped__file__handle.html#a7e45c857d47961469496795f1c5c242b":[3,0,0,26,96],
"classafio__v2__xxx_1_1mapped__file__handle.html#a875440f1b368472f1840c70c266f3a48":[3,0,0,26,58],
-"classafio__v2__xxx_1_1mapped__file__handle.html#a88689b15e6e8b6ce1f945737dee4369e":[3,0,0,26,52],
+"classafio__v2__xxx_1_1mapped__file__handle.html#a88689b15e6e8b6ce1f945737dee4369e":[3,0,0,26,51],
"classafio__v2__xxx_1_1mapped__file__handle.html#a8e129e3bc9b5f2f8f51d6b9256aa3fa9":[3,0,0,26,29],
"classafio__v2__xxx_1_1mapped__file__handle.html#a9181a6c406a7206a743be7be368b17d8":[3,0,0,26,94],
"classafio__v2__xxx_1_1mapped__file__handle.html#a928a8ab64d5b7d68dc7e2b3e5849df24":[3,0,0,26,63],
"classafio__v2__xxx_1_1mapped__file__handle.html#a959c04239b557c6d3c3c0e996563abb8":[3,0,0,26,95],
+"classafio__v2__xxx_1_1mapped__file__handle.html#a96936484028ac57f6150560b55b26da7":[3,0,0,26,57],
"classafio__v2__xxx_1_1mapped__file__handle.html#a96b9da71ee7791fbaaa2470c936ec763":[3,0,0,26,83],
"classafio__v2__xxx_1_1mapped__file__handle.html#a97ffbbf53f51549549efef0b49e125dc":[3,0,0,26,27],
"classafio__v2__xxx_1_1mapped__file__handle.html#a9cb4595c554c6d1241e8af3442f89b38":[3,0,0,26,22],
"classafio__v2__xxx_1_1mapped__file__handle.html#aa28cc8821b7516afacf6a8d2e19cdf14":[3,0,0,26,19],
"classafio__v2__xxx_1_1mapped__file__handle.html#aa53d88105df8c6be01be649829a65b14":[3,0,0,26,39],
-"classafio__v2__xxx_1_1mapped__file__handle.html#aa7fe74ccbf2fc255897bacaa6c41d319":[3,0,0,26,55],
+"classafio__v2__xxx_1_1mapped__file__handle.html#aa7fe74ccbf2fc255897bacaa6c41d319":[3,0,0,26,54],
"classafio__v2__xxx_1_1mapped__file__handle.html#aaacc27a62ce0859506d7443f0d0e7adf":[3,0,0,26,61],
"classafio__v2__xxx_1_1mapped__file__handle.html#aac62f621c42be6eeb8d9a5700da367f9":[3,0,0,26,46],
"classafio__v2__xxx_1_1mapped__file__handle.html#ab1d9c370e86dc327e3efad1c71db3cb3":[3,0,0,26,24],
@@ -129,7 +129,7 @@ var NAVTREEINDEX3 =
"classafio__v2__xxx_1_1mapped__file__handle.html#ac7058e8556442440b6ae21bf3960b2fd":[3,0,0,26,60],
"classafio__v2__xxx_1_1mapped__file__handle.html#acb3cf485007ae052ad4d7fa489cb6024":[3,0,0,26,4],
"classafio__v2__xxx_1_1mapped__file__handle.html#ad02958278a0d92e4ec4fb864ba1eb35b":[3,0,0,26,42],
-"classafio__v2__xxx_1_1mapped__file__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897":[3,0,0,26,53],
+"classafio__v2__xxx_1_1mapped__file__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897":[3,0,0,26,52],
"classafio__v2__xxx_1_1mapped__file__handle.html#ad4989ff4925e90b34a1cdea824bf0bac":[3,0,0,26,8],
"classafio__v2__xxx_1_1mapped__file__handle.html#ad8714dac7f0b13ceca5f21ba25e1fa10":[3,0,0,26,59],
"classafio__v2__xxx_1_1mapped__file__handle.html#add161546c0769941fce4fd9f06934e03":[3,0,0,26,86],
@@ -141,7 +141,7 @@ var NAVTREEINDEX3 =
"classafio__v2__xxx_1_1mapped__file__handle.html#ae579de33d4d008c50b4da07b641b3ba5":[3,0,0,26,23],
"classafio__v2__xxx_1_1mapped__file__handle.html#ae84ef76c65209bd3ed593cd64e3d7c2a":[3,0,0,26,93],
"classafio__v2__xxx_1_1mapped__file__handle.html#ae8e389b2dbdff1b1f155ea351f5ba9c5":[3,0,0,26,30],
-"classafio__v2__xxx_1_1mapped__file__handle.html#aeabd245b6edcfb57779b29c6f2ea9737":[3,0,0,26,54],
+"classafio__v2__xxx_1_1mapped__file__handle.html#aeabd245b6edcfb57779b29c6f2ea9737":[3,0,0,26,53],
"classafio__v2__xxx_1_1mapped__file__handle.html#aefac4710e5617264347f437b04732c01":[3,0,0,26,85],
"classafio__v2__xxx_1_1mapped__file__handle.html#af024e3d92d9a01ac367734e9cdc517fb":[3,0,0,26,89],
"classafio__v2__xxx_1_1mapped__file__handle.html#af1610ec7fb0a41f039e3e17e0dc467ab":[3,0,0,26,72],
diff --git a/navtreeindex4.js b/navtreeindex4.js
index 2c17e9fb..4b93db5f 100644
--- a/navtreeindex4.js
+++ b/navtreeindex4.js
@@ -152,13 +152,13 @@ var NAVTREEINDEX4 =
"file__handle_8hpp.html":[4,0,0,0,0,6],
"file__handle_8hpp.html#a579d619e4d73e584fdd41e34761afa67":[4,0,0,0,0,6,6],
"file__handle_8hpp.html#a84d22c966fcabe50de30ad8cf26c7241":[4,0,0,0,0,6,9],
+"file__handle_8hpp.html#a8fbd7f7cc6449428269e22f9765b1d8d":[4,0,0,0,0,6,4],
"file__handle_8hpp.html#aa14b24c8bc330dd8e472f42676ba03d6":[4,0,0,0,0,6,7],
"file__handle_8hpp.html#aac0b7d76c4298e86cef49c832c93edec":[4,0,0,0,0,6,5],
"file__handle_8hpp.html#ab92ca63383ef7fe58af4620570d12803":[4,0,0,0,0,6,3],
"file__handle_8hpp.html#ac3c009153d916556b991d4a79c664fe9":[4,0,0,0,0,6,2],
"file__handle_8hpp.html#aca98b0cb43a2d925bb65e055b07b4a08":[4,0,0,0,0,6,8],
"file__handle_8hpp.html#ae412aa7c9e37601d1814e75d09795185":[4,0,0,0,0,6,10],
-"file__handle_8hpp.html#afe66c5875c48c8bd172901a1159ccbdc":[4,0,0,0,0,6,4],
"files.html":[4,0],
"fs__handle_8hpp.html":[4,0,0,0,0,7],
"fs__handle_8hpp.html#abefe1503efb01ea89200b829bcd87713":[4,0,0,0,0,7,2],
diff --git a/navtreeindex8.js b/navtreeindex8.js
index c917f009..f596ce90 100644
--- a/navtreeindex8.js
+++ b/navtreeindex8.js
@@ -10,6 +10,6 @@ var NAVTREEINDEX8 =
"version_8hpp.html#a5d898772f113c64c7fa9ecb267a85e79":[4,0,0,0,2,5],
"version_8hpp.html#aa446d6d4b32123465e362629430ea1c2":[4,0,0,0,2,4],
"version_8hpp.html#ab033775f211bacf115ee33e020eca664":[4,0,0,0,2,0],
-"version_8hpp.html#ab767a104191b56793f1e63713f8aa696":[4,0,0,0,2,2],
-"version_8hpp.html#ab767a104191b56793f1e63713f8aa696":[4,0,0,0,2,1]
+"version_8hpp.html#ab767a104191b56793f1e63713f8aa696":[4,0,0,0,2,1],
+"version_8hpp.html#ab767a104191b56793f1e63713f8aa696":[4,0,0,0,2,2]
};
diff --git a/search/all_12.js b/search/all_12.js
index 68a75776..8407e179 100644
--- a/search/all_12.js
+++ b/search/all_12.js
@@ -2,7 +2,7 @@ var searchData=
[
['uint128',['uint128',['../namespaceafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex.html#a48547949428f2da935a05cad87f2a7ff',1,'afio_v2_xxx::algorithm::shared_fs_mutex']]],
['uint64',['uint64',['../namespaceafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex.html#af6e3781d4c08b2d3f74b32255f49479f',1,'afio_v2_xxx::algorithm::shared_fs_mutex']]],
- ['underlying_5ffile_5flength',['underlying_file_length',['../classafio__v2__xxx_1_1mapped__file__handle.html#a1dc81182455d0cceb0eb8db1a19df464',1,'afio_v2_xxx::mapped_file_handle']]],
+ ['underlying_5ffile_5fmaximum_5fextent',['underlying_file_maximum_extent',['../classafio__v2__xxx_1_1mapped__file__handle.html#a18f9e44522bdab10577af1abd953ad95',1,'afio_v2_xxx::mapped_file_handle']]],
['unique_5fid',['unique_id',['../classafio__v2__xxx_1_1fs__handle.html#a5a5244ab1a15053aefe93f2c253db5b3',1,'afio_v2_xxx::fs_handle']]],
['unique_5fid_5ftype',['unique_id_type',['../classafio__v2__xxx_1_1fs__handle.html#a0344f48ef10fa2b94199d5566aedd879',1,'afio_v2_xxx::fs_handle']]],
['unknown',['unknown',['../structafio__v2__xxx_1_1path__discovery_1_1discovered__path.html#a1deccea0a3ad1c3a5a2688a1a3cc118caad921d60486366258809553a3db49a4a',1,'afio_v2_xxx::path_discovery::discovered_path']]],
diff --git a/search/all_a.js b/search/all_a.js
index 436a3fc4..6f29c526 100644
--- a/search/all_a.js
+++ b/search/all_a.js
@@ -2,7 +2,7 @@ var searchData=
[
['leafname',['leafname',['../structafio__v2__xxx_1_1directory__entry.html#aca105b4acce38e178a8c1656fc02f3e8',1,'afio_v2_xxx::directory_entry']]],
['len',['len',['../structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a629e060c2032a433613cf42dd969d61e',1,'afio_v2_xxx::io_handle::buffer_type::len()'],['../structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#af355ceae82988f25cfa34d595550cbcf',1,'afio_v2_xxx::io_handle::const_buffer_type::len()']]],
- ['length',['length',['../structafio__v2__xxx_1_1path__view_1_1c__str.html#a879ec6f6501d659bc7b04745c1a33eaa',1,'afio_v2_xxx::path_view::c_str::length()'],['../classafio__v2__xxx_1_1file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5',1,'afio_v2_xxx::file_handle::length()'],['../classafio__v2__xxx_1_1section__handle.html#a9f0dec7d839f348c39e7a185777866ea',1,'afio_v2_xxx::section_handle::length()'],['../classafio__v2__xxx_1_1map__handle.html#aba6ebe9afaccfaf59a92c5b85c72e7d2',1,'afio_v2_xxx::map_handle::length()'],['../classafio__v2__xxx_1_1mapped__file__handle.html#a6e92c497a0070314630c6dbf6f76b933',1,'afio_v2_xxx::mapped_file_handle::length()'],['../namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc',1,'afio_v2_xxx::length(const file_handle &amp;self) noexcept'],['../namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee',1,'afio_v2_xxx::length(const section_handle &amp;self) noexcept'],['../namespaceafio__v2__xxx.html#abb42093725f3206e37e53ec44c39ad68',1,'afio_v2_xxx::length(const map_handle &amp;self) noexcept']]],
+ ['length',['length',['../structafio__v2__xxx_1_1path__view_1_1c__str.html#a879ec6f6501d659bc7b04745c1a33eaa',1,'afio_v2_xxx::path_view::c_str::length()'],['../classafio__v2__xxx_1_1section__handle.html#a9f0dec7d839f348c39e7a185777866ea',1,'afio_v2_xxx::section_handle::length()'],['../classafio__v2__xxx_1_1map__handle.html#aba6ebe9afaccfaf59a92c5b85c72e7d2',1,'afio_v2_xxx::map_handle::length()'],['../namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee',1,'afio_v2_xxx::length(const section_handle &amp;self) noexcept'],['../namespaceafio__v2__xxx.html#abb42093725f3206e37e53ec44c39ad68',1,'afio_v2_xxx::length(const map_handle &amp;self) noexcept']]],
['local',['local',['../structafio__v2__xxx_1_1path__discovery_1_1discovered__path.html#a1deccea0a3ad1c3a5a2688a1a3cc118caf5ddaf0ca7929578b408c909429f68f2',1,'afio_v2_xxx::path_discovery::discovered_path']]],
['lock',['lock',['../classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e',1,'afio_v2_xxx::io_handle::lock(extent_type offset, extent_type bytes, bool exclusive=true, deadline d=deadline()) noexcept'],['../classafio__v2__xxx_1_1io__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897',1,'afio_v2_xxx::io_handle::lock(io_request&lt; buffers_type &gt; reqs, deadline d=deadline()) noexcept'],['../classafio__v2__xxx_1_1io__handle.html#aeabd245b6edcfb57779b29c6f2ea9737',1,'afio_v2_xxx::io_handle::lock(io_request&lt; const_buffers_type &gt; reqs, deadline d=deadline()) noexcept'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex.html#a2e82ae0ca11932f5287b0ca2f4834da6',1,'afio_v2_xxx::algorithm::shared_fs_mutex::shared_fs_mutex::lock(entities_type entities, deadline d=deadline(), bool spin_not_sleep=false) noexcept'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex.html#ac1dbb5f7b7887690b47b1d24940a054d',1,'afio_v2_xxx::algorithm::shared_fs_mutex::shared_fs_mutex::lock(entity_type entity, deadline d=deadline(), bool spin_not_sleep=false) noexcept']]],
['lock_5ffiles',['lock_files',['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1lock__files.html',1,'afio_v2_xxx::algorithm::shared_fs_mutex::lock_files'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1lock__files.html#a46536a17171534e4a94e5ec4e5306a98',1,'afio_v2_xxx::algorithm::shared_fs_mutex::lock_files::lock_files(const lock_files &amp;)=delete'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1lock__files.html#a21bdcd57cf9be0f1a3d6134dab68927f',1,'afio_v2_xxx::algorithm::shared_fs_mutex::lock_files::lock_files(lock_files &amp;&amp;o) noexcept']]],
diff --git a/search/all_b.js b/search/all_b.js
index d3153348..54d804a7 100644
--- a/search/all_b.js
+++ b/search/all_b.js
@@ -14,6 +14,7 @@ var searchData=
['mapped_5ftemp_5finode',['mapped_temp_inode',['../classafio__v2__xxx_1_1mapped__file__handle.html#afb68c9671a7ffb40cef4b6db0000a1a5',1,'afio_v2_xxx::mapped_file_handle::mapped_temp_inode()'],['../namespaceafio__v2__xxx.html#ac021261f7a8696b0f4cbdcfacef1e88a',1,'afio_v2_xxx::mapped_temp_inode()']]],
['max_5fbuffers',['max_buffers',['../classafio__v2__xxx_1_1io__handle.html#a4d9cbbb7aae98704c6ad97de080c4210',1,'afio_v2_xxx::io_handle']]],
['max_5fsize',['max_size',['../structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#ab6b3c4513e47e2905c8e6fe1c831d742',1,'afio_v2_xxx::storage_profile::storage_profile::max_size()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a659754b0f9d7e2f3fa26921ebe48e7c0',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::max_size()']]],
+ ['maximum_5fextent',['maximum_extent',['../classafio__v2__xxx_1_1file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f',1,'afio_v2_xxx::file_handle::maximum_extent()'],['../classafio__v2__xxx_1_1mapped__file__handle.html#a96936484028ac57f6150560b55b26da7',1,'afio_v2_xxx::mapped_file_handle::maximum_extent()'],['../namespaceafio__v2__xxx.html#a8fbd7f7cc6449428269e22f9765b1d8d',1,'afio_v2_xxx::maximum_extent()']]],
['maximum_5fprefetching',['maximum_prefetching',['../structafio__v2__xxx_1_1handle_1_1flag__base.html#a51aaa32c78950cedbc1b7a61e1738d3ea67eb5d8757f506595ca2d5c06d8389dc',1,'afio_v2_xxx::handle::flag_base']]],
['memory_5fbacked_5ftemporary_5ffiles_5fdirectory',['memory_backed_temporary_files_directory',['../namespaceafio__v2__xxx_1_1path__discovery.html#ae34df4ad4e4f2c977ef99575713fd9bf',1,'afio_v2_xxx::path_discovery']]],
['memory_5fmap',['memory_map',['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html',1,'afio_v2_xxx::algorithm::shared_fs_mutex::memory_map&lt; Hasher, HashIndexSize, SpinlockType &gt;'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html#ad8731e82e929f26c38a34450fc87d7bb',1,'afio_v2_xxx::algorithm::shared_fs_mutex::memory_map::memory_map(const memory_map &amp;)=delete'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html#af066bb4d3f9f7020b60733ff0bcc99df',1,'afio_v2_xxx::algorithm::shared_fs_mutex::memory_map::memory_map(memory_map &amp;&amp;o) noexcept']]],
diff --git a/search/functions_12.js b/search/functions_12.js
index b34813c1..d925d5f9 100644
--- a/search/functions_12.js
+++ b/search/functions_12.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['underlying_5ffile_5flength',['underlying_file_length',['../classafio__v2__xxx_1_1mapped__file__handle.html#a1dc81182455d0cceb0eb8db1a19df464',1,'afio_v2_xxx::mapped_file_handle']]],
+ ['underlying_5ffile_5fmaximum_5fextent',['underlying_file_maximum_extent',['../classafio__v2__xxx_1_1mapped__file__handle.html#a18f9e44522bdab10577af1abd953ad95',1,'afio_v2_xxx::mapped_file_handle']]],
['unique_5fid',['unique_id',['../classafio__v2__xxx_1_1fs__handle.html#a5a5244ab1a15053aefe93f2c253db5b3',1,'afio_v2_xxx::fs_handle']]],
['unlink',['unlink',['../classafio__v2__xxx_1_1fs__handle.html#a6860b9626adc4d8e6db3ebb92974c054',1,'afio_v2_xxx::fs_handle::unlink()'],['../namespaceafio__v2__xxx.html#abefe1503efb01ea89200b829bcd87713',1,'afio_v2_xxx::unlink()']]],
['unlock',['unlock',['../classafio__v2__xxx_1_1io__handle_1_1extent__guard.html#a8774c7f192061ccff6659f645d1e51fd',1,'afio_v2_xxx::io_handle::extent_guard::unlock()'],['../classafio__v2__xxx_1_1io__handle.html#a96b9da71ee7791fbaaa2470c936ec763',1,'afio_v2_xxx::io_handle::unlock()'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html#ad8a5572b95c538b21c387e0dc9ccc4b9',1,'afio_v2_xxx::algorithm::shared_fs_mutex::atomic_append::unlock()'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex_1_1entities__guard.html#afe255ddbd7c8c80b1dfe29a0b8d856ee',1,'afio_v2_xxx::algorithm::shared_fs_mutex::shared_fs_mutex::entities_guard::unlock()'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex.html#aa7ca87a0dc1181fc4c6c3b2a09bc67e3',1,'afio_v2_xxx::algorithm::shared_fs_mutex::shared_fs_mutex::unlock()'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1byte__ranges.html#ade7f672a228670cb193cf05e96368ff4',1,'afio_v2_xxx::algorithm::shared_fs_mutex::byte_ranges::unlock()'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1lock__files.html#a8b37ac390b47fd3ef61fe12b60a82755',1,'afio_v2_xxx::algorithm::shared_fs_mutex::lock_files::unlock()'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html#a49e8e7e6460f4ee1bafe8426384f2d40',1,'afio_v2_xxx::algorithm::shared_fs_mutex::memory_map::unlock()'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1safe__byte__ranges.html#aa553587bce8b59ae47ce739863f1f534',1,'afio_v2_xxx::algorithm::shared_fs_mutex::safe_byte_ranges::unlock()']]],
diff --git a/search/functions_a.js b/search/functions_a.js
index 2094fdb9..5166787c 100644
--- a/search/functions_a.js
+++ b/search/functions_a.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['length',['length',['../classafio__v2__xxx_1_1file__handle.html#a2083c37ffc746ec28f9e4d6b094d3ba5',1,'afio_v2_xxx::file_handle::length()'],['../classafio__v2__xxx_1_1section__handle.html#a9f0dec7d839f348c39e7a185777866ea',1,'afio_v2_xxx::section_handle::length()'],['../classafio__v2__xxx_1_1map__handle.html#aba6ebe9afaccfaf59a92c5b85c72e7d2',1,'afio_v2_xxx::map_handle::length()'],['../classafio__v2__xxx_1_1mapped__file__handle.html#a6e92c497a0070314630c6dbf6f76b933',1,'afio_v2_xxx::mapped_file_handle::length()'],['../namespaceafio__v2__xxx.html#afe66c5875c48c8bd172901a1159ccbdc',1,'afio_v2_xxx::length(const file_handle &amp;self) noexcept'],['../namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee',1,'afio_v2_xxx::length(const section_handle &amp;self) noexcept'],['../namespaceafio__v2__xxx.html#abb42093725f3206e37e53ec44c39ad68',1,'afio_v2_xxx::length(const map_handle &amp;self) noexcept']]],
+ ['length',['length',['../classafio__v2__xxx_1_1section__handle.html#a9f0dec7d839f348c39e7a185777866ea',1,'afio_v2_xxx::section_handle::length()'],['../classafio__v2__xxx_1_1map__handle.html#aba6ebe9afaccfaf59a92c5b85c72e7d2',1,'afio_v2_xxx::map_handle::length()'],['../namespaceafio__v2__xxx.html#afc6d4594196e16ac67b25d91e48d09ee',1,'afio_v2_xxx::length(const section_handle &amp;self) noexcept'],['../namespaceafio__v2__xxx.html#abb42093725f3206e37e53ec44c39ad68',1,'afio_v2_xxx::length(const map_handle &amp;self) noexcept']]],
['lock',['lock',['../classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e',1,'afio_v2_xxx::io_handle::lock(extent_type offset, extent_type bytes, bool exclusive=true, deadline d=deadline()) noexcept'],['../classafio__v2__xxx_1_1io__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897',1,'afio_v2_xxx::io_handle::lock(io_request&lt; buffers_type &gt; reqs, deadline d=deadline()) noexcept'],['../classafio__v2__xxx_1_1io__handle.html#aeabd245b6edcfb57779b29c6f2ea9737',1,'afio_v2_xxx::io_handle::lock(io_request&lt; const_buffers_type &gt; reqs, deadline d=deadline()) noexcept'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex.html#a2e82ae0ca11932f5287b0ca2f4834da6',1,'afio_v2_xxx::algorithm::shared_fs_mutex::shared_fs_mutex::lock(entities_type entities, deadline d=deadline(), bool spin_not_sleep=false) noexcept'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex.html#ac1dbb5f7b7887690b47b1d24940a054d',1,'afio_v2_xxx::algorithm::shared_fs_mutex::shared_fs_mutex::lock(entity_type entity, deadline d=deadline(), bool spin_not_sleep=false) noexcept']]],
['lock_5ffiles',['lock_files',['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1lock__files.html#a46536a17171534e4a94e5ec4e5306a98',1,'afio_v2_xxx::algorithm::shared_fs_mutex::lock_files::lock_files(const lock_files &amp;)=delete'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1lock__files.html#a21bdcd57cf9be0f1a3d6134dab68927f',1,'afio_v2_xxx::algorithm::shared_fs_mutex::lock_files::lock_files(lock_files &amp;&amp;o) noexcept']]],
['log',['log',['../namespaceafio__v2__xxx.html#a08363b8572e6a8971a6d236d54fb8287',1,'afio_v2_xxx']]]
diff --git a/search/functions_b.js b/search/functions_b.js
index 75302e9d..a0b5494f 100644
--- a/search/functions_b.js
+++ b/search/functions_b.js
@@ -11,6 +11,7 @@ var searchData=
['mapped_5ftemp_5finode',['mapped_temp_inode',['../classafio__v2__xxx_1_1mapped__file__handle.html#afb68c9671a7ffb40cef4b6db0000a1a5',1,'afio_v2_xxx::mapped_file_handle::mapped_temp_inode()'],['../namespaceafio__v2__xxx.html#ac021261f7a8696b0f4cbdcfacef1e88a',1,'afio_v2_xxx::mapped_temp_inode()']]],
['max_5fbuffers',['max_buffers',['../classafio__v2__xxx_1_1io__handle.html#a4d9cbbb7aae98704c6ad97de080c4210',1,'afio_v2_xxx::io_handle']]],
['max_5fsize',['max_size',['../structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#ab6b3c4513e47e2905c8e6fe1c831d742',1,'afio_v2_xxx::storage_profile::storage_profile::max_size()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a659754b0f9d7e2f3fa26921ebe48e7c0',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::max_size()']]],
+ ['maximum_5fextent',['maximum_extent',['../classafio__v2__xxx_1_1file__handle.html#a0ada5a2b1d45c41a71bc5c66eb921c9f',1,'afio_v2_xxx::file_handle::maximum_extent()'],['../classafio__v2__xxx_1_1mapped__file__handle.html#a96936484028ac57f6150560b55b26da7',1,'afio_v2_xxx::mapped_file_handle::maximum_extent()'],['../namespaceafio__v2__xxx.html#a8fbd7f7cc6449428269e22f9765b1d8d',1,'afio_v2_xxx::maximum_extent()']]],
['memory_5fbacked_5ftemporary_5ffiles_5fdirectory',['memory_backed_temporary_files_directory',['../namespaceafio__v2__xxx_1_1path__discovery.html#ae34df4ad4e4f2c977ef99575713fd9bf',1,'afio_v2_xxx::path_discovery']]],
['memory_5fmap',['memory_map',['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html#ad8731e82e929f26c38a34450fc87d7bb',1,'afio_v2_xxx::algorithm::shared_fs_mutex::memory_map::memory_map(const memory_map &amp;)=delete'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html#af066bb4d3f9f7020b60733ff0bcc99df',1,'afio_v2_xxx::algorithm::shared_fs_mutex::memory_map::memory_map(memory_map &amp;&amp;o) noexcept']]],
['message',['message',['../structafio__v2__xxx_1_1error__info.html#ae710a4b60f3da9ab91e32374f9a766d5',1,'afio_v2_xxx::error_info']]]