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-11 14:15:18 +0300
committerJenkins nedprod CI <foo@nowhere>2018-04-11 14:15:18 +0300
commit1f7a04943fc4a3409021b9205831c56fa8b7d7fd (patch)
treeea04fe733c5fd3ed91653b01306e8ce201f22ab1
parentefcc574ee4234e6a8726e0afc0ca50ef60e64623 (diff)
Travis CI updates documentation
-rw-r--r--classafio__v2__xxx_1_1algorithm_1_1mapped__span.html4
-rw-r--r--classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html4
-rw-r--r--classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html4
-rw-r--r--classafio__v2__xxx_1_1async__file__handle.html12
-rw-r--r--classafio__v2__xxx_1_1file__handle.html10
-rw-r--r--classafio__v2__xxx_1_1handle.html4
-rw-r--r--classafio__v2__xxx_1_1io__handle.html12
-rw-r--r--classafio__v2__xxx_1_1io__service.html2
-rw-r--r--classafio__v2__xxx_1_1map__handle-members.html4
-rw-r--r--classafio__v2__xxx_1_1map__handle.html39
-rw-r--r--classafio__v2__xxx_1_1map__handle.js5
-rw-r--r--classafio__v2__xxx_1_1mapped__file__handle-members.html2
-rw-r--r--classafio__v2__xxx_1_1mapped__file__handle.html18
-rw-r--r--classafio__v2__xxx_1_1mapped__file__handle.js2
-rw-r--r--classafio__v2__xxx_1_1section__handle.html4
-rw-r--r--config_8hpp.html3
-rw-r--r--functions_a.html4
-rw-r--r--functions_b.html2
-rw-r--r--functions_d.html4
-rw-r--r--functions_func_a.html4
-rw-r--r--functions_func_b.html2
-rw-r--r--functions_l.html4
-rw-r--r--functions_p.html4
-rw-r--r--functions_s.html4
-rw-r--r--functions_type.html4
-rw-r--r--functions_vars.html8
-rw-r--r--index.html2
-rw-r--r--namespaceafio__v2__xxx.html20
-rw-r--r--navtreedata.js8
-rw-r--r--navtreeindex2.js36
-rw-r--r--navtreeindex3.js90
-rw-r--r--navtreeindex4.js12
-rw-r--r--navtreeindex5.js4
-rw-r--r--navtreeindex6.js18
-rw-r--r--navtreeindex7.js8
-rw-r--r--navtreeindex8.js3
-rw-r--r--search/all_1.js2
-rw-r--r--search/all_10.js2
-rw-r--r--search/all_2.js2
-rw-r--r--search/all_4.js2
-rw-r--r--search/all_a.js2
-rw-r--r--search/all_e.js2
-rw-r--r--search/functions_1.js2
-rw-r--r--search/functions_2.js2
-rw-r--r--search/typedefs_8.js2
-rw-r--r--search/typedefs_a.js2
-rw-r--r--search/variables_2.js2
-rw-r--r--search/variables_6.js2
-rw-r--r--structafio__v2__xxx_1_1error__info.html4
-rw-r--r--structafio__v2__xxx_1_1io__handle_1_1buffer__type-members.html6
-rw-r--r--structafio__v2__xxx_1_1io__handle_1_1buffer__type.html28
-rw-r--r--structafio__v2__xxx_1_1io__handle_1_1buffer__type.js6
-rw-r--r--structafio__v2__xxx_1_1io__handle_1_1const__buffer__type-members.html6
-rw-r--r--structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html28
-rw-r--r--structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.js6
55 files changed, 261 insertions, 217 deletions
diff --git a/classafio__v2__xxx_1_1algorithm_1_1mapped__span.html b/classafio__v2__xxx_1_1algorithm_1_1mapped__span.html
index 4e2219ee..8165ed8b 100644
--- a/classafio__v2__xxx_1_1algorithm_1_1mapped__span.html
+++ b/classafio__v2__xxx_1_1algorithm_1_1mapped__span.html
@@ -176,9 +176,9 @@ 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; <span class="keywordtype">char</span> *addr = _mapping.<a class="code" href="classafio__v2__xxx_1_1map__handle.html#a1e9273d0c6aca7da6480437f6cf6638a">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="classafio__v2__xxx_1_1map__handle_html_a1e9273d0c6aca7da6480437f6cf6638a"><div class="ttname"><a href="classafio__v2__xxx_1_1map__handle.html#a1e9273d0c6aca7da6480437f6cf6638a">afio_v2_xxx::map_handle::address</a></div><div class="ttdeci">char * 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 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="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="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>
</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 13c07cc8..f53025ca 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,7 +251,7 @@ 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;char *&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) <span class="keywordtype">char</span> _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#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="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>
@@ -316,7 +316,7 @@ Protected Member Functions</h2></td></tr>
</dd>
</dl>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000005">Todo:</a></b></dt><dd>fs_mutex_append needs to check if file still exists after lock is granted, awaiting path fetching. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; AFIO_LOG_FUNCTION_CALL(0);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; OUTCOME_TRY(ret, <a class="code" href="classafio__v2__xxx_1_1file__handle.html#accb36f2bfd98393dc868653798c02d34">file_handle::file</a>(base, lockfile, <a class="code" href="classafio__v2__xxx_1_1handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18aefb2a684e4afb7d55e6147fbe5a332ee">file_handle::mode::write</a>, file_handle::creation::if_needed, <a class="code" href="classafio__v2__xxx_1_1handle.html#a6f7e37c73271968271c2342023f58c9ead5197d93c063a2b1e22d1630a39b7aef">file_handle::caching::temporary</a>));</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; atomic_append_detail::header header;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// Lock the entire header for exclusive access</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">auto</span> lockresult = ret.try_lock(0, <span class="keyword">sizeof</span>(header), <span class="keyword">true</span>);<span class="comment"></span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment"> //! \todo fs_mutex_append needs to check if file still exists after lock is granted, awaiting path fetching.</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment"></span> <span class="keywordflow">if</span>(lockresult.has_error())</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span>(lockresult.error() != std::errc::timed_out)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">return</span> lockresult.error();</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="comment">// Somebody else is also using this file</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="comment">// I am the first person to be using this (stale?) file, so write a new header and truncate</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; OUTCOME_TRYV(ret.truncate(<span class="keyword">sizeof</span>(header)));</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; memset(&amp;header, 0, <span class="keyword">sizeof</span>(header));</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; header.time_offset = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; header.first_known_good = <span class="keyword">sizeof</span>(header);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; header.first_after_hole_punch = <span class="keyword">sizeof</span>(header);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">if</span>(!skip_hashing)</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; header.hash = QUICKCPPLIB_NAMESPACE::algorithm::hash::fast_hash::hash((reinterpret_cast&lt;char *&gt;(&amp;header)) + 16, <span class="keyword">sizeof</span>(header) - 16);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; OUTCOME_TRYV(ret.write(0, {{reinterpret_cast&lt;char *&gt;(&amp;header), sizeof(header)}}));</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">// Open a shared lock on last byte in header to prevent other users zomping the file</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; OUTCOME_TRY(guard, ret.lock(<span class="keyword">sizeof</span>(header) - 1, 1, <span class="keyword">false</span>));</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// Unlock any exclusive lock I gained earlier now</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">if</span>(lockresult)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; lockresult.value().unlock();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="comment">// The constructor will read and cache the header</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">return</span> atomic_append(std::move(ret), std::move(guard), nfs_compatibility, skip_hashing);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1file__handle_html_accb36f2bfd98393dc868653798c02d34"><div class="ttname"><a href="classafio__v2__xxx_1_1file__handle.html#accb36f2bfd98393dc868653798c02d34">afio_v2_xxx::file_handle::file</a></div><div class="ttdeci">static result&lt; file_handle &gt; file(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</div></div>
+<div class="fragment"><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; AFIO_LOG_FUNCTION_CALL(0);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; OUTCOME_TRY(ret, <a class="code" href="classafio__v2__xxx_1_1file__handle.html#accb36f2bfd98393dc868653798c02d34">file_handle::file</a>(base, lockfile, <a class="code" href="classafio__v2__xxx_1_1handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18aefb2a684e4afb7d55e6147fbe5a332ee">file_handle::mode::write</a>, file_handle::creation::if_needed, <a class="code" href="classafio__v2__xxx_1_1handle.html#a6f7e37c73271968271c2342023f58c9ead5197d93c063a2b1e22d1630a39b7aef">file_handle::caching::temporary</a>));</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; atomic_append_detail::header header;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// Lock the entire header for exclusive access</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">auto</span> lockresult = ret.try_lock(0, <span class="keyword">sizeof</span>(header), <span class="keyword">true</span>);<span class="comment"></span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment"> //! \todo fs_mutex_append needs to check if file still exists after lock is granted, awaiting path fetching.</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment"></span> <span class="keywordflow">if</span>(lockresult.has_error())</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span>(lockresult.error() != std::errc::timed_out)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">return</span> lockresult.error();</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="comment">// Somebody else is also using this file</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="comment">// I am the first person to be using this (stale?) file, so write a new header and truncate</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; OUTCOME_TRYV(ret.truncate(<span class="keyword">sizeof</span>(header)));</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; memset(&amp;header, 0, <span class="keyword">sizeof</span>(header));</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; header.time_offset = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; header.first_known_good = <span class="keyword">sizeof</span>(header);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; header.first_after_hole_punch = <span class="keyword">sizeof</span>(header);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">if</span>(!skip_hashing)</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; header.hash = QUICKCPPLIB_NAMESPACE::algorithm::hash::fast_hash::hash((reinterpret_cast&lt;char *&gt;(&amp;header)) + 16, <span class="keyword">sizeof</span>(header) - 16);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; OUTCOME_TRYV(ret.write(0, {{reinterpret_cast&lt;byte *&gt;(&amp;header), sizeof(header)}}));</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">// Open a shared lock on last byte in header to prevent other users zomping the file</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; OUTCOME_TRY(guard, ret.lock(<span class="keyword">sizeof</span>(header) - 1, 1, <span class="keyword">false</span>));</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// Unlock any exclusive lock I gained earlier now</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">if</span>(lockresult)</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; lockresult.value().unlock();</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="comment">// The constructor will read and cache the header</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">return</span> atomic_append(std::move(ret), std::move(guard), nfs_compatibility, skip_hashing);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1file__handle_html_accb36f2bfd98393dc868653798c02d34"><div class="ttname"><a href="classafio__v2__xxx_1_1file__handle.html#accb36f2bfd98393dc868653798c02d34">afio_v2_xxx::file_handle::file</a></div><div class="ttdeci">static result&lt; file_handle &gt; file(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</div></div>
<div class="ttc" id="classafio__v2__xxx_1_1handle_html_a0489b6c1e25cd2bad2ba1ec86e1aaf18aefb2a684e4afb7d55e6147fbe5a332ee"><div class="ttname"><a href="classafio__v2__xxx_1_1handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18aefb2a684e4afb7d55e6147fbe5a332ee">afio_v2_xxx::handle::mode::write</a></div><div class="ttdoc">Ability to read and write (READ_CONTROL|FILE_READ_DATA|FILE_READ_ATTRIBUTES|FILE_READ_EA|FILE_WRITE_D...</div></div>
<div class="ttc" id="classafio__v2__xxx_1_1handle_html_a6f7e37c73271968271c2342023f58c9ead5197d93c063a2b1e22d1630a39b7aef"><div class="ttname"><a href="classafio__v2__xxx_1_1handle.html#a6f7e37c73271968271c2342023f58c9ead5197d93c063a2b1e22d1630a39b7aef">afio_v2_xxx::handle::caching::temporary</a></div><div class="ttdoc">Cache reads and writes of data and metadata so they complete immediately, only sending any updates to...</div></div>
</div><!-- fragment -->
diff --git a/classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html b/classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html
index 12c484ad..c349a4fc 100644
--- a/classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html
+++ b/classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html
@@ -277,8 +277,8 @@ template&lt;template&lt; class &gt; class Hasher = QUICKCPPLIB_NAMESPACE::algori
</table>
</div><div class="memdoc">
<p>Initialises a shared filing system mutex using the file at <em>lockfile</em>. </p><dl class="section user"><dt>Errors returnable</dt><dd>Awaiting the clang result&lt;&gt; AST parser which auto generates all the error codes which could occur, but a particularly important one is <code>std::errc::no_lock_available</code> which will be returned if the lock is in use by another computer on a network. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; AFIO_LOG_FUNCTION_CALL(0);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; OUTCOME_TRY(ret, <a class="code" href="classafio__v2__xxx_1_1file__handle.html#accb36f2bfd98393dc868653798c02d34">file_handle::file</a>(base, lockfile, <a class="code" href="classafio__v2__xxx_1_1handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18aefb2a684e4afb7d55e6147fbe5a332ee">file_handle::mode::write</a>, file_handle::creation::if_needed, <a class="code" href="classafio__v2__xxx_1_1handle.html#a6f7e37c73271968271c2342023f58c9ea0fb9cf5f04f61bb6f1151da57ceb1ca1">file_handle::caching::reads</a>));</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; file_handle temph;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">// Am I the first person to this file? Lock everything exclusively</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">auto</span> lockinuse = ret.try_lock(_initialisingoffset, 2, <span class="keyword">true</span>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span>(lockinuse.has_error())</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">if</span>(lockinuse.error() != std::errc::timed_out)</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">return</span> lockinuse.error();</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="comment">// Somebody else is also using this file, so try to read the hash index file I ought to use</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; lockinuse = ret.lock(_lockinuseoffset, 1, <span class="keyword">false</span>); <span class="comment">// inuse shared access, blocking</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">if</span>(!lockinuse)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">return</span> lockinuse.error();</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordtype">char</span> buffer[65536];</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; memset(buffer, 0, <span class="keyword">sizeof</span>(buffer));</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; OUTCOME_TRYV(ret.read(0, {{buffer, 65535}}));</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; path_view temphpath(reinterpret_cast&lt;filesystem::path::value_type *&gt;(buffer));</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; result&lt;file_handle&gt; _temph(in_place_type&lt;file_handle&gt;);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; _temph = <a class="code" href="classafio__v2__xxx_1_1file__handle.html#accb36f2bfd98393dc868653798c02d34">file_handle::file</a>({}, temphpath, <a class="code" href="classafio__v2__xxx_1_1handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18aefb2a684e4afb7d55e6147fbe5a332ee">file_handle::mode::write</a>, file_handle::creation::open_existing, <a class="code" href="classafio__v2__xxx_1_1handle.html#a6f7e37c73271968271c2342023f58c9ead5197d93c063a2b1e22d1630a39b7aef">file_handle::caching::temporary</a>);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// If temp file doesn&#39;t exist, I am on a different machine</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">if</span>(!_temph)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// Release the exclusive lock and tell caller that this lock is not available</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">return</span> std::errc::no_lock_available;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; temph = std::move(_temph.value());</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// Map the hash index file into memory for read/write access</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; OUTCOME_TRY(temphsection, <a class="code" href="classafio__v2__xxx_1_1section__handle.html#a7e69ae5094da2517f2ed0bd046d18302">section_handle::section</a>(temph, HashIndexSize));</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; OUTCOME_TRY(temphmap, <a class="code" href="classafio__v2__xxx_1_1map__handle.html#a9c43d182b257682d320f12f6e6be30b3">map_handle::map</a>(temphsection, HashIndexSize));</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// Map the path file into memory with its maximum possible size, read only</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; OUTCOME_TRY(hsection, <a class="code" href="classafio__v2__xxx_1_1section__handle.html#a7e69ae5094da2517f2ed0bd046d18302">section_handle::section</a>(ret, 65536, <a class="code" href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">section_handle::flag::read</a>));</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; OUTCOME_TRY(hmap, <a class="code" href="classafio__v2__xxx_1_1map__handle.html#a9c43d182b257682d320f12f6e6be30b3">map_handle::map</a>(hsection, 0, 0, <a class="code" href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">section_handle::flag::read</a>));</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> memory_map(std::move(ret), std::move(temph), std::move(lockinuse.value()), std::move(hmap), std::move(temphmap));</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="comment">// I am the first person to be using this (stale?) file, so create a new hash index file in /tmp</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keyword">auto</span> &amp;tempdirh = <a class="code" href="namespaceafio__v2__xxx_1_1path__discovery.html#ae34df4ad4e4f2c977ef99575713fd9bf">path_discovery::memory_backed_temporary_files_directory</a>().<a class="code" href="classafio__v2__xxx_1_1handle.html#a4194a05dd9694d2c47d5a45f925db1d7">is_valid</a>() ? <a class="code" href="namespaceafio__v2__xxx_1_1path__discovery.html#ae34df4ad4e4f2c977ef99575713fd9bf">path_discovery::memory_backed_temporary_files_directory</a>() : path_discovery::<a class="code" href="namespaceafio__v2__xxx_1_1path__discovery.html#af398b6c3762f60aa96cebd270879093e">storage_backed_temporary_files_directory</a>();</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; OUTCOME_TRY(_temph, <a class="code" href="classafio__v2__xxx_1_1file__handle.html#a7fdd164a8af6542c5fb80c514283c585">file_handle::random_file</a>(tempdirh));</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; temph = std::move(_temph);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">// Truncate it out to the hash index size, and map it into memory for read/write access</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; OUTCOME_TRYV(temph.truncate(HashIndexSize));</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; OUTCOME_TRY(temphsection, <a class="code" href="classafio__v2__xxx_1_1section__handle.html#a7e69ae5094da2517f2ed0bd046d18302">section_handle::section</a>(temph, HashIndexSize));</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; OUTCOME_TRY(temphmap, <a class="code" href="classafio__v2__xxx_1_1map__handle.html#a9c43d182b257682d320f12f6e6be30b3">map_handle::map</a>(temphsection, HashIndexSize));</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// Write the path of my new hash index file, padding zeros to the nearest page size</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// multiple to work around a race condition in the Linux kernel</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; OUTCOME_TRY(temppath, temph.current_path());</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordtype">char</span> buffer[4096];</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; memset(buffer, 0, <span class="keyword">sizeof</span>(buffer));</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordtype">size_t</span> bytes = temppath.native().size() * <span class="keyword">sizeof</span>(*temppath.c_str());</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; file_handle::const_buffer_type buffers[] = {{<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span> *<span class="keyword">&gt;</span>(temppath.c_str()), bytes}, {<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span> *<span class="keyword">&gt;</span>(buffer), 4096 - (bytes % 4096)}};</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; OUTCOME_TRYV(ret.truncate(65536));</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; OUTCOME_TRYV(ret.write({buffers, 0}));</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// Map for read the maximum possible path file size, again to avoid race problems</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; OUTCOME_TRY(hsection, <a class="code" href="classafio__v2__xxx_1_1section__handle.html#a7e69ae5094da2517f2ed0bd046d18302">section_handle::section</a>(ret, 65536, <a class="code" href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">section_handle::flag::read</a>));</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; OUTCOME_TRY(hmap, <a class="code" href="classafio__v2__xxx_1_1map__handle.html#a9c43d182b257682d320f12f6e6be30b3">map_handle::map</a>(hsection, 0, 0, <a class="code" href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">section_handle::flag::read</a>));</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">/* Take shared locks on inuse. Even if this implementation doesn&#39;t implement</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="comment"> atomic downgrade of exclusive range to shared range, we&#39;re fully prepared for other users</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment"> now. The _initialisingoffset remains exclusive to prevent double entry into this init routine.</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; OUTCOME_TRY(lockinuse2, ret.lock(_lockinuseoffset, 1, <span class="keyword">false</span>));</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; lockinuse = std::move(lockinuse2); <span class="comment">// releases exclusive lock on all three offsets</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> memory_map(std::move(ret), std::move(temph), std::move(lockinuse.value()), std::move(hmap), std::move(temphmap));</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; <span class="keywordflow">catch</span>(...)</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> error_from_exception();</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; }</div><div class="ttc" id="classafio__v2__xxx_1_1handle_html_a6f7e37c73271968271c2342023f58c9ea0fb9cf5f04f61bb6f1151da57ceb1ca1"><div class="ttname"><a href="classafio__v2__xxx_1_1handle.html#a6f7e37c73271968271c2342023f58c9ea0fb9cf5f04f61bb6f1151da57ceb1ca1">afio_v2_xxx::handle::caching::reads</a></div><div class="ttdoc">Cache reads only. Writes of data and metadata do not complete until reaching storage (O_SYNC)...</div></div>
-<div class="ttc" id="namespaceafio__v2__xxx_html_a3cff8f3910dbf47663e5df1dc7e5ba47"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">afio_v2_xxx::read</a></div><div class="ttdeci">io_handle::io_result&lt; io_handle::buffers_type &gt; read(io_handle &amp;self, io_handle::io_request&lt; io_handle::buffers_type &gt; reqs, deadline d=deadline()) noexcept</div><div class="ttdoc">Read data from the open handle. </div><div class="ttdef"><b>Definition:</b> io_handle.hpp:473</div></div>
+<div class="fragment"><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; AFIO_LOG_FUNCTION_CALL(0);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; OUTCOME_TRY(ret, <a class="code" href="classafio__v2__xxx_1_1file__handle.html#accb36f2bfd98393dc868653798c02d34">file_handle::file</a>(base, lockfile, <a class="code" href="classafio__v2__xxx_1_1handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18aefb2a684e4afb7d55e6147fbe5a332ee">file_handle::mode::write</a>, file_handle::creation::if_needed, <a class="code" href="classafio__v2__xxx_1_1handle.html#a6f7e37c73271968271c2342023f58c9ea0fb9cf5f04f61bb6f1151da57ceb1ca1">file_handle::caching::reads</a>));</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; file_handle temph;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="comment">// Am I the first person to this file? Lock everything exclusively</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">auto</span> lockinuse = ret.try_lock(_initialisingoffset, 2, <span class="keyword">true</span>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span>(lockinuse.has_error())</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">if</span>(lockinuse.error() != std::errc::timed_out)</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">return</span> lockinuse.error();</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="comment">// Somebody else is also using this file, so try to read the hash index file I ought to use</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; lockinuse = ret.lock(_lockinuseoffset, 1, <span class="keyword">false</span>); <span class="comment">// inuse shared access, blocking</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">if</span>(!lockinuse)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">return</span> lockinuse.error();</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; byte buffer[65536];</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; memset(buffer, 0, <span class="keyword">sizeof</span>(buffer));</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; OUTCOME_TRYV(ret.read(0, {{buffer, 65535}}));</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; path_view temphpath(reinterpret_cast&lt;filesystem::path::value_type *&gt;(buffer));</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; result&lt;file_handle&gt; _temph(in_place_type&lt;file_handle&gt;);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; _temph = <a class="code" href="classafio__v2__xxx_1_1file__handle.html#accb36f2bfd98393dc868653798c02d34">file_handle::file</a>({}, temphpath, <a class="code" href="classafio__v2__xxx_1_1handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18aefb2a684e4afb7d55e6147fbe5a332ee">file_handle::mode::write</a>, file_handle::creation::open_existing, <a class="code" href="classafio__v2__xxx_1_1handle.html#a6f7e37c73271968271c2342023f58c9ead5197d93c063a2b1e22d1630a39b7aef">file_handle::caching::temporary</a>);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// If temp file doesn&#39;t exist, I am on a different machine</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">if</span>(!_temph)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="comment">// Release the exclusive lock and tell caller that this lock is not available</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">return</span> std::errc::no_lock_available;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; temph = std::move(_temph.value());</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// Map the hash index file into memory for read/write access</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; OUTCOME_TRY(temphsection, <a class="code" href="classafio__v2__xxx_1_1section__handle.html#a7e69ae5094da2517f2ed0bd046d18302">section_handle::section</a>(temph, HashIndexSize));</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; OUTCOME_TRY(temphmap, <a class="code" href="classafio__v2__xxx_1_1map__handle.html#a9c43d182b257682d320f12f6e6be30b3">map_handle::map</a>(temphsection, HashIndexSize));</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// Map the path file into memory with its maximum possible size, read only</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; OUTCOME_TRY(hsection, <a class="code" href="classafio__v2__xxx_1_1section__handle.html#a7e69ae5094da2517f2ed0bd046d18302">section_handle::section</a>(ret, 65536, <a class="code" href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">section_handle::flag::read</a>));</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; OUTCOME_TRY(hmap, <a class="code" href="classafio__v2__xxx_1_1map__handle.html#a9c43d182b257682d320f12f6e6be30b3">map_handle::map</a>(hsection, 0, 0, <a class="code" href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">section_handle::flag::read</a>));</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> memory_map(std::move(ret), std::move(temph), std::move(lockinuse.value()), std::move(hmap), std::move(temphmap));</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="comment">// I am the first person to be using this (stale?) file, so create a new hash index file in /tmp</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keyword">auto</span> &amp;tempdirh = <a class="code" href="namespaceafio__v2__xxx_1_1path__discovery.html#ae34df4ad4e4f2c977ef99575713fd9bf">path_discovery::memory_backed_temporary_files_directory</a>().<a class="code" href="classafio__v2__xxx_1_1handle.html#a4194a05dd9694d2c47d5a45f925db1d7">is_valid</a>() ? <a class="code" href="namespaceafio__v2__xxx_1_1path__discovery.html#ae34df4ad4e4f2c977ef99575713fd9bf">path_discovery::memory_backed_temporary_files_directory</a>() : path_discovery::<a class="code" href="namespaceafio__v2__xxx_1_1path__discovery.html#af398b6c3762f60aa96cebd270879093e">storage_backed_temporary_files_directory</a>();</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; OUTCOME_TRY(_temph, <a class="code" href="classafio__v2__xxx_1_1file__handle.html#a7fdd164a8af6542c5fb80c514283c585">file_handle::random_file</a>(tempdirh));</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; temph = std::move(_temph);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">// Truncate it out to the hash index size, and map it into memory for read/write access</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; OUTCOME_TRYV(temph.truncate(HashIndexSize));</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; OUTCOME_TRY(temphsection, <a class="code" href="classafio__v2__xxx_1_1section__handle.html#a7e69ae5094da2517f2ed0bd046d18302">section_handle::section</a>(temph, HashIndexSize));</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; OUTCOME_TRY(temphmap, <a class="code" href="classafio__v2__xxx_1_1map__handle.html#a9c43d182b257682d320f12f6e6be30b3">map_handle::map</a>(temphsection, HashIndexSize));</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// Write the path of my new hash index file, padding zeros to the nearest page size</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// multiple to work around a race condition in the Linux kernel</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; OUTCOME_TRY(temppath, temph.current_path());</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordtype">char</span> buffer[4096];</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; memset(buffer, 0, <span class="keyword">sizeof</span>(buffer));</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordtype">size_t</span> bytes = temppath.native().size() * <span class="keyword">sizeof</span>(*temppath.c_str());</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; file_handle::const_buffer_type buffers[] = {{<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>byte *<span class="keyword">&gt;</span>(temppath.c_str()), bytes}, {<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>byte *<span class="keyword">&gt;</span>(buffer), 4096 - (bytes % 4096)}};</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; OUTCOME_TRYV(ret.truncate(65536));</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; OUTCOME_TRYV(ret.write({buffers, 0}));</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// Map for read the maximum possible path file size, again to avoid race problems</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; OUTCOME_TRY(hsection, <a class="code" href="classafio__v2__xxx_1_1section__handle.html#a7e69ae5094da2517f2ed0bd046d18302">section_handle::section</a>(ret, 65536, <a class="code" href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">section_handle::flag::read</a>));</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; OUTCOME_TRY(hmap, <a class="code" href="classafio__v2__xxx_1_1map__handle.html#a9c43d182b257682d320f12f6e6be30b3">map_handle::map</a>(hsection, 0, 0, <a class="code" href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">section_handle::flag::read</a>));</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">/* Take shared locks on inuse. Even if this implementation doesn&#39;t implement</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="comment"> atomic downgrade of exclusive range to shared range, we&#39;re fully prepared for other users</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment"> now. The _initialisingoffset remains exclusive to prevent double entry into this init routine.</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; OUTCOME_TRY(lockinuse2, ret.lock(_lockinuseoffset, 1, <span class="keyword">false</span>));</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; lockinuse = std::move(lockinuse2); <span class="comment">// releases exclusive lock on all three offsets</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> memory_map(std::move(ret), std::move(temph), std::move(lockinuse.value()), std::move(hmap), std::move(temphmap));</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; <span class="keywordflow">catch</span>(...)</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> error_from_exception();</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; }</div><div class="ttc" id="classafio__v2__xxx_1_1handle_html_a6f7e37c73271968271c2342023f58c9ea0fb9cf5f04f61bb6f1151da57ceb1ca1"><div class="ttname"><a href="classafio__v2__xxx_1_1handle.html#a6f7e37c73271968271c2342023f58c9ea0fb9cf5f04f61bb6f1151da57ceb1ca1">afio_v2_xxx::handle::caching::reads</a></div><div class="ttdoc">Cache reads only. Writes of data and metadata do not complete until reaching storage (O_SYNC)...</div></div>
+<div class="ttc" id="namespaceafio__v2__xxx_html_a3cff8f3910dbf47663e5df1dc7e5ba47"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">afio_v2_xxx::read</a></div><div class="ttdeci">io_handle::io_result&lt; io_handle::buffers_type &gt; read(io_handle &amp;self, io_handle::io_request&lt; io_handle::buffers_type &gt; reqs, deadline d=deadline()) noexcept</div><div class="ttdoc">Read data from the open handle. </div><div class="ttdef"><b>Definition:</b> io_handle.hpp:483</div></div>
<div class="ttc" id="namespaceafio__v2__xxx_1_1path__discovery_html_af398b6c3762f60aa96cebd270879093e"><div class="ttname"><a href="namespaceafio__v2__xxx_1_1path__discovery.html#af398b6c3762f60aa96cebd270879093e">afio_v2_xxx::path_discovery::storage_backed_temporary_files_directory</a></div><div class="ttdeci">const path_handle &amp; storage_backed_temporary_files_directory() noexcept</div><div class="ttdoc">Returns a reference to an open handle to a verified temporary directory where files created are store...</div></div>
<div class="ttc" id="namespaceafio__v2__xxx_1_1path__discovery_html_ae34df4ad4e4f2c977ef99575713fd9bf"><div class="ttname"><a href="namespaceafio__v2__xxx_1_1path__discovery.html#ae34df4ad4e4f2c977ef99575713fd9bf">afio_v2_xxx::path_discovery::memory_backed_temporary_files_directory</a></div><div class="ttdeci">const path_handle &amp; memory_backed_temporary_files_directory() noexcept</div><div class="ttdoc">Returns a reference to an open handle to a verified temporary directory where files created are store...</div></div>
<div class="ttc" id="classafio__v2__xxx_1_1file__handle_html_accb36f2bfd98393dc868653798c02d34"><div class="ttname"><a href="classafio__v2__xxx_1_1file__handle.html#accb36f2bfd98393dc868653798c02d34">afio_v2_xxx::file_handle::file</a></div><div class="ttdeci">static result&lt; file_handle &gt; file(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</div></div>
diff --git a/classafio__v2__xxx_1_1async__file__handle.html b/classafio__v2__xxx_1_1async__file__handle.html
index 06434f9a..885f994e 100644
--- a/classafio__v2__xxx_1_1async__file__handle.html
+++ b/classafio__v2__xxx_1_1async__file__handle.html
@@ -476,7 +476,7 @@ class&#160;</td><td class="memItemRight" valign="bottom"><b>io_service</b></td><
<td><code>mapped_file_handle</code></td><td>Most</td><td>Least</td><td>None</td><td>Cannot be used with uncached i/o </td></tr>
</table>
<dl class="section warning"><dt>Warning</dt><dd>i/o initiated by this class MUST be on the same kernel thread as which created the owning <code>io_service</code> which MUST also be the same kernel thread as which runs the i/o service's <code>run()</code> function.</dd></dl>
-<div class="fragment"><div class="line"> <span class="keyword">namespace </span>afio = <a class="code" href="group__config.html#gaa3ed9f085329a0b81feeac3397a83740">AFIO_V2_NAMESPACE</a>;</div><div class="line"></div><div class="line"> <span class="comment">// Create an i/o service for this thread</span></div><div class="line"> afio::io_service <a class="code" href="classafio__v2__xxx_1_1file__handle.html#a672324d44ea84ccfb71594c1036628ac">service</a>;</div><div class="line"></div><div class="line"> <span class="comment">// Create an async file i/o handle attached to the i/o service for this thread</span></div><div class="line"> afio::async_file_handle h = <a class="code" href="namespaceafio__v2__xxx.html#a5b0168993998aafc342233aa782040a6">afio::async_file_handle::async_file</a>(service, {}, <span class="stringliteral">&quot;temp&quot;</span>, <a class="code" href="namespaceafio__v2__xxx.html#a2d15768d28ea660ebe44901508ed3372">afio::file_handle::mode::write</a>, afio::file_handle::creation::if_needed, afio::file_handle::caching::only_metadata, afio::file_handle::flag::unlink_on_close).value();</div><div class="line"></div><div class="line"> <span class="comment">// Truncate to 1Mb</span></div><div class="line"> h.truncate(1024 * 4096);</div><div class="line"></div><div class="line"> <span class="comment">// Launch 8 coroutines, each writing 4Kb of chars 0-8 to every 32Kb block</span></div><div class="line"> <span class="keyword">auto</span> coroutine = [&amp;h](<span class="keywordtype">size_t</span> no) -&gt; std::future&lt;void&gt; {</div><div class="line"> std::vector&lt;char, afio::utils::page_allocator&lt;char&gt;&gt; buffer(4096);</div><div class="line"> memset(buffer.data(), (int) (<span class="charliteral">&#39;0&#39;</span> + no), 4096);</div><div class="line"> afio::async_file_handle::const_buffer_type bt{buffer.data(), buffer.size()};</div><div class="line"> <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> n = 0; n &lt; 128; n++)</div><div class="line"> {</div><div class="line"> <span class="comment">// This will initiate the i/o, and suspend the coroutine until completion.</span></div><div class="line"> <span class="comment">// The caller will thus resume execution with a valid unsignaled future.</span></div><div class="line"> <span class="keyword">auto</span> written = co_await h.co_write({bt, n * 32768 + no * 4096}).value();</div><div class="line"> written.value();</div><div class="line"> }</div><div class="line"> };</div><div class="line"> std::vector&lt;std::future&lt;void&gt;&gt; coroutines;</div><div class="line"> <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> n = 0; n &lt; 8; n++)</div><div class="line"> {</div><div class="line"> <span class="comment">// Construct each coroutine, initiating the i/o, then suspending.</span></div><div class="line"> coroutines.push_back(coroutine(n));</div><div class="line"> }</div><div class="line"> <span class="comment">// Pump the i/o, multiplexing the coroutines, until no more work remains.</span></div><div class="line"> <span class="keywordflow">while</span>(service.run().value())</div><div class="line"> ;</div><div class="line"> <span class="comment">// Make sure nothing went wrong by fetching the futures.</span></div><div class="line"> <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : coroutines)</div><div class="line"> {</div><div class="line"> i.get();</div><div class="line"> }</div></div><!-- fragment --></div><h2 class="groupheader">Member Typedef Documentation</h2>
+<div class="fragment"><div class="line"> <span class="keyword">namespace </span>afio = <a class="code" href="group__config.html#gaa3ed9f085329a0b81feeac3397a83740">AFIO_V2_NAMESPACE</a>;</div><div class="line"></div><div class="line"> <span class="comment">// Create an i/o service for this thread</span></div><div class="line"> afio::io_service <a class="code" href="classafio__v2__xxx_1_1file__handle.html#a672324d44ea84ccfb71594c1036628ac">service</a>;</div><div class="line"></div><div class="line"> <span class="comment">// Create an async file i/o handle attached to the i/o service for this thread</span></div><div class="line"> afio::async_file_handle h = <a class="code" href="namespaceafio__v2__xxx.html#a5b0168993998aafc342233aa782040a6">afio::async_file_handle::async_file</a>(service, {}, <span class="stringliteral">&quot;temp&quot;</span>, <a class="code" href="namespaceafio__v2__xxx.html#a2d15768d28ea660ebe44901508ed3372">afio::file_handle::mode::write</a>, afio::file_handle::creation::if_needed, afio::file_handle::caching::only_metadata, afio::file_handle::flag::unlink_on_close).value();</div><div class="line"></div><div class="line"> <span class="comment">// Truncate to 1Mb</span></div><div class="line"> h.truncate(1024 * 4096);</div><div class="line"></div><div class="line"> <span class="comment">// Launch 8 coroutines, each writing 4Kb of chars 0-8 to every 32Kb block</span></div><div class="line"> <span class="keyword">auto</span> coroutine = [&amp;h](<span class="keywordtype">size_t</span> no) -&gt; std::future&lt;void&gt; {</div><div class="line"> std::vector&lt;afio::byte, afio::utils::page_allocator&lt;afio::byte&gt;&gt; buffer(4096);</div><div class="line"> memset(buffer.data(), (int) (<span class="charliteral">&#39;0&#39;</span> + no), 4096);</div><div class="line"> afio::async_file_handle::const_buffer_type bt{buffer.data(), buffer.size()};</div><div class="line"> <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> n = 0; n &lt; 128; n++)</div><div class="line"> {</div><div class="line"> <span class="comment">// This will initiate the i/o, and suspend the coroutine until completion.</span></div><div class="line"> <span class="comment">// The caller will thus resume execution with a valid unsignaled future.</span></div><div class="line"> <span class="keyword">auto</span> written = co_await h.co_write({bt, n * 32768 + no * 4096}).value();</div><div class="line"> written.value();</div><div class="line"> }</div><div class="line"> };</div><div class="line"> std::vector&lt;std::future&lt;void&gt;&gt; coroutines;</div><div class="line"> <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> n = 0; n &lt; 8; n++)</div><div class="line"> {</div><div class="line"> <span class="comment">// Construct each coroutine, initiating the i/o, then suspending.</span></div><div class="line"> coroutines.push_back(coroutine(n));</div><div class="line"> }</div><div class="line"> <span class="comment">// Pump the i/o, multiplexing the coroutines, until no more work remains.</span></div><div class="line"> <span class="keywordflow">while</span>(service.run().value())</div><div class="line"> ;</div><div class="line"> <span class="comment">// Make sure nothing went wrong by fetching the futures.</span></div><div class="line"> <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : coroutines)</div><div class="line"> {</div><div class="line"> i.get();</div><div class="line"> }</div></div><!-- fragment --></div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="a5668ee547b98e268360e1f8da8769df8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5668ee547b98e268360e1f8da8769df8">&#9670;&nbsp;</a></span>io_state_ptr</h2>
@@ -1533,7 +1533,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</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>(bytes + i.len &lt; bytes)</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; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; bytes += i.len;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">false</span>, d);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</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 class="fragment"><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="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</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">return</span> std::errc::value_too_large;</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; bytes += i.len;</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; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">false</span>, d);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</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>
</div>
@@ -1571,7 +1571,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><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; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</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; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</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; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; bytes += i.len;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">true</span>, d);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</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 class="fragment"><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; bytes += i.len;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">true</span>, d);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</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>
</div>
@@ -1777,7 +1777,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(buffer_type) * lst.size()));</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(buffer_type) * lst.size());</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; io_request&lt;buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(reqs, d);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a70a3c5e6f62efc95db81f831f3b90a2c"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">afio_v2_xxx::io_handle::buffers_type</a></div><div class="ttdeci">span&lt; buffer_type &gt; buffers_type</div><div class="ttdoc">The scatter buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:76</div></div>
+<div class="fragment"><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(buffer_type) * lst.size()));</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(buffer_type) * lst.size());</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; io_request&lt;buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(reqs, d);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a70a3c5e6f62efc95db81f831f3b90a2c"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">afio_v2_xxx::io_handle::buffers_type</a></div><div class="ttdeci">span&lt; buffer_type &gt; buffers_type</div><div class="ttdoc">The scatter buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:86</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><!-- fragment -->
</div>
@@ -2054,7 +2054,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(offset, bytes, exclusive, deadline(std::chrono::seconds(0))); }</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 class="fragment"><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(offset, bytes, exclusive, deadline(std::chrono::seconds(0))); }</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>
</div>
@@ -2229,7 +2229,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; const_buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>const_buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(const_buffer_type) * lst.size()));</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(const_buffer_type) * lst.size());</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; io_request&lt;const_buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">const_buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">write</a>(reqs, d);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a639b8760b1b98df95e4956f6cc56f6b5"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">afio_v2_xxx::io_handle::const_buffers_type</a></div><div class="ttdeci">span&lt; const_buffer_type &gt; const_buffers_type</div><div class="ttdoc">The gather buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:78</div></div>
+<div class="fragment"><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; const_buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>const_buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(const_buffer_type) * lst.size()));</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(const_buffer_type) * lst.size());</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; io_request&lt;const_buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">const_buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">write</a>(reqs, d);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a639b8760b1b98df95e4956f6cc56f6b5"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">afio_v2_xxx::io_handle::const_buffers_type</a></div><div class="ttdeci">span&lt; const_buffer_type &gt; const_buffers_type</div><div class="ttdoc">The gather buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:88</div></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><!-- fragment -->
</div>
diff --git a/classafio__v2__xxx_1_1file__handle.html b/classafio__v2__xxx_1_1file__handle.html
index 96405f70..b30ebbe2 100644
--- a/classafio__v2__xxx_1_1file__handle.html
+++ b/classafio__v2__xxx_1_1file__handle.html
@@ -790,7 +790,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</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>(bytes + i.len &lt; bytes)</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; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; bytes += i.len;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">false</span>, d);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</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 class="fragment"><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="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</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">return</span> std::errc::value_too_large;</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; bytes += i.len;</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; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">false</span>, d);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</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>
</div>
@@ -828,7 +828,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><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; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</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; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</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; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; bytes += i.len;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">true</span>, d);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</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 class="fragment"><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; bytes += i.len;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">true</span>, d);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</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>
</div>
@@ -1034,7 +1034,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(buffer_type) * lst.size()));</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(buffer_type) * lst.size());</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; io_request&lt;buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(reqs, d);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a70a3c5e6f62efc95db81f831f3b90a2c"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">afio_v2_xxx::io_handle::buffers_type</a></div><div class="ttdeci">span&lt; buffer_type &gt; buffers_type</div><div class="ttdoc">The scatter buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:76</div></div>
+<div class="fragment"><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(buffer_type) * lst.size()));</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(buffer_type) * lst.size());</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; io_request&lt;buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(reqs, d);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a70a3c5e6f62efc95db81f831f3b90a2c"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">afio_v2_xxx::io_handle::buffers_type</a></div><div class="ttdeci">span&lt; buffer_type &gt; buffers_type</div><div class="ttdoc">The scatter buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:86</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><!-- fragment -->
</div>
@@ -1311,7 +1311,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(offset, bytes, exclusive, deadline(std::chrono::seconds(0))); }</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 class="fragment"><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(offset, bytes, exclusive, deadline(std::chrono::seconds(0))); }</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>
</div>
@@ -1486,7 +1486,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; const_buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>const_buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(const_buffer_type) * lst.size()));</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(const_buffer_type) * lst.size());</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; io_request&lt;const_buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">const_buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">write</a>(reqs, d);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a639b8760b1b98df95e4956f6cc56f6b5"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">afio_v2_xxx::io_handle::const_buffers_type</a></div><div class="ttdeci">span&lt; const_buffer_type &gt; const_buffers_type</div><div class="ttdoc">The gather buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:78</div></div>
+<div class="fragment"><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; const_buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>const_buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(const_buffer_type) * lst.size()));</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(const_buffer_type) * lst.size());</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; io_request&lt;const_buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">const_buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">write</a>(reqs, d);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a639b8760b1b98df95e4956f6cc56f6b5"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">afio_v2_xxx::io_handle::const_buffers_type</a></div><div class="ttdeci">span&lt; const_buffer_type &gt; const_buffers_type</div><div class="ttdoc">The gather buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:88</div></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><!-- fragment -->
</div>
diff --git a/classafio__v2__xxx_1_1handle.html b/classafio__v2__xxx_1_1handle.html
index 074bd167..1ba6a9b4 100644
--- a/classafio__v2__xxx_1_1handle.html
+++ b/classafio__v2__xxx_1_1handle.html
@@ -420,8 +420,8 @@ std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operato
<tr><td class="fieldname"><a id="a0489b6c1e25cd2bad2ba1ec86e1aaf18a9516dfb15f51c7ee19a4d46b8c0dbe1d"></a>append&#160;</td><td class="fielddoc"><p>All mainstream OSs and CIFS guarantee this is atomic with respect to all other appenders (FILE_APPEND_DATA|SYNCHRONISE or O_APPEND) </p>
</td></tr>
</table>
-<div class="fragment"><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; : <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <span class="comment">// bit 0 set means writable</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; unchanged = 0,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; none = 2, <span class="comment">//!&lt; No ability to read or write anything, but can synchronise (SYNCHRONIZE or 0)</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment"></span> attr_read = 4, <span class="comment">//!&lt; Ability to read attributes (FILE_READ_ATTRIBUTES|SYNCHRONIZE or O_RDONLY)</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment"></span> attr_write = 5, <span class="comment">//!&lt; Ability to read and write attributes (FILE_READ_ATTRIBUTES|FILE_WRITE_ATTRIBUTES|SYNCHRONIZE or O_RDONLY)</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment"></span> <a class="code" href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">read</a> = 6, <span class="comment">//!&lt; Ability to read (READ_CONTROL|FILE_READ_DATA|FILE_READ_ATTRIBUTES|FILE_READ_EA|SYNCHRONISE or O_RDONLY)</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment"></span> <a class="code" href="namespaceafio__v2__xxx.html#a2d15768d28ea660ebe44901508ed3372">write</a> = 7, <span class="comment">//!&lt; Ability to read and write (READ_CONTROL|FILE_READ_DATA|FILE_READ_ATTRIBUTES|FILE_READ_EA|FILE_WRITE_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|FILE_APPEND_DATA|SYNCHRONISE or O_RDWR)</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"></span> append = 9 <span class="comment">//!&lt; All mainstream OSs and CIFS guarantee this is atomic with respect to all other appenders (FILE_APPEND_DATA|SYNCHRONISE or O_APPEND)</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</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="l00072"></a><span class="lineno"> 72</span>&#160; };</div><div class="ttc" id="namespaceafio__v2__xxx_html_a3cff8f3910dbf47663e5df1dc7e5ba47"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">afio_v2_xxx::read</a></div><div class="ttdeci">io_handle::io_result&lt; io_handle::buffers_type &gt; read(io_handle &amp;self, io_handle::io_request&lt; io_handle::buffers_type &gt; reqs, deadline d=deadline()) noexcept</div><div class="ttdoc">Read data from the open handle. </div><div class="ttdef"><b>Definition:</b> io_handle.hpp:473</div></div>
-<div class="ttc" id="namespaceafio__v2__xxx_html_a2d15768d28ea660ebe44901508ed3372"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a2d15768d28ea660ebe44901508ed3372">afio_v2_xxx::write</a></div><div class="ttdeci">io_handle::io_result&lt; io_handle::const_buffers_type &gt; write(io_handle &amp;self, io_handle::io_request&lt; io_handle::const_buffers_type &gt; reqs, deadline d=deadline()) noexcept</div><div class="ttdoc">Write data to the open handle. </div><div class="ttdef"><b>Definition:</b> io_handle.hpp:504</div></div>
+<div class="fragment"><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; : <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <span class="comment">// bit 0 set means writable</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; unchanged = 0,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; none = 2, <span class="comment">//!&lt; No ability to read or write anything, but can synchronise (SYNCHRONIZE or 0)</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment"></span> attr_read = 4, <span class="comment">//!&lt; Ability to read attributes (FILE_READ_ATTRIBUTES|SYNCHRONIZE or O_RDONLY)</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment"></span> attr_write = 5, <span class="comment">//!&lt; Ability to read and write attributes (FILE_READ_ATTRIBUTES|FILE_WRITE_ATTRIBUTES|SYNCHRONIZE or O_RDONLY)</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment"></span> <a class="code" href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">read</a> = 6, <span class="comment">//!&lt; Ability to read (READ_CONTROL|FILE_READ_DATA|FILE_READ_ATTRIBUTES|FILE_READ_EA|SYNCHRONISE or O_RDONLY)</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment"></span> <a class="code" href="namespaceafio__v2__xxx.html#a2d15768d28ea660ebe44901508ed3372">write</a> = 7, <span class="comment">//!&lt; Ability to read and write (READ_CONTROL|FILE_READ_DATA|FILE_READ_ATTRIBUTES|FILE_READ_EA|FILE_WRITE_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|FILE_APPEND_DATA|SYNCHRONISE or O_RDWR)</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"></span> append = 9 <span class="comment">//!&lt; All mainstream OSs and CIFS guarantee this is atomic with respect to all other appenders (FILE_APPEND_DATA|SYNCHRONISE or O_APPEND)</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</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="l00072"></a><span class="lineno"> 72</span>&#160; };</div><div class="ttc" id="namespaceafio__v2__xxx_html_a3cff8f3910dbf47663e5df1dc7e5ba47"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">afio_v2_xxx::read</a></div><div class="ttdeci">io_handle::io_result&lt; io_handle::buffers_type &gt; read(io_handle &amp;self, io_handle::io_request&lt; io_handle::buffers_type &gt; reqs, deadline d=deadline()) noexcept</div><div class="ttdoc">Read data from the open handle. </div><div class="ttdef"><b>Definition:</b> io_handle.hpp:483</div></div>
+<div class="ttc" id="namespaceafio__v2__xxx_html_a2d15768d28ea660ebe44901508ed3372"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a2d15768d28ea660ebe44901508ed3372">afio_v2_xxx::write</a></div><div class="ttdeci">io_handle::io_result&lt; io_handle::const_buffers_type &gt; write(io_handle &amp;self, io_handle::io_request&lt; io_handle::const_buffers_type &gt; reqs, deadline d=deadline()) noexcept</div><div class="ttdoc">Write data to the open handle. </div><div class="ttdef"><b>Definition:</b> io_handle.hpp:514</div></div>
</div><!-- fragment -->
</div>
</div>
diff --git a/classafio__v2__xxx_1_1io__handle.html b/classafio__v2__xxx_1_1io__handle.html
index 05168a7e..f2621d0b 100644
--- a/classafio__v2__xxx_1_1io__handle.html
+++ b/classafio__v2__xxx_1_1io__handle.html
@@ -351,7 +351,7 @@ flag&#160;</td><td class="memItemRight" valign="bottom"><b>_flags</b> {flag::non
<p>Default constructor. </p>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000002">Todo:</a></b></dt><dd>Why is io_result&lt;buffers_type&gt; not a standard layout type? </dd></dl>
-<div class="fragment"><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;{} <span class="comment">// NOLINT</span></div></div><!-- fragment -->
+<div class="fragment"><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;{} <span class="comment">// NOLINT</span></div></div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
@@ -582,7 +582,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</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>(bytes + i.len &lt; bytes)</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; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; bytes += i.len;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">false</span>, d);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</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 class="fragment"><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="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</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">return</span> std::errc::value_too_large;</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; bytes += i.len;</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; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">false</span>, d);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</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>
</div>
@@ -620,7 +620,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><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; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</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; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</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; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; bytes += i.len;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">true</span>, d);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</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 class="fragment"><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; bytes += i.len;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">true</span>, d);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</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>
</div>
@@ -743,7 +743,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(buffer_type) * lst.size()));</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(buffer_type) * lst.size());</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; io_request&lt;buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(reqs, d);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a70a3c5e6f62efc95db81f831f3b90a2c"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">afio_v2_xxx::io_handle::buffers_type</a></div><div class="ttdeci">span&lt; buffer_type &gt; buffers_type</div><div class="ttdoc">The scatter buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:76</div></div>
+<div class="fragment"><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(buffer_type) * lst.size()));</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(buffer_type) * lst.size());</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; io_request&lt;buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(reqs, d);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a70a3c5e6f62efc95db81f831f3b90a2c"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">afio_v2_xxx::io_handle::buffers_type</a></div><div class="ttdeci">span&lt; buffer_type &gt; buffers_type</div><div class="ttdoc">The scatter buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:86</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><!-- fragment -->
</div>
@@ -818,7 +818,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(offset, bytes, exclusive, deadline(std::chrono::seconds(0))); }</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 class="fragment"><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(offset, bytes, exclusive, deadline(std::chrono::seconds(0))); }</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>
</div>
@@ -958,7 +958,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; const_buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>const_buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(const_buffer_type) * lst.size()));</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(const_buffer_type) * lst.size());</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; io_request&lt;const_buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">const_buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">write</a>(reqs, d);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a639b8760b1b98df95e4956f6cc56f6b5"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">afio_v2_xxx::io_handle::const_buffers_type</a></div><div class="ttdeci">span&lt; const_buffer_type &gt; const_buffers_type</div><div class="ttdoc">The gather buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:78</div></div>
+<div class="fragment"><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; const_buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>const_buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(const_buffer_type) * lst.size()));</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(const_buffer_type) * lst.size());</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; io_request&lt;const_buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">const_buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">write</a>(reqs, d);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a639b8760b1b98df95e4956f6cc56f6b5"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">afio_v2_xxx::io_handle::const_buffers_type</a></div><div class="ttdeci">span&lt; const_buffer_type &gt; const_buffers_type</div><div class="ttdoc">The gather buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:88</div></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><!-- fragment -->
</div>
diff --git a/classafio__v2__xxx_1_1io__service.html b/classafio__v2__xxx_1_1io__service.html
index 25a5d371..8c20ef0a 100644
--- a/classafio__v2__xxx_1_1io__service.html
+++ b/classafio__v2__xxx_1_1io__service.html
@@ -201,7 +201,7 @@ class&#160;</td><td class="memItemRight" valign="bottom"><b>async_file_handle</b
<p>This service is used in conjunction with <code>async_file_handle</code> to multiplex initating i/o and completing it onto a single kernel thread. Unlike the <code>io_service</code> in ASIO or the Networking TS, this <code>io_service</code> is much simpler, in particular it is single threaded per instance only i.e. you must run a separate <code>io_service</code> instance one per kernel thread if you wish to run i/o processing across multiple threads. AFIO does not do this for you (and for good reason, unlike socket i/o, it is generally unwise to distribute file i/o across kernel threads due to the much more code executable between user space and physical storage i.e. keeping processing per CPU core hot in cache delivers outsize benefits compared to socket i/o).</p>
<p>Furthermore, you cannot use this i/o service in any way from any thread other than where it was created. You cannot call its <code>run()</code> from any thread other than where it was created. And you cannot initiate i/o on an <code>async_file_handle</code> from any thread other than where its owning i/o service was created.</p>
<p>In other words, keep your i/o service and all associated file handles on their owning thread. The sole function you can call from another thread is <code>post()</code> which lets you execute some callback in the <code>run()</code> of the owning thread. This lets you schedule i/o from other threads if you really must do that.</p>
-<div class="fragment"><div class="line"> <span class="keyword">namespace </span>afio = <a class="code" href="group__config.html#gaa3ed9f085329a0b81feeac3397a83740">AFIO_V2_NAMESPACE</a>;</div><div class="line"></div><div class="line"> <span class="comment">// Create an i/o service for this thread</span></div><div class="line"> afio::io_service service;</div><div class="line"></div><div class="line"> <span class="comment">// Create an async file i/o handle attached to the i/o service for this thread</span></div><div class="line"> afio::async_file_handle h = <a class="code" href="namespaceafio__v2__xxx.html#a5b0168993998aafc342233aa782040a6">afio::async_file_handle::async_file</a>(service, {}, <span class="stringliteral">&quot;temp&quot;</span>, <a class="code" href="namespaceafio__v2__xxx.html#a2d15768d28ea660ebe44901508ed3372">afio::file_handle::mode::write</a>, afio::file_handle::creation::if_needed, afio::file_handle::caching::only_metadata, afio::file_handle::flag::unlink_on_close).value();</div><div class="line"></div><div class="line"> <span class="comment">// Truncate to 1Mb</span></div><div class="line"> h.truncate(1024 * 4096);</div><div class="line"></div><div class="line"> <span class="comment">// Launch 8 coroutines, each writing 4Kb of chars 0-8 to every 32Kb block</span></div><div class="line"> <span class="keyword">auto</span> coroutine = [&amp;h](<span class="keywordtype">size_t</span> no) -&gt; std::future&lt;void&gt; {</div><div class="line"> std::vector&lt;char, afio::utils::page_allocator&lt;char&gt;&gt; buffer(4096);</div><div class="line"> memset(buffer.data(), (int) (<span class="charliteral">&#39;0&#39;</span> + no), 4096);</div><div class="line"> afio::async_file_handle::const_buffer_type bt{buffer.data(), buffer.size()};</div><div class="line"> <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> n = 0; n &lt; 128; n++)</div><div class="line"> {</div><div class="line"> <span class="comment">// This will initiate the i/o, and suspend the coroutine until completion.</span></div><div class="line"> <span class="comment">// The caller will thus resume execution with a valid unsignaled future.</span></div><div class="line"> <span class="keyword">auto</span> written = co_await h.co_write({bt, n * 32768 + no * 4096}).value();</div><div class="line"> written.value();</div><div class="line"> }</div><div class="line"> };</div><div class="line"> std::vector&lt;std::future&lt;void&gt;&gt; coroutines;</div><div class="line"> <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> n = 0; n &lt; 8; n++)</div><div class="line"> {</div><div class="line"> <span class="comment">// Construct each coroutine, initiating the i/o, then suspending.</span></div><div class="line"> coroutines.push_back(coroutine(n));</div><div class="line"> }</div><div class="line"> <span class="comment">// Pump the i/o, multiplexing the coroutines, until no more work remains.</span></div><div class="line"> <span class="keywordflow">while</span>(service.run().value())</div><div class="line"> ;</div><div class="line"> <span class="comment">// Make sure nothing went wrong by fetching the futures.</span></div><div class="line"> <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : coroutines)</div><div class="line"> {</div><div class="line"> i.get();</div><div class="line"> }</div></div><!-- fragment --></div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<div class="fragment"><div class="line"> <span class="keyword">namespace </span>afio = <a class="code" href="group__config.html#gaa3ed9f085329a0b81feeac3397a83740">AFIO_V2_NAMESPACE</a>;</div><div class="line"></div><div class="line"> <span class="comment">// Create an i/o service for this thread</span></div><div class="line"> afio::io_service service;</div><div class="line"></div><div class="line"> <span class="comment">// Create an async file i/o handle attached to the i/o service for this thread</span></div><div class="line"> afio::async_file_handle h = <a class="code" href="namespaceafio__v2__xxx.html#a5b0168993998aafc342233aa782040a6">afio::async_file_handle::async_file</a>(service, {}, <span class="stringliteral">&quot;temp&quot;</span>, <a class="code" href="namespaceafio__v2__xxx.html#a2d15768d28ea660ebe44901508ed3372">afio::file_handle::mode::write</a>, afio::file_handle::creation::if_needed, afio::file_handle::caching::only_metadata, afio::file_handle::flag::unlink_on_close).value();</div><div class="line"></div><div class="line"> <span class="comment">// Truncate to 1Mb</span></div><div class="line"> h.truncate(1024 * 4096);</div><div class="line"></div><div class="line"> <span class="comment">// Launch 8 coroutines, each writing 4Kb of chars 0-8 to every 32Kb block</span></div><div class="line"> <span class="keyword">auto</span> coroutine = [&amp;h](<span class="keywordtype">size_t</span> no) -&gt; std::future&lt;void&gt; {</div><div class="line"> std::vector&lt;afio::byte, afio::utils::page_allocator&lt;afio::byte&gt;&gt; buffer(4096);</div><div class="line"> memset(buffer.data(), (int) (<span class="charliteral">&#39;0&#39;</span> + no), 4096);</div><div class="line"> afio::async_file_handle::const_buffer_type bt{buffer.data(), buffer.size()};</div><div class="line"> <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> n = 0; n &lt; 128; n++)</div><div class="line"> {</div><div class="line"> <span class="comment">// This will initiate the i/o, and suspend the coroutine until completion.</span></div><div class="line"> <span class="comment">// The caller will thus resume execution with a valid unsignaled future.</span></div><div class="line"> <span class="keyword">auto</span> written = co_await h.co_write({bt, n * 32768 + no * 4096}).value();</div><div class="line"> written.value();</div><div class="line"> }</div><div class="line"> };</div><div class="line"> std::vector&lt;std::future&lt;void&gt;&gt; coroutines;</div><div class="line"> <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> n = 0; n &lt; 8; n++)</div><div class="line"> {</div><div class="line"> <span class="comment">// Construct each coroutine, initiating the i/o, then suspending.</span></div><div class="line"> coroutines.push_back(coroutine(n));</div><div class="line"> }</div><div class="line"> <span class="comment">// Pump the i/o, multiplexing the coroutines, until no more work remains.</span></div><div class="line"> <span class="keywordflow">while</span>(service.run().value())</div><div class="line"> ;</div><div class="line"> <span class="comment">// Make sure nothing went wrong by fetching the futures.</span></div><div class="line"> <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : coroutines)</div><div class="line"> {</div><div class="line"> i.get();</div><div class="line"> }</div></div><!-- fragment --></div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a444d27f19c042b91f1751621135f65e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a444d27f19c042b91f1751621135f65e9">&#9670;&nbsp;</a></span>io_service()</h2>
diff --git a/classafio__v2__xxx_1_1map__handle-members.html b/classafio__v2__xxx_1_1map__handle-members.html
index 7c34f1a1..aed43782 100644
--- a/classafio__v2__xxx_1_1map__handle-members.html
+++ b/classafio__v2__xxx_1_1map__handle-members.html
@@ -96,12 +96,12 @@ $(document).ready(function(){initNavTree('classafio__v2__xxx_1_1map__handle.html
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>_reservation</b> (defined in <a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_handle</a>)</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_handle</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>_section</b> (defined in <a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_handle</a>)</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_handle</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>_v</b> (defined in <a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a>)</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">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classafio__v2__xxx_1_1map__handle.html#a1e9273d0c6aca7da6480437f6cf6638a">address</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_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_1map__handle.html#a6f203a9bb0bee94ac6b395ac5f3a2270">address</a>() const noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_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#a71137cb82edd9a1bcb24f64886b5826d">are_reads_from_cache</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#a3fc7db93fac699f5ecad453642ed314e">are_safety_fsyncs_issued</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#a97ffbbf53f51549549efef0b49e125dc">are_writes_durable</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 bgcolor="#f0f0f0"><td class="entry"><b>barrier</b>(io_request&lt; const_buffers_type &gt; reqs=io_request&lt; const_buffers_type &gt;(), bool wait_for_device=false, bool and_metadata=false, deadline d=deadline()) noexcept override (defined in <a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_handle</a>)</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_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_1map__handle.html#a7119886b920953e12340b05ea94e395d">barrier</a>(const_buffer_type req, bool evict=false) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_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_1map__handle.html#a74e5785071e0d89b51edcbc9bc6089db">barrier</a>(const_buffer_type req, bool evict=false) noexcept</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_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#a243156928e89b8988a1412f211b3b603">afio_v2_xxx::io_handle::barrier</a>(io_request&lt; const_buffers_type &gt; reqs=io_request&lt; const_buffers_type &gt;(), bool wait_for_device=false, bool and_metadata=false, deadline d=deadline()) noexcept=0</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">pure virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>buffer_type</b> typedef (defined in <a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_handle</a>)</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_handle</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>buffers_type</b> typedef (defined in <a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_handle</a>)</td><td class="entry"><a class="el" href="classafio__v2__xxx_1_1map__handle.html">afio_v2_xxx::map_handle</a></td><td class="entry"></td></tr>
diff --git a/classafio__v2__xxx_1_1map__handle.html b/classafio__v2__xxx_1_1map__handle.html
index 2fd1b6bc..2b34d42e 100644
--- a/classafio__v2__xxx_1_1map__handle.html
+++ b/classafio__v2__xxx_1_1map__handle.html
@@ -189,8 +189,6 @@ virtual <a class="el" href="structafio__v2__xxx_1_1native__handle__type.html">na
<tr class="memitem:ad6ab309f4df975892f3bcbef345c779b"><td class="memItemLeft" align="right" valign="top"><a id="ad6ab309f4df975892f3bcbef345c779b"></a>
virtual <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1io__result.html">io_result</a>&lt; <a class="el" href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">const_buffers_type</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>barrier</b> (<a class="el" href="structafio__v2__xxx_1_1io__handle_1_1io__request.html">io_request</a>&lt; <a class="el" href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">const_buffers_type</a> &gt; reqs=<a class="el" href="structafio__v2__xxx_1_1io__handle_1_1io__request.html">io_request</a>&lt; <a class="el" href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">const_buffers_type</a> &gt;(), bool wait_for_device=false, bool and_metadata=false, <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 override</td></tr>
<tr class="separator:ad6ab309f4df975892f3bcbef345c779b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7119886b920953e12340b05ea94e395d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">const_buffer_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1map__handle.html#a7119886b920953e12340b05ea94e395d">barrier</a> (<a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">const_buffer_type</a> req, bool evict=false) noexcept</td></tr>
-<tr class="separator:a7119886b920953e12340b05ea94e395d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab8a43a5388161f629fef5ee7256dbbc8"><td class="memItemLeft" align="right" valign="top"><a id="ab8a43a5388161f629fef5ee7256dbbc8"></a>
<a class="el" href="classafio__v2__xxx_1_1section__handle.html">section_handle</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1map__handle.html#ab8a43a5388161f629fef5ee7256dbbc8">section</a> () const noexcept</td></tr>
<tr class="memdesc:ab8a43a5388161f629fef5ee7256dbbc8"><td class="mdescLeft">&#160;</td><td class="mdescRight">The memory section this handle is using. <br /></td></tr>
@@ -199,10 +197,10 @@ virtual <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1io__result.html
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1map__handle.html#a127eef4449f6afcddbdb684030776868">set_section</a> (<a class="el" href="classafio__v2__xxx_1_1section__handle.html">section_handle</a> *s) noexcept</td></tr>
<tr class="memdesc:a127eef4449f6afcddbdb684030776868"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the memory section this handle is using. <br /></td></tr>
<tr class="separator:a127eef4449f6afcddbdb684030776868"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1e9273d0c6aca7da6480437f6cf6638a"><td class="memItemLeft" align="right" valign="top"><a id="a1e9273d0c6aca7da6480437f6cf6638a"></a>
-char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1map__handle.html#a1e9273d0c6aca7da6480437f6cf6638a">address</a> () const noexcept</td></tr>
-<tr class="memdesc:a1e9273d0c6aca7da6480437f6cf6638a"><td class="mdescLeft">&#160;</td><td class="mdescRight">The address in memory where this mapped view resides. <br /></td></tr>
-<tr class="separator:a1e9273d0c6aca7da6480437f6cf6638a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f203a9bb0bee94ac6b395ac5f3a2270"><td class="memItemLeft" align="right" valign="top"><a id="a6f203a9bb0bee94ac6b395ac5f3a2270"></a>
+byte *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1map__handle.html#a6f203a9bb0bee94ac6b395ac5f3a2270">address</a> () const noexcept</td></tr>
+<tr class="memdesc:a6f203a9bb0bee94ac6b395ac5f3a2270"><td class="mdescLeft">&#160;</td><td class="mdescRight">The address in memory where this mapped view resides. <br /></td></tr>
+<tr class="separator:a6f203a9bb0bee94ac6b395ac5f3a2270"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac049430769b0fa1d06c93160cef5a2f9"><td class="memItemLeft" align="right" valign="top"><a id="ac049430769b0fa1d06c93160cef5a2f9"></a>
<a class="el" href="classafio__v2__xxx_1_1handle.html#a818fff07c92eaab72532092d1c2a14f9">extent_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1map__handle.html#ac049430769b0fa1d06c93160cef5a2f9">offset</a> () const noexcept</td></tr>
<tr class="memdesc:ac049430769b0fa1d06c93160cef5a2f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">The offset of the memory map. <br /></td></tr>
@@ -360,6 +358,8 @@ flag&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clas
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a74e5785071e0d89b51edcbc9bc6089db"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">const_buffer_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1map__handle.html#a74e5785071e0d89b51edcbc9bc6089db">barrier</a> (<a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">const_buffer_type</a> req, bool evict=false) noexcept</td></tr>
+<tr class="separator:a74e5785071e0d89b51edcbc9bc6089db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9c43d182b257682d320f12f6e6be30b3"><td class="memItemLeft" align="right" valign="top">static result&lt; <a class="el" href="classafio__v2__xxx_1_1map__handle.html">map_handle</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1map__handle.html#a9c43d182b257682d320f12f6e6be30b3">map</a> (<a class="el" href="classafio__v2__xxx_1_1handle.html#a0adf7fa00e23ed561328f473986e9ccc">size_type</a> bytes, section_handle::flag _flag=section_handle::flag::readwrite) noexcept</td></tr>
<tr class="separator:a9c43d182b257682d320f12f6e6be30b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab2f2816821bcde22353855873a34c48"><td class="memItemLeft" align="right" valign="top">static result&lt; <a class="el" href="classafio__v2__xxx_1_1map__handle.html">map_handle</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1map__handle.html#aab2f2816821bcde22353855873a34c48">map</a> (<a class="el" href="classafio__v2__xxx_1_1section__handle.html">section_handle</a> &amp;<a class="el" href="classafio__v2__xxx_1_1map__handle.html#ab8a43a5388161f629fef5ee7256dbbc8">section</a>, <a class="el" href="classafio__v2__xxx_1_1handle.html#a0adf7fa00e23ed561328f473986e9ccc">size_type</a> bytes=0, <a class="el" href="classafio__v2__xxx_1_1handle.html#a818fff07c92eaab72532092d1c2a14f9">extent_type</a> <a class="el" href="classafio__v2__xxx_1_1map__handle.html#ac049430769b0fa1d06c93160cef5a2f9">offset</a>=0, section_handle::flag _flag=section_handle::flag::readwrite) noexcept</td></tr>
@@ -382,9 +382,9 @@ Protected Attributes</h2></td></tr>
<tr class="memitem:af776fe76eb1e2e493d9d2ddbde0b150c"><td class="memItemLeft" align="right" valign="top"><a id="af776fe76eb1e2e493d9d2ddbde0b150c"></a>
<a class="el" href="classafio__v2__xxx_1_1section__handle.html">section_handle</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>_section</b> {nullptr}</td></tr>
<tr class="separator:af776fe76eb1e2e493d9d2ddbde0b150c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af85f9116968f2a2900640846009f48ea"><td class="memItemLeft" align="right" valign="top"><a id="af85f9116968f2a2900640846009f48ea"></a>
-char *&#160;</td><td class="memItemRight" valign="bottom"><b>_addr</b> {nullptr}</td></tr>
-<tr class="separator:af85f9116968f2a2900640846009f48ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00181d29f9a6e646bd9b07e0c35e9a8b"><td class="memItemLeft" align="right" valign="top"><a id="a00181d29f9a6e646bd9b07e0c35e9a8b"></a>
+byte *&#160;</td><td class="memItemRight" valign="bottom"><b>_addr</b> {nullptr}</td></tr>
+<tr class="separator:a00181d29f9a6e646bd9b07e0c35e9a8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b7bae1f24ec1ae96822fb865bfd0ea5"><td class="memItemLeft" align="right" valign="top"><a id="a5b7bae1f24ec1ae96822fb865bfd0ea5"></a>
<a class="el" href="classafio__v2__xxx_1_1handle.html#a818fff07c92eaab72532092d1c2a14f9">extent_type</a>&#160;</td><td class="memItemRight" valign="bottom"><b>_offset</b> {0}</td></tr>
<tr class="separator:a5b7bae1f24ec1ae96822fb865bfd0ea5"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -491,8 +491,8 @@ For portability, you can only assume that barriers write order for a single hand
</div>
</div>
-<a id="a7119886b920953e12340b05ea94e395d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7119886b920953e12340b05ea94e395d">&#9670;&nbsp;</a></span>barrier() <span class="overload">[2/2]</span></h2>
+<a id="a74e5785071e0d89b51edcbc9bc6089db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a74e5785071e0d89b51edcbc9bc6089db">&#9670;&nbsp;</a></span>barrier() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -501,7 +501,7 @@ For portability, you can only assume that barriers write order for a single hand
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">const_buffer_type</a> afio_v2_xxx::map_handle::barrier </td>
+ <td class="memname">static <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">const_buffer_type</a> afio_v2_xxx::map_handle::barrier </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">const_buffer_type</a>&#160;</td>
<td class="paramname"><em>req</em>, </td>
@@ -520,7 +520,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</td>
<td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">noexcept</span></span> </td>
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span><span class="mlabel">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -533,7 +533,8 @@ For portability, you can only assume that barriers write order for a single hand
</dd>
</dl>
<p>Upon return, one knows that memory in the returned buffer has been barriered (it may be empty if there is no support for this operation in AFIO, or if the current CPU does not support this operation). You may find the <code>is_nvram()</code> observer of particular use here. </p>
-<div class="fragment"><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; const_buffer_type ret{(<span class="keyword">const</span> <span class="keywordtype">char</span> *) (((uintptr_t) req.data) &amp; 31), 0};</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; ret.<a class="code" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a18ff05ed710d3b3f210bff2f0e195885">len</a> = req.data + req.len - ret.data;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keywordtype">char</span> *addr = ret.data; addr &lt; ret.data + ret.len; addr += 32)</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="comment">// Slightly UB ...</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">auto</span> *p = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>persistent&lt;char&gt; *<span class="keyword">&gt;</span>(addr);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">if</span>(memory_flush_none == p-&gt;flush(evict ? memory_flush_evict : memory_flush_retain))</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; {</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; req.len = 0;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">break</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; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; }</div><div class="ttc" id="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type_html_a18ff05ed710d3b3f210bff2f0e195885"><div class="ttname"><a href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a18ff05ed710d3b3f210bff2f0e195885">afio_v2_xxx::io_handle::const_buffer_type::len</a></div><div class="ttdeci">size_t len</div><div class="ttdoc">The number of bytes to write from this address. Try to make this a 64 byte multiple, or ideally, a whole multiple of page_size(). </div><div class="ttdef"><b>Definition:</b> io_handle.hpp:67</div></div>
+<div class="fragment"><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; const_buffer_type ret{(<a class="code" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a1a57197235e88675736a032578a3fd0c">const_buffer_type::pointer</a>)(((uintptr_t) req.data) &amp; 31), 0};</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; ret.<a class="code" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#af355ceae82988f25cfa34d595550cbcf">len</a> = req.data + req.len - ret.data;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a1a57197235e88675736a032578a3fd0c">const_buffer_type::pointer</a> addr = ret.data; addr &lt; ret.data + ret.len; addr += 32)</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="comment">// Slightly UB ...</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">auto</span> *p = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>persistent&lt;byte&gt; *<span class="keyword">&gt;</span>(addr);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">if</span>(memory_flush_none == p-&gt;flush(evict ? memory_flush_evict : memory_flush_retain))</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; {</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; req.len = 0;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">break</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; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; }</div><div class="ttc" id="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type_html_a1a57197235e88675736a032578a3fd0c"><div class="ttname"><a href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a1a57197235e88675736a032578a3fd0c">afio_v2_xxx::io_handle::const_buffer_type::pointer</a></div><div class="ttdeci">const byte * pointer</div><div class="ttdoc">Type of the pointer to memory. </div><div class="ttdef"><b>Definition:</b> io_handle.hpp:70</div></div>
+<div class="ttc" id="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type_html_af355ceae82988f25cfa34d595550cbcf"><div class="ttname"><a href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#af355ceae82988f25cfa34d595550cbcf">afio_v2_xxx::io_handle::const_buffer_type::len</a></div><div class="ttdeci">size_type len</div><div class="ttdoc">The number of bytes to write from this address. Try to make this a 64 byte multiple, or ideally, a whole multiple of page_size(). </div><div class="ttdef"><b>Definition:</b> io_handle.hpp:77</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -726,7 +727,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</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>(bytes + i.len &lt; bytes)</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; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; bytes += i.len;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">false</span>, d);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</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 class="fragment"><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="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</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">return</span> std::errc::value_too_large;</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; bytes += i.len;</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; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">false</span>, d);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</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>
</div>
@@ -764,7 +765,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><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; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</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; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</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; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; bytes += i.len;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">true</span>, d);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</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 class="fragment"><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; bytes += i.len;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">true</span>, d);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</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>
</div>
@@ -1018,7 +1019,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(buffer_type) * lst.size()));</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(buffer_type) * lst.size());</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; io_request&lt;buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(reqs, d);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a70a3c5e6f62efc95db81f831f3b90a2c"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">afio_v2_xxx::io_handle::buffers_type</a></div><div class="ttdeci">span&lt; buffer_type &gt; buffers_type</div><div class="ttdoc">The scatter buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:76</div></div>
+<div class="fragment"><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(buffer_type) * lst.size()));</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(buffer_type) * lst.size());</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; io_request&lt;buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(reqs, d);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a70a3c5e6f62efc95db81f831f3b90a2c"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">afio_v2_xxx::io_handle::buffers_type</a></div><div class="ttdeci">span&lt; buffer_type &gt; buffers_type</div><div class="ttdoc">The scatter buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:86</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><!-- fragment -->
</div>
@@ -1191,7 +1192,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(offset, bytes, exclusive, deadline(std::chrono::seconds(0))); }</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 class="fragment"><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(offset, bytes, exclusive, deadline(std::chrono::seconds(0))); }</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>
</div>
@@ -1331,7 +1332,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; const_buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>const_buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(const_buffer_type) * lst.size()));</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(const_buffer_type) * lst.size());</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; io_request&lt;const_buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">const_buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">write</a>(reqs, d);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a639b8760b1b98df95e4956f6cc56f6b5"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">afio_v2_xxx::io_handle::const_buffers_type</a></div><div class="ttdeci">span&lt; const_buffer_type &gt; const_buffers_type</div><div class="ttdoc">The gather buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:78</div></div>
+<div class="fragment"><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; const_buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>const_buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(const_buffer_type) * lst.size()));</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(const_buffer_type) * lst.size());</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; io_request&lt;const_buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">const_buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">write</a>(reqs, d);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a639b8760b1b98df95e4956f6cc56f6b5"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">afio_v2_xxx::io_handle::const_buffers_type</a></div><div class="ttdeci">span&lt; const_buffer_type &gt; const_buffers_type</div><div class="ttdoc">The gather buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:88</div></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><!-- fragment -->
</div>
diff --git a/classafio__v2__xxx_1_1map__handle.js b/classafio__v2__xxx_1_1map__handle.js
index 859fe24e..45545375 100644
--- a/classafio__v2__xxx_1_1map__handle.js
+++ b/classafio__v2__xxx_1_1map__handle.js
@@ -18,13 +18,12 @@ var classafio__v2__xxx_1_1map__handle =
[ "~map_handle", "classafio__v2__xxx_1_1map__handle.html#a545aef5843a50c73df15f4d1b692d3bf", null ],
[ "map_handle", "classafio__v2__xxx_1_1map__handle.html#a96cb504683feb27581012d48fd967cfc", null ],
[ "map_handle", "classafio__v2__xxx_1_1map__handle.html#acd3a23554d49cd7761c05c78316e843d", null ],
- [ "address", "classafio__v2__xxx_1_1map__handle.html#a1e9273d0c6aca7da6480437f6cf6638a", null ],
+ [ "address", "classafio__v2__xxx_1_1map__handle.html#a6f203a9bb0bee94ac6b395ac5f3a2270", null ],
[ "are_reads_from_cache", "classafio__v2__xxx_1_1map__handle.html#a71137cb82edd9a1bcb24f64886b5826d", null ],
[ "are_safety_fsyncs_issued", "classafio__v2__xxx_1_1map__handle.html#a3fc7db93fac699f5ecad453642ed314e", null ],
[ "are_writes_durable", "classafio__v2__xxx_1_1map__handle.html#a97ffbbf53f51549549efef0b49e125dc", null ],
[ "barrier", "classafio__v2__xxx_1_1map__handle.html#a243156928e89b8988a1412f211b3b603", null ],
[ "barrier", "classafio__v2__xxx_1_1map__handle.html#ad6ab309f4df975892f3bcbef345c779b", null ],
- [ "barrier", "classafio__v2__xxx_1_1map__handle.html#a7119886b920953e12340b05ea94e395d", null ],
[ "capacity", "classafio__v2__xxx_1_1map__handle.html#ad29ceb1ecb38e9e74e63404b7db3a5a2", null ],
[ "clone", "classafio__v2__xxx_1_1map__handle.html#a54790e954f57372b87b095451cc79c38", null ],
[ "close", "classafio__v2__xxx_1_1map__handle.html#aca05f73280e20cb18cc0dd7f60a1aae1", null ],
@@ -75,7 +74,7 @@ var classafio__v2__xxx_1_1map__handle =
[ "write", "classafio__v2__xxx_1_1map__handle.html#a00b7e1e99089c2641c45ee824811ebc1", null ],
[ "zero_memory", "classafio__v2__xxx_1_1map__handle.html#ac35a85e8a6cca721640ddc6b5008e145", null ],
[ "mapped_file_handle", "classafio__v2__xxx_1_1map__handle.html#a04d5b12318493f32de67854714001ab2", null ],
- [ "_addr", "classafio__v2__xxx_1_1map__handle.html#af85f9116968f2a2900640846009f48ea", null ],
+ [ "_addr", "classafio__v2__xxx_1_1map__handle.html#a00181d29f9a6e646bd9b07e0c35e9a8b", null ],
[ "_caching", "classafio__v2__xxx_1_1map__handle.html#af024e3d92d9a01ac367734e9cdc517fb", null ],
[ "_flag", "classafio__v2__xxx_1_1map__handle.html#abdcdfc9d1ed9193bff10f3a03257b677", null ],
[ "_flags", "classafio__v2__xxx_1_1map__handle.html#ac46e0a296c31fcd0a996a79d78647fb6", null ],
diff --git a/classafio__v2__xxx_1_1mapped__file__handle-members.html b/classafio__v2__xxx_1_1mapped__file__handle-members.html
index c434cc3c..e96495e2 100644
--- a/classafio__v2__xxx_1_1mapped__file__handle-members.html
+++ b/classafio__v2__xxx_1_1mapped__file__handle-members.html
@@ -97,7 +97,7 @@ $(document).ready(function(){initNavTree('classafio__v2__xxx_1_1mapped__file__ha
<tr bgcolor="#f0f0f0"><td class="entry"><b>_service</b> (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"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>_sh</b> (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"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>_v</b> (defined in <a class="el" href="classafio__v2__xxx_1_1handle.html">afio_v2_xxx::handle</a>)</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">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#adca505e51ea006ffa59e3673ea0a9853">address</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#ab1d9c370e86dc327e3efad1c71db3cb3">address</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_1handle.html#a71137cb82edd9a1bcb24f64886b5826d">are_reads_from_cache</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#a3fc7db93fac699f5ecad453642ed314e">are_safety_fsyncs_issued</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#a97ffbbf53f51549549efef0b49e125dc">are_writes_durable</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>
diff --git a/classafio__v2__xxx_1_1mapped__file__handle.html b/classafio__v2__xxx_1_1mapped__file__handle.html
index c80d3335..cf9f265f 100644
--- a/classafio__v2__xxx_1_1mapped__file__handle.html
+++ b/classafio__v2__xxx_1_1mapped__file__handle.html
@@ -216,10 +216,10 @@ const <a class="el" href="classafio__v2__xxx_1_1map__handle.html">map_handle</a>
<a class="el" href="classafio__v2__xxx_1_1map__handle.html">map_handle</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#a767caa74d636805d0986adc59b70060c">map</a> () noexcept</td></tr>
<tr class="memdesc:a767caa74d636805d0986adc59b70060c"><td class="mdescLeft">&#160;</td><td class="mdescRight">The map this handle is using. <br /></td></tr>
<tr class="separator:a767caa74d636805d0986adc59b70060c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adca505e51ea006ffa59e3673ea0a9853"><td class="memItemLeft" align="right" valign="top"><a id="adca505e51ea006ffa59e3673ea0a9853"></a>
-char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#adca505e51ea006ffa59e3673ea0a9853">address</a> () const noexcept</td></tr>
-<tr class="memdesc:adca505e51ea006ffa59e3673ea0a9853"><td class="mdescLeft">&#160;</td><td class="mdescRight">The address in memory where this mapped file resides. <br /></td></tr>
-<tr class="separator:adca505e51ea006ffa59e3673ea0a9853"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab1d9c370e86dc327e3efad1c71db3cb3"><td class="memItemLeft" align="right" valign="top"><a id="ab1d9c370e86dc327e3efad1c71db3cb3"></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>
@@ -841,7 +841,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</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>(bytes + i.len &lt; bytes)</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; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; bytes += i.len;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">false</span>, d);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</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 class="fragment"><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="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</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">return</span> std::errc::value_too_large;</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; bytes += i.len;</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; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">false</span>, d);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</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>
</div>
@@ -879,7 +879,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><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; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</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; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</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; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; bytes += i.len;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">true</span>, d);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</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 class="fragment"><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span>(bytes + i.len &lt; bytes)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">return</span> std::errc::value_too_large;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; bytes += i.len;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(reqs.offset, bytes, <span class="keyword">true</span>, d);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</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>
</div>
@@ -1406,7 +1406,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(buffer_type) * lst.size()));</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(buffer_type) * lst.size());</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; io_request&lt;buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(reqs, d);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a70a3c5e6f62efc95db81f831f3b90a2c"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">afio_v2_xxx::io_handle::buffers_type</a></div><div class="ttdeci">span&lt; buffer_type &gt; buffers_type</div><div class="ttdoc">The scatter buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:76</div></div>
+<div class="fragment"><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(buffer_type) * lst.size()));</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(buffer_type) * lst.size());</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; io_request&lt;buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a71d7636f40607829cacc2c974c4a2a28">read</a>(reqs, d);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a70a3c5e6f62efc95db81f831f3b90a2c"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a70a3c5e6f62efc95db81f831f3b90a2c">afio_v2_xxx::io_handle::buffers_type</a></div><div class="ttdeci">span&lt; buffer_type &gt; buffers_type</div><div class="ttdoc">The scatter buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:86</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><!-- fragment -->
</div>
@@ -1770,7 +1770,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(offset, bytes, exclusive, deadline(std::chrono::seconds(0))); }</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 class="fragment"><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#a88689b15e6e8b6ce1f945737dee4369e">lock</a>(offset, bytes, exclusive, deadline(std::chrono::seconds(0))); }</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>
</div>
@@ -1974,7 +1974,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; const_buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>const_buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(const_buffer_type) * lst.size()));</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(const_buffer_type) * lst.size());</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; io_request&lt;const_buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">const_buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">write</a>(reqs, d);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a639b8760b1b98df95e4956f6cc56f6b5"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">afio_v2_xxx::io_handle::const_buffers_type</a></div><div class="ttdeci">span&lt; const_buffer_type &gt; const_buffers_type</div><div class="ttdoc">The gather buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:78</div></div>
+<div class="fragment"><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; const_buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>const_buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(const_buffer_type) * lst.size()));</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(const_buffer_type) * lst.size());</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; io_request&lt;const_buffers_type&gt; reqs(<a class="code" href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">const_buffers_type</a>(_reqs, lst.size()), offset);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classafio__v2__xxx_1_1io__handle.html#aefac4710e5617264347f437b04732c01">write</a>(reqs, d);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div><div class="ttc" id="classafio__v2__xxx_1_1io__handle_html_a639b8760b1b98df95e4956f6cc56f6b5"><div class="ttname"><a href="classafio__v2__xxx_1_1io__handle.html#a639b8760b1b98df95e4956f6cc56f6b5">afio_v2_xxx::io_handle::const_buffers_type</a></div><div class="ttdeci">span&lt; const_buffer_type &gt; const_buffers_type</div><div class="ttdoc">The gather buffers type used by this handle. Guaranteed to be TrivialType apart from construction...</div><div class="ttdef"><b>Definition:</b> io_handle.hpp:88</div></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><!-- fragment -->
</div>
diff --git a/classafio__v2__xxx_1_1mapped__file__handle.js b/classafio__v2__xxx_1_1mapped__file__handle.js
index 5a9b8fa0..529e1333 100644
--- a/classafio__v2__xxx_1_1mapped__file__handle.js
+++ b/classafio__v2__xxx_1_1mapped__file__handle.js
@@ -24,7 +24,7 @@ var classafio__v2__xxx_1_1mapped__file__handle =
[ "mapped_file_handle", "classafio__v2__xxx_1_1mapped__file__handle.html#a12b186b46922da667e4efdd9a63e061c", null ],
[ "~mapped_file_handle", "classafio__v2__xxx_1_1mapped__file__handle.html#a9cb4595c554c6d1241e8af3442f89b38", null ],
[ "_fetch_inode", "classafio__v2__xxx_1_1mapped__file__handle.html#ae579de33d4d008c50b4da07b641b3ba5", null ],
- [ "address", "classafio__v2__xxx_1_1mapped__file__handle.html#adca505e51ea006ffa59e3673ea0a9853", null ],
+ [ "address", "classafio__v2__xxx_1_1mapped__file__handle.html#ab1d9c370e86dc327e3efad1c71db3cb3", null ],
[ "are_reads_from_cache", "classafio__v2__xxx_1_1mapped__file__handle.html#a71137cb82edd9a1bcb24f64886b5826d", null ],
[ "are_safety_fsyncs_issued", "classafio__v2__xxx_1_1mapped__file__handle.html#a3fc7db93fac699f5ecad453642ed314e", null ],
[ "are_writes_durable", "classafio__v2__xxx_1_1mapped__file__handle.html#a97ffbbf53f51549549efef0b49e125dc", null ],
diff --git a/classafio__v2__xxx_1_1section__handle.html b/classafio__v2__xxx_1_1section__handle.html
index bee5fea2..a4606fe6 100644
--- a/classafio__v2__xxx_1_1section__handle.html
+++ b/classafio__v2__xxx_1_1section__handle.html
@@ -455,8 +455,8 @@ flag&#160;</td><td class="memItemRight" valign="bottom"><b>_flags</b> {flag::non
<tr><td class="fieldname"><a id="a0489b6c1e25cd2bad2ba1ec86e1aaf18a9516dfb15f51c7ee19a4d46b8c0dbe1d"></a>append&#160;</td><td class="fielddoc"><p>All mainstream OSs and CIFS guarantee this is atomic with respect to all other appenders (FILE_APPEND_DATA|SYNCHRONISE or O_APPEND) </p>
</td></tr>
</table>
-<div class="fragment"><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; : <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <span class="comment">// bit 0 set means writable</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; unchanged = 0,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; none = 2, <span class="comment">//!&lt; No ability to read or write anything, but can synchronise (SYNCHRONIZE or 0)</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment"></span> attr_read = 4, <span class="comment">//!&lt; Ability to read attributes (FILE_READ_ATTRIBUTES|SYNCHRONIZE or O_RDONLY)</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment"></span> attr_write = 5, <span class="comment">//!&lt; Ability to read and write attributes (FILE_READ_ATTRIBUTES|FILE_WRITE_ATTRIBUTES|SYNCHRONIZE or O_RDONLY)</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment"></span> <a class="code" href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">read</a> = 6, <span class="comment">//!&lt; Ability to read (READ_CONTROL|FILE_READ_DATA|FILE_READ_ATTRIBUTES|FILE_READ_EA|SYNCHRONISE or O_RDONLY)</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment"></span> <a class="code" href="namespaceafio__v2__xxx.html#a2d15768d28ea660ebe44901508ed3372">write</a> = 7, <span class="comment">//!&lt; Ability to read and write (READ_CONTROL|FILE_READ_DATA|FILE_READ_ATTRIBUTES|FILE_READ_EA|FILE_WRITE_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|FILE_APPEND_DATA|SYNCHRONISE or O_RDWR)</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"></span> append = 9 <span class="comment">//!&lt; All mainstream OSs and CIFS guarantee this is atomic with respect to all other appenders (FILE_APPEND_DATA|SYNCHRONISE or O_APPEND)</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</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="l00072"></a><span class="lineno"> 72</span>&#160; };</div><div class="ttc" id="namespaceafio__v2__xxx_html_a3cff8f3910dbf47663e5df1dc7e5ba47"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">afio_v2_xxx::read</a></div><div class="ttdeci">io_handle::io_result&lt; io_handle::buffers_type &gt; read(io_handle &amp;self, io_handle::io_request&lt; io_handle::buffers_type &gt; reqs, deadline d=deadline()) noexcept</div><div class="ttdoc">Read data from the open handle. </div><div class="ttdef"><b>Definition:</b> io_handle.hpp:473</div></div>
-<div class="ttc" id="namespaceafio__v2__xxx_html_a2d15768d28ea660ebe44901508ed3372"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a2d15768d28ea660ebe44901508ed3372">afio_v2_xxx::write</a></div><div class="ttdeci">io_handle::io_result&lt; io_handle::const_buffers_type &gt; write(io_handle &amp;self, io_handle::io_request&lt; io_handle::const_buffers_type &gt; reqs, deadline d=deadline()) noexcept</div><div class="ttdoc">Write data to the open handle. </div><div class="ttdef"><b>Definition:</b> io_handle.hpp:504</div></div>
+<div class="fragment"><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; : <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <span class="comment">// bit 0 set means writable</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; unchanged = 0,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; none = 2, <span class="comment">//!&lt; No ability to read or write anything, but can synchronise (SYNCHRONIZE or 0)</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment"></span> attr_read = 4, <span class="comment">//!&lt; Ability to read attributes (FILE_READ_ATTRIBUTES|SYNCHRONIZE or O_RDONLY)</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment"></span> attr_write = 5, <span class="comment">//!&lt; Ability to read and write attributes (FILE_READ_ATTRIBUTES|FILE_WRITE_ATTRIBUTES|SYNCHRONIZE or O_RDONLY)</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment"></span> <a class="code" href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">read</a> = 6, <span class="comment">//!&lt; Ability to read (READ_CONTROL|FILE_READ_DATA|FILE_READ_ATTRIBUTES|FILE_READ_EA|SYNCHRONISE or O_RDONLY)</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment"></span> <a class="code" href="namespaceafio__v2__xxx.html#a2d15768d28ea660ebe44901508ed3372">write</a> = 7, <span class="comment">//!&lt; Ability to read and write (READ_CONTROL|FILE_READ_DATA|FILE_READ_ATTRIBUTES|FILE_READ_EA|FILE_WRITE_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|FILE_APPEND_DATA|SYNCHRONISE or O_RDWR)</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"></span> append = 9 <span class="comment">//!&lt; All mainstream OSs and CIFS guarantee this is atomic with respect to all other appenders (FILE_APPEND_DATA|SYNCHRONISE or O_APPEND)</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</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="l00072"></a><span class="lineno"> 72</span>&#160; };</div><div class="ttc" id="namespaceafio__v2__xxx_html_a3cff8f3910dbf47663e5df1dc7e5ba47"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a3cff8f3910dbf47663e5df1dc7e5ba47">afio_v2_xxx::read</a></div><div class="ttdeci">io_handle::io_result&lt; io_handle::buffers_type &gt; read(io_handle &amp;self, io_handle::io_request&lt; io_handle::buffers_type &gt; reqs, deadline d=deadline()) noexcept</div><div class="ttdoc">Read data from the open handle. </div><div class="ttdef"><b>Definition:</b> io_handle.hpp:483</div></div>
+<div class="ttc" id="namespaceafio__v2__xxx_html_a2d15768d28ea660ebe44901508ed3372"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a2d15768d28ea660ebe44901508ed3372">afio_v2_xxx::write</a></div><div class="ttdeci">io_handle::io_result&lt; io_handle::const_buffers_type &gt; write(io_handle &amp;self, io_handle::io_request&lt; io_handle::const_buffers_type &gt; reqs, deadline d=deadline()) noexcept</div><div class="ttdoc">Write data to the open handle. </div><div class="ttdef"><b>Definition:</b> io_handle.hpp:514</div></div>
</div><!-- fragment -->
</div>
</div>
diff --git a/config_8hpp.html b/config_8hpp.html
index bd8087d5..5f97d392 100644
--- a/config_8hpp.html
+++ b/config_8hpp.html
@@ -100,6 +100,7 @@ $(document).ready(function(){initNavTree('config_8hpp.html','');});
<code>#include &quot;quickcpplib/include/scoped_undo.hpp&quot;</code><br />
<code>#include &quot;quickcpplib/include/span.hpp&quot;</code><br />
<code>#include &quot;quickcpplib/include/optional.hpp&quot;</code><br />
+<code>#include &quot;quickcpplib/include/byte.hpp&quot;</code><br />
<code>#include &quot;quickcpplib/include/string_view.hpp&quot;</code><br />
<code>#include &quot;quickcpplib/include/persistent.hpp&quot;</code><br />
<code>#include &quot;outcome/include/outcome.hpp&quot;</code><br />
@@ -343,7 +344,7 @@ template&lt;class R , class U , class... Args&gt; </td></tr>
</tr>
</table>
</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line">{ <a class="code" href="namespaceafio__v2__xxx.html#a08363b8572e6a8971a6d236d54fb8287">\</a></div><div class="line"><a class="code" href="namespaceafio__v2__xxx.html#a08363b8572e6a8971a6d236d54fb8287"> AFIO_V2_NAMESPACE::log</a>().emplace_back(QUICKCPPLIB_NAMESPACE::ringbuffer_log::level::fatal, (message), AFIO_V2_NAMESPACE::detail::unsigned_integer_cast&lt;unsigned&gt;(inst), QUICKCPPLIB_NAMESPACE::utils::thread::this_thread_id(), (<a class="code" href="group__config.html#ga98c874cd585103f72c3c8338b491436b">AFIO_LOG_BACKTRACE_LEVELS</a> &amp; (1U &lt;&lt; 1U)) ? <span class="keyword">nullptr</span> : __func__, __LINE__); \</div><div class="line"> AFIO_LOG_FATAL_TO_CERR(message); \</div><div class="line"> }</div><div class="ttc" id="namespaceafio__v2__xxx_html_a08363b8572e6a8971a6d236d54fb8287"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a08363b8572e6a8971a6d236d54fb8287">afio_v2_xxx::log</a></div><div class="ttdeci">QUICKCPPLIB_NAMESPACE::ringbuffer_log::simple_ringbuffer_log&lt; AFIO_LOGGING_MEMORY &gt; &amp; log() noexcept</div><div class="ttdoc">The log used by AFIO. </div><div class="ttdef"><b>Definition:</b> config.hpp:500</div></div>
+<b>Value:</b><div class="fragment"><div class="line">{ <a class="code" href="namespaceafio__v2__xxx.html#a08363b8572e6a8971a6d236d54fb8287">\</a></div><div class="line"><a class="code" href="namespaceafio__v2__xxx.html#a08363b8572e6a8971a6d236d54fb8287"> AFIO_V2_NAMESPACE::log</a>().emplace_back(QUICKCPPLIB_NAMESPACE::ringbuffer_log::level::fatal, (message), AFIO_V2_NAMESPACE::detail::unsigned_integer_cast&lt;unsigned&gt;(inst), QUICKCPPLIB_NAMESPACE::utils::thread::this_thread_id(), (<a class="code" href="group__config.html#ga98c874cd585103f72c3c8338b491436b">AFIO_LOG_BACKTRACE_LEVELS</a> &amp; (1U &lt;&lt; 1U)) ? <span class="keyword">nullptr</span> : __func__, __LINE__); \</div><div class="line"> AFIO_LOG_FATAL_TO_CERR(message); \</div><div class="line"> }</div><div class="ttc" id="namespaceafio__v2__xxx_html_a08363b8572e6a8971a6d236d54fb8287"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a08363b8572e6a8971a6d236d54fb8287">afio_v2_xxx::log</a></div><div class="ttdeci">QUICKCPPLIB_NAMESPACE::ringbuffer_log::simple_ringbuffer_log&lt; AFIO_LOGGING_MEMORY &gt; &amp; log() noexcept</div><div class="ttdoc">The log used by AFIO. </div><div class="ttdef"><b>Definition:</b> config.hpp:506</div></div>
<div class="ttc" id="group__config_html_ga98c874cd585103f72c3c8338b491436b"><div class="ttname"><a href="group__config.html#ga98c874cd585103f72c3c8338b491436b">AFIO_LOG_BACKTRACE_LEVELS</a></div><div class="ttdeci">#define AFIO_LOG_BACKTRACE_LEVELS</div><div class="ttdoc">Bit mask of which log levels should be stack backtraced which will slow those logs thirty fold or so...</div><div class="ttdef"><b>Definition:</b> config.hpp:68</div></div>
</div><!-- fragment -->
</div>
diff --git a/functions_a.html b/functions_a.html
index 629de41c..7ad1d4fc 100644
--- a/functions_a.html
+++ b/functions_a.html
@@ -90,8 +90,8 @@ $(document).ready(function(){initNavTree('functions_a.html','');});
: <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1cached__parent__handle__adapter.html#a8650bcb7fef2623698debe2d49629d36">afio_v2_xxx::algorithm::cached_parent_handle_adapter&lt; T &gt;</a>
</li>
<li>address()
-: <a class="el" href="classafio__v2__xxx_1_1map__handle.html#a1e9273d0c6aca7da6480437f6cf6638a">afio_v2_xxx::map_handle</a>
-, <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#adca505e51ea006ffa59e3673ea0a9853">afio_v2_xxx::mapped_file_handle</a>
+: <a class="el" href="classafio__v2__xxx_1_1map__handle.html#a6f203a9bb0bee94ac6b395ac5f3a2270">afio_v2_xxx::map_handle</a>
+, <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#ab1d9c370e86dc327e3efad1c71db3cb3">afio_v2_xxx::mapped_file_handle</a>
</li>
<li>aligned_io
: <a class="el" href="structafio__v2__xxx_1_1native__handle__type_1_1disposition__base.html#a89e0e728fc7a7e4a008e57d572702de6a73ab50983f5265ae0d234d89ffda2420">afio_v2_xxx::native_handle_type::disposition_base</a>
diff --git a/functions_b.html b/functions_b.html
index 45602ee4..9e9a0642 100644
--- a/functions_b.html
+++ b/functions_b.html
@@ -94,7 +94,7 @@ $(document).ready(function(){initNavTree('functions_b.html','');});
</li>
<li>barrier()
: <a class="el" href="classafio__v2__xxx_1_1io__handle.html#a243156928e89b8988a1412f211b3b603">afio_v2_xxx::io_handle</a>
-, <a class="el" href="classafio__v2__xxx_1_1map__handle.html#a7119886b920953e12340b05ea94e395d">afio_v2_xxx::map_handle</a>
+, <a class="el" href="classafio__v2__xxx_1_1map__handle.html#a74e5785071e0d89b51edcbc9bc6089db">afio_v2_xxx::map_handle</a>
</li>
<li>barrier_on_close
: <a class="el" href="structafio__v2__xxx_1_1section__handle_1_1flag__base.html#a5b790e66402ef3a07ce9464f3e1dc9d8a13b22e159d85ac0067a3aac0f7255acd">afio_v2_xxx::section_handle::flag_base</a>
diff --git a/functions_d.html b/functions_d.html
index 111352eb..9ff5dcb3 100644
--- a/functions_d.html
+++ b/functions_d.html
@@ -85,8 +85,8 @@ $(document).ready(function(){initNavTree('functions_d.html','');});
<h3><a id="index_d"></a>- d -</h3><ul>
<li>data()
: <a class="el" href="structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#ab887c4445a8d0a42bdf493e28556aee4">afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; has_default_construction, T &gt;</a>
-, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#af99fc701020c497671e8b865294b5ed2">afio_v2_xxx::io_handle::buffer_type</a>
-, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#adc7fb3275838792208c936669926cfe9">afio_v2_xxx::io_handle::const_buffer_type</a>
+, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a7220a73a4d1d6465abe6351b04d8caf4">afio_v2_xxx::io_handle::buffer_type</a>
+, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a52a0e6d1b115430256e64db0c90d9186">afio_v2_xxx::io_handle::const_buffer_type</a>
</li>
<li>decommit()
: <a class="el" href="classafio__v2__xxx_1_1map__handle.html#a5b69e8faa8a9e47dec1b1a123c722a3e">afio_v2_xxx::map_handle</a>
diff --git a/functions_func_a.html b/functions_func_a.html
index 5307c56f..70a9855d 100644
--- a/functions_func_a.html
+++ b/functions_func_a.html
@@ -84,8 +84,8 @@ $(document).ready(function(){initNavTree('functions_func_a.html','');});
<h3><a id="index_a"></a>- a -</h3><ul>
<li>address()
-: <a class="el" href="classafio__v2__xxx_1_1map__handle.html#a1e9273d0c6aca7da6480437f6cf6638a">afio_v2_xxx::map_handle</a>
-, <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#adca505e51ea006ffa59e3673ea0a9853">afio_v2_xxx::mapped_file_handle</a>
+: <a class="el" href="classafio__v2__xxx_1_1map__handle.html#a6f203a9bb0bee94ac6b395ac5f3a2270">afio_v2_xxx::map_handle</a>
+, <a class="el" href="classafio__v2__xxx_1_1mapped__file__handle.html#ab1d9c370e86dc327e3efad1c71db3cb3">afio_v2_xxx::mapped_file_handle</a>
</li>
<li>are_reads_from_cache()
: <a class="el" href="classafio__v2__xxx_1_1handle.html#a71137cb82edd9a1bcb24f64886b5826d">afio_v2_xxx::handle</a>
diff --git a/functions_func_b.html b/functions_func_b.html
index fd81f26d..569a9911 100644
--- a/functions_func_b.html
+++ b/functions_func_b.html
@@ -94,7 +94,7 @@ $(document).ready(function(){initNavTree('functions_func_b.html','');});
</li>
<li>barrier()
: <a class="el" href="classafio__v2__xxx_1_1io__handle.html#a243156928e89b8988a1412f211b3b603">afio_v2_xxx::io_handle</a>
-, <a class="el" href="classafio__v2__xxx_1_1map__handle.html#a7119886b920953e12340b05ea94e395d">afio_v2_xxx::map_handle</a>
+, <a class="el" href="classafio__v2__xxx_1_1map__handle.html#a74e5785071e0d89b51edcbc9bc6089db">afio_v2_xxx::map_handle</a>
</li>
<li>begin()
: <a class="el" href="structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#acebb433711065ad2b2d16d78eab4b0a0">afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; has_default_construction, T &gt;</a>
diff --git a/functions_l.html b/functions_l.html
index a932b7f6..699377c1 100644
--- a/functions_l.html
+++ b/functions_l.html
@@ -87,8 +87,8 @@ $(document).ready(function(){initNavTree('functions_l.html','');});
: <a class="el" href="structafio__v2__xxx_1_1directory__entry.html#aca105b4acce38e178a8c1656fc02f3e8">afio_v2_xxx::directory_entry</a>
</li>
<li>len
-: <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a772696494c5de167be74e3b5120e46b0">afio_v2_xxx::io_handle::buffer_type</a>
-, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a18ff05ed710d3b3f210bff2f0e195885">afio_v2_xxx::io_handle::const_buffer_type</a>
+: <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a629e060c2032a433613cf42dd969d61e">afio_v2_xxx::io_handle::buffer_type</a>
+, <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>
diff --git a/functions_p.html b/functions_p.html
index 03697852..3066fae4 100644
--- a/functions_p.html
+++ b/functions_p.html
@@ -118,6 +118,8 @@ $(document).ready(function(){initNavTree('functions_p.html','');});
: <a class="el" href="structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a41fe029355ecd5d1febf45cb6d80e846">afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; has_default_construction, T &gt;</a>
, <a class="el" href="structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a1a637a4a2f57438ece387e1c79e4fb6f">afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; true, T &gt;</a>
, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__iterator.html#a51b7b19ce3ee34e86e6bcbe96a0fe22c">afio_v2_xxx::algorithm::impl::trivial_vector_iterator&lt; T &gt;</a>
+, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a2d991122b5a706c69def8631e2897a1d">afio_v2_xxx::io_handle::buffer_type</a>
+, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a1a57197235e88675736a032578a3fd0c">afio_v2_xxx::io_handle::const_buffer_type</a>
, <a class="el" href="classafio__v2__xxx_1_1path__view.html#aecb84aa9657e989ae6cee330e329c535">afio_v2_xxx::path_view</a>
</li>
<li>pop_back()
@@ -130,7 +132,7 @@ $(document).ready(function(){initNavTree('functions_p.html','');});
: <a class="el" href="structafio__v2__xxx_1_1section__handle_1_1flag__base.html#a5b790e66402ef3a07ce9464f3e1dc9d8a522b281f854fe92d7ea674d2d8cc4be2">afio_v2_xxx::section_handle::flag_base</a>
</li>
<li>prefetch()
-: <a class="el" href="classafio__v2__xxx_1_1map__handle.html#ae16cb0af9b96f90f87f42318f7d35e65">afio_v2_xxx::map_handle</a>
+: <a class="el" href="classafio__v2__xxx_1_1map__handle.html#ab569da5c3ffa64200f8b10dbe683bbc8">afio_v2_xxx::map_handle</a>
</li>
<li>process
: <a class="el" href="structafio__v2__xxx_1_1native__handle__type_1_1disposition__base.html#a89e0e728fc7a7e4a008e57d572702de6a6d1480a03d1d0ac5fd0248686ebc00c4">afio_v2_xxx::native_handle_type::disposition_base</a>
diff --git a/functions_s.html b/functions_s.html
index 0f61e538..824a646f 100644
--- a/functions_s.html
+++ b/functions_s.html
@@ -135,6 +135,8 @@ $(document).ready(function(){initNavTree('functions_s.html','');});
, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__iterator.html#a04de3895e4f179e8f66f80f8708c78eb">afio_v2_xxx::algorithm::impl::trivial_vector_iterator&lt; T &gt;</a>
, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">afio_v2_xxx::algorithm::mapped_span&lt; T &gt;</a>
, <a class="el" href="classafio__v2__xxx_1_1handle.html#a0adf7fa00e23ed561328f473986e9ccc">afio_v2_xxx::handle</a>
+, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#abb445f051adab15fbca4b0acc8461e4c">afio_v2_xxx::io_handle::buffer_type</a>
+, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a80e8c0e9427d35c3cacc60715f64b765">afio_v2_xxx::io_handle::const_buffer_type</a>
, <a class="el" href="classafio__v2__xxx_1_1io__service.html#a2efd36ca952a401e2b0bc44b7e52524e">afio_v2_xxx::io_service</a>
, <a class="el" href="classafio__v2__xxx_1_1path__view.html#ac9ea02ed943d7b9adeed34c4ed100d5f">afio_v2_xxx::path_view</a>
, <a class="el" href="structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#ac854196b2d774c4c7375b1e15296b2d2">afio_v2_xxx::storage_profile::storage_profile</a>
@@ -215,7 +217,7 @@ $(document).ready(function(){initNavTree('functions_s.html','');});
, <a class="el" href="structafio__v2__xxx_1_1path__discovery_1_1discovered__path.html#a4096c25137f7ac4bd58284ab7a82bd00">afio_v2_xxx::path_discovery::discovered_path</a>
</li>
<li>stat_t()
-: <a class="el" href="structafio__v2__xxx_1_1stat__t.html#a0a07fcfc00ab2593a47400549eba8509">afio_v2_xxx::stat_t</a>
+: <a class="el" href="structafio__v2__xxx_1_1stat__t.html#ad21151e8fb1ae4ef5d628b5e08f973c4">afio_v2_xxx::stat_t</a>
</li>
<li>statfs_t()
: <a class="el" href="structafio__v2__xxx_1_1statfs__t.html#ab9d13f831de61aafbfcdcb8bac53e521">afio_v2_xxx::statfs_t</a>
diff --git a/functions_type.html b/functions_type.html
index 19abbc43..71b08051 100644
--- a/functions_type.html
+++ b/functions_type.html
@@ -209,6 +209,8 @@ $(document).ready(function(){initNavTree('functions_type.html','');});
: <a class="el" href="structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a41fe029355ecd5d1febf45cb6d80e846">afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; has_default_construction, T &gt;</a>
, <a class="el" href="structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a1a637a4a2f57438ece387e1c79e4fb6f">afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; true, T &gt;</a>
, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__iterator.html#a51b7b19ce3ee34e86e6bcbe96a0fe22c">afio_v2_xxx::algorithm::impl::trivial_vector_iterator&lt; T &gt;</a>
+, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a2d991122b5a706c69def8631e2897a1d">afio_v2_xxx::io_handle::buffer_type</a>
+, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a1a57197235e88675736a032578a3fd0c">afio_v2_xxx::io_handle::const_buffer_type</a>
, <a class="el" href="classafio__v2__xxx_1_1path__view.html#aecb84aa9657e989ae6cee330e329c535">afio_v2_xxx::path_view</a>
</li>
</ul>
@@ -236,6 +238,8 @@ $(document).ready(function(){initNavTree('functions_type.html','');});
, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__iterator.html#a04de3895e4f179e8f66f80f8708c78eb">afio_v2_xxx::algorithm::impl::trivial_vector_iterator&lt; T &gt;</a>
, <a class="el" href="classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5">afio_v2_xxx::algorithm::mapped_span&lt; T &gt;</a>
, <a class="el" href="classafio__v2__xxx_1_1handle.html#a0adf7fa00e23ed561328f473986e9ccc">afio_v2_xxx::handle</a>
+, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#abb445f051adab15fbca4b0acc8461e4c">afio_v2_xxx::io_handle::buffer_type</a>
+, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a80e8c0e9427d35c3cacc60715f64b765">afio_v2_xxx::io_handle::const_buffer_type</a>
, <a class="el" href="classafio__v2__xxx_1_1io__service.html#a2efd36ca952a401e2b0bc44b7e52524e">afio_v2_xxx::io_service</a>
, <a class="el" href="classafio__v2__xxx_1_1path__view.html#ac9ea02ed943d7b9adeed34c4ed100d5f">afio_v2_xxx::path_view</a>
, <a class="el" href="structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#ac854196b2d774c4c7375b1e15296b2d2">afio_v2_xxx::storage_profile::storage_profile</a>
diff --git a/functions_vars.html b/functions_vars.html
index 3c87a820..bf54af43 100644
--- a/functions_vars.html
+++ b/functions_vars.html
@@ -98,8 +98,8 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
<h3><a id="index_d"></a>- d -</h3><ul>
<li>data
-: <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#af99fc701020c497671e8b865294b5ed2">afio_v2_xxx::io_handle::buffer_type</a>
-, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#adc7fb3275838792208c936669926cfe9">afio_v2_xxx::io_handle::const_buffer_type</a>
+: <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a7220a73a4d1d6465abe6351b04d8caf4">afio_v2_xxx::io_handle::buffer_type</a>
+, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a52a0e6d1b115430256e64db0c90d9186">afio_v2_xxx::io_handle::const_buffer_type</a>
</li>
<li>description
: <a class="el" href="structafio__v2__xxx_1_1storage__profile_1_1item__base.html#a3914ff417e4a91fd0cc1da8ccb3e81d0">afio_v2_xxx::storage_profile::item_base</a>
@@ -190,8 +190,8 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
: <a class="el" href="structafio__v2__xxx_1_1directory__entry.html#aca105b4acce38e178a8c1656fc02f3e8">afio_v2_xxx::directory_entry</a>
</li>
<li>len
-: <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a772696494c5de167be74e3b5120e46b0">afio_v2_xxx::io_handle::buffer_type</a>
-, <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a18ff05ed710d3b3f210bff2f0e195885">afio_v2_xxx::io_handle::const_buffer_type</a>
+: <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a629e060c2032a433613cf42dd969d61e">afio_v2_xxx::io_handle::buffer_type</a>
+, <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="structafio__v2__xxx_1_1path__view_1_1c__str.html#a879ec6f6501d659bc7b04745c1a33eaa">afio_v2_xxx::path_view::c_str</a>
diff --git a/index.html b/index.html
index ace7a3de..c1d980ca 100644
--- a/index.html
+++ b/index.html
@@ -115,7 +115,7 @@ $(document).ready(function(){initNavTree('index.html','');});
<dl class="section note"><dt>Note</dt><dd>Note that this code is of late alpha quality. It's quite reliable on Windows and Linux, but be careful when using it!</dd></dl>
<p>Examples of use: </p><table width="100%" border="0" cellpadding="4">
<tr>
-<td width="50%" valign="top"><div class="fragment"></div><!-- fragment --> </td><td width="50%" valign="top"><div class="fragment"></div><!-- fragment --> </td></tr>
+<td width="50%" valign="top"><div class="fragment"><div class="line"> <span class="keyword">namespace </span>afio = <a class="code" href="group__config.html#gaa3ed9f085329a0b81feeac3397a83740">AFIO_V2_NAMESPACE</a>;</div><div class="line"></div><div class="line"> <span class="comment">// Make me a 1 trillion element sparsely allocated integer array!</span></div><div class="line"> afio::mapped_file_handle mfh = <a class="code" href="namespaceafio__v2__xxx.html#ac021261f7a8696b0f4cbdcfacef1e88a">afio::mapped_temp_inode</a>().value();</div><div class="line"></div><div class="line"> <span class="comment">// On an extents based filing system, doesn&#39;t actually allocate any physical</span></div><div class="line"> <span class="comment">// storage but does map approximately 4Tb of all bits zero data into memory</span></div><div class="line"> (void) mfh.truncate(1000000000000ULL * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"></div><div class="line"> <span class="comment">// Create a typed view of the one trillion integers</span></div><div class="line"> afio::algorithm::mapped_span&lt;int&gt; one_trillion_int_array(mfh);</div><div class="line"></div><div class="line"> <span class="comment">// Write and read as you see fit, if you exceed physical RAM it&#39;ll be paged out</span></div><div class="line"> one_trillion_int_array[0] = 5;</div><div class="line"> one_trillion_int_array[999999999999ULL] = 6;</div></div><!-- fragment --> </td><td width="50%" valign="top"><div class="fragment"><div class="line"> <span class="keyword">namespace </span>afio = <a class="code" href="group__config.html#gaa3ed9f085329a0b81feeac3397a83740">AFIO_V2_NAMESPACE</a>;</div><div class="line"></div><div class="line"> <span class="comment">// Create an asynchronous file handle</span></div><div class="line"> afio::io_service service;</div><div class="line"> afio::async_file_handle fh =</div><div class="line"> <a class="code" href="namespaceafio__v2__xxx.html#a5b0168993998aafc342233aa782040a6">afio::async_file</a>(service, {}, <span class="stringliteral">&quot;testfile.txt&quot;</span>,</div><div class="line"> <a class="code" href="namespaceafio__v2__xxx.html#a2d15768d28ea660ebe44901508ed3372">afio::async_file_handle::mode::write</a>,</div><div class="line"> afio::async_file_handle::creation::if_needed).value();</div><div class="line"></div><div class="line"> <span class="comment">// Resize it to 1024 bytes</span></div><div class="line"> <a class="code" href="namespaceafio__v2__xxx.html#a84d22c966fcabe50de30ad8cf26c7241">truncate</a>(fh, 1024).value();</div><div class="line"></div><div class="line"> <span class="comment">// Begin to asynchronously write &quot;hello world&quot; into the file at offset 0,</span></div><div class="line"> <span class="comment">// suspending execution of this coroutine until completion and then resuming</span></div><div class="line"> <span class="comment">// execution. Requires the Coroutines TS.</span></div><div class="line"> <span class="keyword">alignas</span>(4096) <span class="keywordtype">char</span> buffer[] = <span class="stringliteral">&quot;hello world&quot;</span>;</div><div class="line"> co_await <a class="code" href="namespaceafio__v2__xxx.html#acd740f5aef6ca339575e7497fa873d06">co_write</a>(fh, 0, { { <span class="keyword">reinterpret_cast&lt;</span>afio::byte *<span class="keyword">&gt;</span>(buffer), <span class="keyword">sizeof</span>(buffer) } }).value();</div></div><!-- fragment --> </td></tr>
</table>
<p>These compilers and OS are regularly tested:</p><ul>
<li>GCC 7.0 (Linux 4,x x64)</li>
diff --git a/namespaceafio__v2__xxx.html b/namespaceafio__v2__xxx.html
index dbac2b1f..ec7df434 100644
--- a/namespaceafio__v2__xxx.html
+++ b/namespaceafio__v2__xxx.html
@@ -975,7 +975,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 fdatasync() or Windows NtFlushBuffersFileEx() can return. </dd></dl>
<dl class="section user"><dt>Memory Allocations</dt><dd>None. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;{</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.barrier(std::forward&lt;decltype(reqs)&gt;(reqs), std::forward&lt;decltype(wait_for_device)&gt;(wait_for_device), std::forward&lt;decltype(and_metadata)&gt;(and_metadata), std::forward&lt;decltype(d)&gt;(d));</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;}</div></div><!-- fragment -->
+<div class="fragment"><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;{</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.barrier(std::forward&lt;decltype(reqs)&gt;(reqs), std::forward&lt;decltype(wait_for_device)&gt;(wait_for_device), std::forward&lt;decltype(and_metadata)&gt;(and_metadata), std::forward&lt;decltype(d)&gt;(d));</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="a1b5c40714a95d835e7926b9508469bf2"></a>
@@ -1629,7 +1629,7 @@ For portability, you can only assume that barriers write order for a single hand
</dl>
<p>Note that if the file is currently zero sized, no mapping occurs now, but later when <code>truncate()</code> or <code>update_map()</code> is called.</p>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values which the constructors for <code>file_handle</code>, <code>section_handle</code> and <code>map_handle</code> can return. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;{</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#a2c44844c18f66950187cb57292d7a676">mapped_file_handle::mapped_file</a>(std::forward&lt;decltype(reservation)&gt;(reservation), std::forward&lt;decltype(base)&gt;(base), std::forward&lt;decltype(_path)&gt;(_path), 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="l00437"></a><span class="lineno"> 437</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_a2c44844c18f66950187cb57292d7a676"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a2c44844c18f66950187cb57292d7a676">afio_v2_xxx::mapped_file</a></div><div class="ttdeci">result&lt; mapped_file_handle &gt; mapped_file(const path_handle &amp;base, mapped_file_handle::path_view_type _path, mapped_file_handle::mode _mode=mapped_file_handle::mode::read, mapped_file_handle::creation _creation=mapped_file_handle::creation::open_existing, mapped_file_handle::caching _caching=mapped_file_handle::caching::all, mapped_file_handle::flag flags=mapped_file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> mapped_file_handle.hpp:439</div></div>
+<div class="fragment"><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;{</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#a2c44844c18f66950187cb57292d7a676">mapped_file_handle::mapped_file</a>(std::forward&lt;decltype(reservation)&gt;(reservation), std::forward&lt;decltype(base)&gt;(base), std::forward&lt;decltype(_path)&gt;(_path), std::forward&lt;decltype(_mode)&gt;(_mode), std::forward&lt;decltype(_creation)&gt;(_creation), std::forward&lt;decltype(_caching)&gt;(_caching),</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; std::forward&lt;decltype(flags)&gt;(flags));</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_a2c44844c18f66950187cb57292d7a676"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a2c44844c18f66950187cb57292d7a676">afio_v2_xxx::mapped_file</a></div><div class="ttdeci">result&lt; mapped_file_handle &gt; mapped_file(const path_handle &amp;base, mapped_file_handle::path_view_type _path, mapped_file_handle::mode _mode=mapped_file_handle::mode::read, mapped_file_handle::creation _creation=mapped_file_handle::creation::open_existing, mapped_file_handle::caching _caching=mapped_file_handle::caching::all, mapped_file_handle::flag flags=mapped_file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> mapped_file_handle.hpp:441</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -1691,7 +1691,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;{</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#a2c44844c18f66950187cb57292d7a676">mapped_file_handle::mapped_file</a>(std::forward&lt;decltype(base)&gt;(base), std::forward&lt;decltype(_path)&gt;(_path), 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="l00442"></a><span class="lineno"> 442</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_a2c44844c18f66950187cb57292d7a676"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a2c44844c18f66950187cb57292d7a676">afio_v2_xxx::mapped_file</a></div><div class="ttdeci">result&lt; mapped_file_handle &gt; mapped_file(const path_handle &amp;base, mapped_file_handle::path_view_type _path, mapped_file_handle::mode _mode=mapped_file_handle::mode::read, mapped_file_handle::creation _creation=mapped_file_handle::creation::open_existing, mapped_file_handle::caching _caching=mapped_file_handle::caching::all, mapped_file_handle::flag flags=mapped_file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> mapped_file_handle.hpp:439</div></div>
+<div class="fragment"><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;{</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#a2c44844c18f66950187cb57292d7a676">mapped_file_handle::mapped_file</a>(std::forward&lt;decltype(base)&gt;(base), std::forward&lt;decltype(_path)&gt;(_path), 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="l00445"></a><span class="lineno"> 445</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_a2c44844c18f66950187cb57292d7a676"><div class="ttname"><a href="namespaceafio__v2__xxx.html#a2c44844c18f66950187cb57292d7a676">afio_v2_xxx::mapped_file</a></div><div class="ttdeci">result&lt; mapped_file_handle &gt; mapped_file(const path_handle &amp;base, mapped_file_handle::path_view_type _path, mapped_file_handle::mode _mode=mapped_file_handle::mode::read, mapped_file_handle::creation _creation=mapped_file_handle::creation::open_existing, mapped_file_handle::caching _caching=mapped_file_handle::caching::all, mapped_file_handle::flag flags=mapped_file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> mapped_file_handle.hpp:441</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -1748,7 +1748,7 @@ For portability, you can only assume that barriers write order for a single hand
</div><div class="memdoc">
<p>Create an mapped 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="l00452"></a><span class="lineno"> 452</span>&#160;{</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#ac9be648f691d72c9cac6295ea7b3f9c8">mapped_file_handle::mapped_random_file</a>(std::forward&lt;decltype(reservation)&gt;(reservation), 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="l00454"></a><span class="lineno"> 454</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_ac9be648f691d72c9cac6295ea7b3f9c8"><div class="ttname"><a href="namespaceafio__v2__xxx.html#ac9be648f691d72c9cac6295ea7b3f9c8">afio_v2_xxx::mapped_random_file</a></div><div class="ttdeci">result&lt; mapped_file_handle &gt; mapped_random_file(mapped_file_handle::size_type reservation, const path_handle &amp;dirpath, mapped_file_handle::mode _mode=mapped_file_handle::mode::write, mapped_file_handle::caching _caching=mapped_file_handle::caching::temporary, mapped_file_handle::flag flags=mapped_file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> mapped_file_handle.hpp:451</div></div>
+<div class="fragment"><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; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#ac9be648f691d72c9cac6295ea7b3f9c8">mapped_file_handle::mapped_random_file</a>(std::forward&lt;decltype(reservation)&gt;(reservation), 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="l00458"></a><span class="lineno"> 458</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_ac9be648f691d72c9cac6295ea7b3f9c8"><div class="ttname"><a href="namespaceafio__v2__xxx.html#ac9be648f691d72c9cac6295ea7b3f9c8">afio_v2_xxx::mapped_random_file</a></div><div class="ttdeci">result&lt; mapped_file_handle &gt; mapped_random_file(mapped_file_handle::size_type reservation, const path_handle &amp;dirpath, mapped_file_handle::mode _mode=mapped_file_handle::mode::write, mapped_file_handle::caching _caching=mapped_file_handle::caching::temporary, mapped_file_handle::flag flags=mapped_file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> mapped_file_handle.hpp:454</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -1812,7 +1812,7 @@ For portability, you can only assume that barriers write order for a single hand
<p>Create a mapped 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>mapped_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="l00471"></a><span class="lineno"> 471</span>&#160;{</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#ab175b3720445c24cd43e3b7d88c6bbc9">mapped_file_handle::mapped_temp_file</a>(std::forward&lt;decltype(reservation)&gt;(reservation), 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="l00473"></a><span class="lineno"> 473</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_ab175b3720445c24cd43e3b7d88c6bbc9"><div class="ttname"><a href="namespaceafio__v2__xxx.html#ab175b3720445c24cd43e3b7d88c6bbc9">afio_v2_xxx::mapped_temp_file</a></div><div class="ttdeci">result&lt; mapped_file_handle &gt; mapped_temp_file(mapped_file_handle::size_type reservation, mapped_file_handle::path_view_type name=mapped_file_handle::path_view_type(), mapped_file_handle::mode _mode=mapped_file_handle::mode::write, mapped_file_handle::creation _creation=mapped_file_handle::creation::if_needed, mapped_file_handle::caching _caching=mapped_file_handle::caching::temporary, mapped_file_handle::flag flags=mapped_file_handle::flag::unlink_on_close) noexcept</div><div class="ttdef"><b>Definition:</b> mapped_file_handle.hpp:470</div></div>
+<div class="fragment"><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;{</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#ab175b3720445c24cd43e3b7d88c6bbc9">mapped_file_handle::mapped_temp_file</a>(std::forward&lt;decltype(reservation)&gt;(reservation), 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="l00478"></a><span class="lineno"> 478</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_ab175b3720445c24cd43e3b7d88c6bbc9"><div class="ttname"><a href="namespaceafio__v2__xxx.html#ab175b3720445c24cd43e3b7d88c6bbc9">afio_v2_xxx::mapped_temp_file</a></div><div class="ttdeci">result&lt; mapped_file_handle &gt; mapped_temp_file(mapped_file_handle::size_type reservation, mapped_file_handle::path_view_type name=mapped_file_handle::path_view_type(), mapped_file_handle::mode _mode=mapped_file_handle::mode::write, mapped_file_handle::creation _creation=mapped_file_handle::creation::if_needed, mapped_file_handle::caching _caching=mapped_file_handle::caching::temporary, mapped_file_handle::flag flags=mapped_file_handle::flag::unlink_on_close) noexcept</div><div class="ttdef"><b>Definition:</b> mapped_file_handle.hpp:474</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -1857,7 +1857,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 mapped 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="l00485"></a><span class="lineno"> 485</span>&#160;{</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#ac021261f7a8696b0f4cbdcfacef1e88a">mapped_file_handle::mapped_temp_inode</a>(std::forward&lt;decltype(dir)&gt;(dir), std::forward&lt;decltype(_mode)&gt;(_mode), std::forward&lt;decltype(flags)&gt;(flags));</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_ac021261f7a8696b0f4cbdcfacef1e88a"><div class="ttname"><a href="namespaceafio__v2__xxx.html#ac021261f7a8696b0f4cbdcfacef1e88a">afio_v2_xxx::mapped_temp_inode</a></div><div class="ttdeci">result&lt; mapped_file_handle &gt; mapped_temp_inode(const path_handle &amp;dir=path_discovery::storage_backed_temporary_files_directory(), mapped_file_handle::mode _mode=mapped_file_handle::mode::write, mapped_file_handle::flag flags=mapped_file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> mapped_file_handle.hpp:484</div></div>
+<div class="fragment"><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;{</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceafio__v2__xxx.html#ac021261f7a8696b0f4cbdcfacef1e88a">mapped_file_handle::mapped_temp_inode</a>(std::forward&lt;decltype(dir)&gt;(dir), std::forward&lt;decltype(_mode)&gt;(_mode), std::forward&lt;decltype(flags)&gt;(flags));</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;}</div><div class="ttc" id="namespaceafio__v2__xxx_html_ac021261f7a8696b0f4cbdcfacef1e88a"><div class="ttname"><a href="namespaceafio__v2__xxx.html#ac021261f7a8696b0f4cbdcfacef1e88a">afio_v2_xxx::mapped_temp_inode</a></div><div class="ttdeci">result&lt; mapped_file_handle &gt; mapped_temp_inode(const path_handle &amp;dir=path_discovery::storage_backed_temporary_files_directory(), mapped_file_handle::mode _mode=mapped_file_handle::mode::write, mapped_file_handle::flag flags=mapped_file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> mapped_file_handle.hpp:489</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -2083,7 +2083,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 read() 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. reading from regular files on POSIX or reading from 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 performs one calloc and one free. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;{</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.read(std::forward&lt;decltype(reqs)&gt;(reqs), std::forward&lt;decltype(d)&gt;(d));</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;}</div></div><!-- fragment -->
+<div class="fragment"><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;{</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.read(std::forward&lt;decltype(reqs)&gt;(reqs), std::forward&lt;decltype(d)&gt;(d));</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="a45b09c42c9a14c6abb56888a2832ba69"></a>
@@ -2132,7 +2132,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;{</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.read(std::forward&lt;decltype(offset)&gt;(offset), std::forward&lt;decltype(lst)&gt;(lst), std::forward&lt;decltype(d)&gt;(d));</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;}</div></div><!-- fragment -->
+<div class="fragment"><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;{</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.read(std::forward&lt;decltype(offset)&gt;(offset), std::forward&lt;decltype(lst)&gt;(lst), std::forward&lt;decltype(d)&gt;(d));</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="ac89289d85eff137c40d3d0084c410656"></a>
@@ -2820,7 +2820,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 performs one calloc and one free. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;{</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.write(std::forward&lt;decltype(reqs)&gt;(reqs), std::forward&lt;decltype(d)&gt;(d));</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;}</div></div><!-- fragment -->
+<div class="fragment"><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;{</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.write(std::forward&lt;decltype(reqs)&gt;(reqs), std::forward&lt;decltype(d)&gt;(d));</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="a53f3d40c5752d0dbeaa9b8233bff976f"></a>
@@ -2869,7 +2869,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;{</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.write(std::forward&lt;decltype(offset)&gt;(offset), std::forward&lt;decltype(lst)&gt;(lst), std::forward&lt;decltype(d)&gt;(d));</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;}</div></div><!-- fragment -->
+<div class="fragment"><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;{</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">return</span> <span class="keyword">self</span>.write(std::forward&lt;decltype(offset)&gt;(offset), std::forward&lt;decltype(lst)&gt;(lst), std::forward&lt;decltype(d)&gt;(d));</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;}</div></div><!-- fragment -->
</div>
</div>
<a id="a5bfae365a1845c1bde4739de38c3653f"></a>
diff --git a/navtreedata.js b/navtreedata.js
index b9e3e29c..df8bbce6 100644
--- a/navtreedata.js
+++ b/navtreedata.js
@@ -42,11 +42,11 @@ var NAVTREEINDEX =
"classafio__v2__xxx_1_1algorithm_1_1trivial__vector.html#a83a15aa2a15fe2231ee7c5691f9cc6e7",
"classafio__v2__xxx_1_1file__handle.html#aa53d88105df8c6be01be649829a65b14",
"classafio__v2__xxx_1_1map__handle.html#a5be9a526bc5c1be758b0cfc36a262f6e",
-"classafio__v2__xxx_1_1section__handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18a8d7b3d6b83c0a517eac07e1aac94b773",
+"classafio__v2__xxx_1_1section__handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18a9516dfb15f51c7ee19a4d46b8c0dbe1d",
"group__config.html#gafab2566c573eef8945053c8d57976764",
-"structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a8daf059785543d0e281a4e3fe3903dcd",
-"structafio__v2__xxx_1_1stat__t.html#a998eb1b348255bdcfa25e2f99064e5e5",
-"v2_80_2afio_8hpp.html#acb966611a7fc2153e23e4b76849da786"
+"structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a91abb0240b71fb21b5feb71007208192",
+"structafio__v2__xxx_1_1stat__t.html#a78b6297a93774d5d2c1499cad3de366d",
+"v2_80_2afio_8hpp.html#a7172d84eb04f1b165ec13ca67ab672c5"
];
var SYNCONMSG = 'click to disable panel synchronisation';
diff --git a/navtreeindex2.js b/navtreeindex2.js
index b2a1be38..e81886d7 100644
--- a/navtreeindex2.js
+++ b/navtreeindex2.js
@@ -220,34 +220,34 @@ var NAVTREEINDEX2 =
"classafio__v2__xxx_1_1log__level__guard.html#aacd729f80c68bc473a1c28ffbee4e190":[3,0,0,24,3],
"classafio__v2__xxx_1_1log__level__guard.html#ac36f5c23d5eef0f0b18cbf05e1d44c55":[3,0,0,24,5],
"classafio__v2__xxx_1_1map__handle.html":[3,0,0,25],
-"classafio__v2__xxx_1_1map__handle.html#a00b7e1e99089c2641c45ee824811ebc1":[3,0,0,25,72],
-"classafio__v2__xxx_1_1map__handle.html#a00f42a44de714feb3ed86dd0a175e69c":[3,0,0,25,46],
-"classafio__v2__xxx_1_1map__handle.html#a04d5b12318493f32de67854714001ab2":[3,0,0,25,74],
-"classafio__v2__xxx_1_1map__handle.html#a0a1c4773b9fa7bbd04fee0756075d319":[3,0,0,25,67],
+"classafio__v2__xxx_1_1map__handle.html#a00181d29f9a6e646bd9b07e0c35e9a8b":[3,0,0,25,74],
+"classafio__v2__xxx_1_1map__handle.html#a00b7e1e99089c2641c45ee824811ebc1":[3,0,0,25,71],
+"classafio__v2__xxx_1_1map__handle.html#a00f42a44de714feb3ed86dd0a175e69c":[3,0,0,25,45],
+"classafio__v2__xxx_1_1map__handle.html#a04d5b12318493f32de67854714001ab2":[3,0,0,25,73],
+"classafio__v2__xxx_1_1map__handle.html#a0a1c4773b9fa7bbd04fee0756075d319":[3,0,0,25,66],
"classafio__v2__xxx_1_1map__handle.html#a0af15b220ec3cfd1816206a5e795c934":[3,0,0,25,1],
-"classafio__v2__xxx_1_1map__handle.html#a127eef4449f6afcddbdb684030776868":[3,0,0,25,63],
-"classafio__v2__xxx_1_1map__handle.html#a1d3f93b7f145af54e62e0401dc57e600":[3,0,0,25,81],
+"classafio__v2__xxx_1_1map__handle.html#a127eef4449f6afcddbdb684030776868":[3,0,0,25,62],
+"classafio__v2__xxx_1_1map__handle.html#a1d3f93b7f145af54e62e0401dc57e600":[3,0,0,25,80],
"classafio__v2__xxx_1_1map__handle.html#a1d6628e75030c5f83dd679ff0a7a6d6b":[3,0,0,25,5],
-"classafio__v2__xxx_1_1map__handle.html#a1e9273d0c6aca7da6480437f6cf6638a":[3,0,0,25,18],
"classafio__v2__xxx_1_1map__handle.html#a1ea36471bce9cae1604da211a4afa779":[3,0,0,25,9],
"classafio__v2__xxx_1_1map__handle.html#a243156928e89b8988a1412f211b3b603":[3,0,0,25,22],
"classafio__v2__xxx_1_1map__handle.html#a26d90317426d6a95abb27caff26d1568":[3,0,0,25,12],
"classafio__v2__xxx_1_1map__handle.html#a272e3e3dd846e5a4ee86e7193403500a":[3,0,0,25,4],
-"classafio__v2__xxx_1_1map__handle.html#a295685127f9dacc561b5f9600d82fad5":[3,0,0,25,65],
-"classafio__v2__xxx_1_1map__handle.html#a349e001cbe359d4e7a8f066c69e9361e":[3,0,0,25,39],
-"classafio__v2__xxx_1_1map__handle.html#a3c777f045dc2b0248b891d6e7811d152":[3,0,0,25,43],
+"classafio__v2__xxx_1_1map__handle.html#a295685127f9dacc561b5f9600d82fad5":[3,0,0,25,64],
+"classafio__v2__xxx_1_1map__handle.html#a349e001cbe359d4e7a8f066c69e9361e":[3,0,0,25,38],
+"classafio__v2__xxx_1_1map__handle.html#a3c777f045dc2b0248b891d6e7811d152":[3,0,0,25,42],
"classafio__v2__xxx_1_1map__handle.html#a3fc7db93fac699f5ecad453642ed314e":[3,0,0,25,20],
-"classafio__v2__xxx_1_1map__handle.html#a4194a05dd9694d2c47d5a45f925db1d7":[3,0,0,25,44],
+"classafio__v2__xxx_1_1map__handle.html#a4194a05dd9694d2c47d5a45f925db1d7":[3,0,0,25,43],
"classafio__v2__xxx_1_1map__handle.html#a45a37a4b395e125f84cd9a9e1995c504":[3,0,0,25,0],
"classafio__v2__xxx_1_1map__handle.html#a4a2fc92b11c3dc6021436261eab13e48":[3,0,0,25,10],
"classafio__v2__xxx_1_1map__handle.html#a4ac624b2af8f1cccdf87d80f5542b709":[3,0,0,25,7],
-"classafio__v2__xxx_1_1map__handle.html#a4cdb7b9643da8c8e2dee0c8b01511e83":[3,0,0,25,28],
-"classafio__v2__xxx_1_1map__handle.html#a4d8c8f3fcecd58b55316d42799abf6f3":[3,0,0,25,58],
-"classafio__v2__xxx_1_1map__handle.html#a4d9cbbb7aae98704c6ad97de080c4210":[3,0,0,25,51],
-"classafio__v2__xxx_1_1map__handle.html#a526c300d421155ccc071b04db4bca65d":[3,0,0,25,40],
+"classafio__v2__xxx_1_1map__handle.html#a4cdb7b9643da8c8e2dee0c8b01511e83":[3,0,0,25,27],
+"classafio__v2__xxx_1_1map__handle.html#a4d8c8f3fcecd58b55316d42799abf6f3":[3,0,0,25,57],
+"classafio__v2__xxx_1_1map__handle.html#a4d9cbbb7aae98704c6ad97de080c4210":[3,0,0,25,50],
+"classafio__v2__xxx_1_1map__handle.html#a526c300d421155ccc071b04db4bca65d":[3,0,0,25,39],
"classafio__v2__xxx_1_1map__handle.html#a545aef5843a50c73df15f4d1b692d3bf":[3,0,0,25,15],
-"classafio__v2__xxx_1_1map__handle.html#a54790e954f57372b87b095451cc79c38":[3,0,0,25,26],
+"classafio__v2__xxx_1_1map__handle.html#a54790e954f57372b87b095451cc79c38":[3,0,0,25,25],
"classafio__v2__xxx_1_1map__handle.html#a57d804e792acee6f848b75ad3d8ff439":[3,0,0,25,14],
-"classafio__v2__xxx_1_1map__handle.html#a5b69e8faa8a9e47dec1b1a123c722a3e":[3,0,0,25,30],
-"classafio__v2__xxx_1_1map__handle.html#a5b7bae1f24ec1ae96822fb865bfd0ea5":[3,0,0,25,80]
+"classafio__v2__xxx_1_1map__handle.html#a5b69e8faa8a9e47dec1b1a123c722a3e":[3,0,0,25,29],
+"classafio__v2__xxx_1_1map__handle.html#a5b7bae1f24ec1ae96822fb865bfd0ea5":[3,0,0,25,79]
};
diff --git a/navtreeindex3.js b/navtreeindex3.js
index 335c1a36..657a27a4 100644
--- a/navtreeindex3.js
+++ b/navtreeindex3.js
@@ -1,59 +1,58 @@
var NAVTREEINDEX3 =
{
-"classafio__v2__xxx_1_1map__handle.html#a5be9a526bc5c1be758b0cfc36a262f6e":[3,0,0,25,45],
-"classafio__v2__xxx_1_1map__handle.html#a5c57d56e5704ced94de606895a1fe9bd":[3,0,0,25,36],
-"classafio__v2__xxx_1_1map__handle.html#a616a67222676af5ec5b3aa94d7c02428":[3,0,0,25,29],
-"classafio__v2__xxx_1_1map__handle.html#a657c12a309cf02bf2351bfcc7f41463b":[3,0,0,25,64],
-"classafio__v2__xxx_1_1map__handle.html#a6643b27340d9bc8d2e29c9e085f8799c":[3,0,0,25,55],
+"classafio__v2__xxx_1_1map__handle.html#a5be9a526bc5c1be758b0cfc36a262f6e":[3,0,0,25,44],
+"classafio__v2__xxx_1_1map__handle.html#a5c57d56e5704ced94de606895a1fe9bd":[3,0,0,25,35],
+"classafio__v2__xxx_1_1map__handle.html#a616a67222676af5ec5b3aa94d7c02428":[3,0,0,25,28],
+"classafio__v2__xxx_1_1map__handle.html#a657c12a309cf02bf2351bfcc7f41463b":[3,0,0,25,63],
+"classafio__v2__xxx_1_1map__handle.html#a6643b27340d9bc8d2e29c9e085f8799c":[3,0,0,25,54],
+"classafio__v2__xxx_1_1map__handle.html#a6f203a9bb0bee94ac6b395ac5f3a2270":[3,0,0,25,18],
"classafio__v2__xxx_1_1map__handle.html#a71137cb82edd9a1bcb24f64886b5826d":[3,0,0,25,19],
-"classafio__v2__xxx_1_1map__handle.html#a7119886b920953e12340b05ea94e395d":[3,0,0,25,24],
-"classafio__v2__xxx_1_1map__handle.html#a71d7636f40607829cacc2c974c4a2a28":[3,0,0,25,56],
+"classafio__v2__xxx_1_1map__handle.html#a71d7636f40607829cacc2c974c4a2a28":[3,0,0,25,55],
"classafio__v2__xxx_1_1map__handle.html#a735b3ed30ff1387c9af82dccb6147545":[3,0,0,25,13],
-"classafio__v2__xxx_1_1map__handle.html#a771ef2bf39ad784eb6265dde077792ad":[3,0,0,25,83],
-"classafio__v2__xxx_1_1map__handle.html#a875440f1b368472f1840c70c266f3a48":[3,0,0,25,52],
-"classafio__v2__xxx_1_1map__handle.html#a88689b15e6e8b6ce1f945737dee4369e":[3,0,0,25,48],
+"classafio__v2__xxx_1_1map__handle.html#a771ef2bf39ad784eb6265dde077792ad":[3,0,0,25,82],
+"classafio__v2__xxx_1_1map__handle.html#a875440f1b368472f1840c70c266f3a48":[3,0,0,25,51],
+"classafio__v2__xxx_1_1map__handle.html#a88689b15e6e8b6ce1f945737dee4369e":[3,0,0,25,47],
"classafio__v2__xxx_1_1map__handle.html#a8e76ea37b167d23b43b27794282667f4":[3,0,0,25,2],
"classafio__v2__xxx_1_1map__handle.html#a9051ebc2ea492cdd7c14e01fbb5a3a92":[3,0,0,25,8],
-"classafio__v2__xxx_1_1map__handle.html#a928a8ab64d5b7d68dc7e2b3e5849df24":[3,0,0,25,57],
-"classafio__v2__xxx_1_1map__handle.html#a96b9da71ee7791fbaaa2470c936ec763":[3,0,0,25,68],
+"classafio__v2__xxx_1_1map__handle.html#a928a8ab64d5b7d68dc7e2b3e5849df24":[3,0,0,25,56],
+"classafio__v2__xxx_1_1map__handle.html#a96b9da71ee7791fbaaa2470c936ec763":[3,0,0,25,67],
"classafio__v2__xxx_1_1map__handle.html#a96cb504683feb27581012d48fd967cfc":[3,0,0,25,16],
"classafio__v2__xxx_1_1map__handle.html#a97ffbbf53f51549549efef0b49e125dc":[3,0,0,25,21],
"classafio__v2__xxx_1_1map__handle.html#a9cde0ddea1310cdec3db32ad69f29527":[3,0,0,25,6],
-"classafio__v2__xxx_1_1map__handle.html#aa25715985351f79e034bb1ef37f74824":[3,0,0,25,31],
-"classafio__v2__xxx_1_1map__handle.html#aa2de383f07c16362890a8602d6089cef":[3,0,0,25,54],
-"classafio__v2__xxx_1_1map__handle.html#aa53d88105df8c6be01be649829a65b14":[3,0,0,25,34],
-"classafio__v2__xxx_1_1map__handle.html#aac62f621c42be6eeb8d9a5700da367f9":[3,0,0,25,42],
+"classafio__v2__xxx_1_1map__handle.html#aa25715985351f79e034bb1ef37f74824":[3,0,0,25,30],
+"classafio__v2__xxx_1_1map__handle.html#aa2de383f07c16362890a8602d6089cef":[3,0,0,25,53],
+"classafio__v2__xxx_1_1map__handle.html#aa53d88105df8c6be01be649829a65b14":[3,0,0,25,33],
+"classafio__v2__xxx_1_1map__handle.html#aac62f621c42be6eeb8d9a5700da367f9":[3,0,0,25,41],
"classafio__v2__xxx_1_1map__handle.html#aacabd3633b7c08a422c3e912f6319959":[3,0,0,25,11],
-"classafio__v2__xxx_1_1map__handle.html#ab3d876f5996605158fd6a0582adadad6":[3,0,0,25,32],
-"classafio__v2__xxx_1_1map__handle.html#ab790af4654f5455d8c5e1f1d397543ca":[3,0,0,25,35],
-"classafio__v2__xxx_1_1map__handle.html#ab8a43a5388161f629fef5ee7256dbbc8":[3,0,0,25,61],
-"classafio__v2__xxx_1_1map__handle.html#aba6ebe9afaccfaf59a92c5b85c72e7d2":[3,0,0,25,47],
-"classafio__v2__xxx_1_1map__handle.html#abaff8ae673c35e9bb150e3970dd205a5":[3,0,0,25,69],
-"classafio__v2__xxx_1_1map__handle.html#abdcdfc9d1ed9193bff10f3a03257b677":[3,0,0,25,77],
+"classafio__v2__xxx_1_1map__handle.html#ab3d876f5996605158fd6a0582adadad6":[3,0,0,25,31],
+"classafio__v2__xxx_1_1map__handle.html#ab790af4654f5455d8c5e1f1d397543ca":[3,0,0,25,34],
+"classafio__v2__xxx_1_1map__handle.html#ab8a43a5388161f629fef5ee7256dbbc8":[3,0,0,25,60],
+"classafio__v2__xxx_1_1map__handle.html#aba6ebe9afaccfaf59a92c5b85c72e7d2":[3,0,0,25,46],
+"classafio__v2__xxx_1_1map__handle.html#abaff8ae673c35e9bb150e3970dd205a5":[3,0,0,25,68],
+"classafio__v2__xxx_1_1map__handle.html#abdcdfc9d1ed9193bff10f3a03257b677":[3,0,0,25,76],
"classafio__v2__xxx_1_1map__handle.html#abe6c2e6318b90d83660f47f9a8ec24d1":[3,0,0,25,3],
-"classafio__v2__xxx_1_1map__handle.html#ac049430769b0fa1d06c93160cef5a2f9":[3,0,0,25,53],
-"classafio__v2__xxx_1_1map__handle.html#ac35a85e8a6cca721640ddc6b5008e145":[3,0,0,25,73],
-"classafio__v2__xxx_1_1map__handle.html#ac46e0a296c31fcd0a996a79d78647fb6":[3,0,0,25,78],
-"classafio__v2__xxx_1_1map__handle.html#ac484c07601be4e987b5f1332bdccfee3":[3,0,0,25,59],
-"classafio__v2__xxx_1_1map__handle.html#ac5b2859fabe04dbfc37020daed618257":[3,0,0,25,41],
-"classafio__v2__xxx_1_1map__handle.html#aca05f73280e20cb18cc0dd7f60a1aae1":[3,0,0,25,27],
+"classafio__v2__xxx_1_1map__handle.html#ac049430769b0fa1d06c93160cef5a2f9":[3,0,0,25,52],
+"classafio__v2__xxx_1_1map__handle.html#ac35a85e8a6cca721640ddc6b5008e145":[3,0,0,25,72],
+"classafio__v2__xxx_1_1map__handle.html#ac46e0a296c31fcd0a996a79d78647fb6":[3,0,0,25,77],
+"classafio__v2__xxx_1_1map__handle.html#ac484c07601be4e987b5f1332bdccfee3":[3,0,0,25,58],
+"classafio__v2__xxx_1_1map__handle.html#ac5b2859fabe04dbfc37020daed618257":[3,0,0,25,40],
+"classafio__v2__xxx_1_1map__handle.html#aca05f73280e20cb18cc0dd7f60a1aae1":[3,0,0,25,26],
"classafio__v2__xxx_1_1map__handle.html#acd3a23554d49cd7761c05c78316e843d":[3,0,0,25,17],
-"classafio__v2__xxx_1_1map__handle.html#ad02958278a0d92e4ec4fb864ba1eb35b":[3,0,0,25,38],
-"classafio__v2__xxx_1_1map__handle.html#ad29ceb1ecb38e9e74e63404b7db3a5a2":[3,0,0,25,25],
-"classafio__v2__xxx_1_1map__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897":[3,0,0,25,49],
+"classafio__v2__xxx_1_1map__handle.html#ad02958278a0d92e4ec4fb864ba1eb35b":[3,0,0,25,37],
+"classafio__v2__xxx_1_1map__handle.html#ad29ceb1ecb38e9e74e63404b7db3a5a2":[3,0,0,25,24],
+"classafio__v2__xxx_1_1map__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897":[3,0,0,25,48],
"classafio__v2__xxx_1_1map__handle.html#ad6ab309f4df975892f3bcbef345c779b":[3,0,0,25,23],
-"classafio__v2__xxx_1_1map__handle.html#add161546c0769941fce4fd9f06934e03":[3,0,0,25,71],
-"classafio__v2__xxx_1_1map__handle.html#adffdff916ccf13d88a02ddb6b6a421c8":[3,0,0,25,79],
-"classafio__v2__xxx_1_1map__handle.html#ae33d4d0faa1377cd371bd6a0ae0769ae":[3,0,0,25,33],
-"classafio__v2__xxx_1_1map__handle.html#aeabd245b6edcfb57779b29c6f2ea9737":[3,0,0,25,50],
-"classafio__v2__xxx_1_1map__handle.html#aefac4710e5617264347f437b04732c01":[3,0,0,25,70],
-"classafio__v2__xxx_1_1map__handle.html#af024e3d92d9a01ac367734e9cdc517fb":[3,0,0,25,76],
-"classafio__v2__xxx_1_1map__handle.html#af1610ec7fb0a41f039e3e17e0dc467ab":[3,0,0,25,62],
-"classafio__v2__xxx_1_1map__handle.html#af42904dd49b5517a303e7cb256eae939":[3,0,0,25,37],
-"classafio__v2__xxx_1_1map__handle.html#af776fe76eb1e2e493d9d2ddbde0b150c":[3,0,0,25,82],
-"classafio__v2__xxx_1_1map__handle.html#af85f9116968f2a2900640846009f48ea":[3,0,0,25,75],
-"classafio__v2__xxx_1_1map__handle.html#af9699a9a290ba974184f844c2f6038e8":[3,0,0,25,66],
-"classafio__v2__xxx_1_1map__handle.html#affb10caeeca67b804695b7378be29e23":[3,0,0,25,60],
+"classafio__v2__xxx_1_1map__handle.html#add161546c0769941fce4fd9f06934e03":[3,0,0,25,70],
+"classafio__v2__xxx_1_1map__handle.html#adffdff916ccf13d88a02ddb6b6a421c8":[3,0,0,25,78],
+"classafio__v2__xxx_1_1map__handle.html#ae33d4d0faa1377cd371bd6a0ae0769ae":[3,0,0,25,32],
+"classafio__v2__xxx_1_1map__handle.html#aeabd245b6edcfb57779b29c6f2ea9737":[3,0,0,25,49],
+"classafio__v2__xxx_1_1map__handle.html#aefac4710e5617264347f437b04732c01":[3,0,0,25,69],
+"classafio__v2__xxx_1_1map__handle.html#af024e3d92d9a01ac367734e9cdc517fb":[3,0,0,25,75],
+"classafio__v2__xxx_1_1map__handle.html#af1610ec7fb0a41f039e3e17e0dc467ab":[3,0,0,25,61],
+"classafio__v2__xxx_1_1map__handle.html#af42904dd49b5517a303e7cb256eae939":[3,0,0,25,36],
+"classafio__v2__xxx_1_1map__handle.html#af776fe76eb1e2e493d9d2ddbde0b150c":[3,0,0,25,81],
+"classafio__v2__xxx_1_1map__handle.html#af9699a9a290ba974184f844c2f6038e8":[3,0,0,25,65],
+"classafio__v2__xxx_1_1map__handle.html#affb10caeeca67b804695b7378be29e23":[3,0,0,25,59],
"classafio__v2__xxx_1_1mapped__file__handle.html":[3,0,0,26],
"classafio__v2__xxx_1_1mapped__file__handle.html#a00f42a44de714feb3ed86dd0a175e69c":[3,0,0,26,50],
"classafio__v2__xxx_1_1mapped__file__handle.html#a0344f48ef10fa2b94199d5566aedd879":[3,0,0,26,16],
@@ -119,6 +118,7 @@ var NAVTREEINDEX3 =
"classafio__v2__xxx_1_1mapped__file__handle.html#aa7fe74ccbf2fc255897bacaa6c41d319":[3,0,0,26,55],
"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],
"classafio__v2__xxx_1_1mapped__file__handle.html#ab3d876f5996605158fd6a0582adadad6":[3,0,0,26,37],
"classafio__v2__xxx_1_1mapped__file__handle.html#ab790af4654f5455d8c5e1f1d397543ca":[3,0,0,26,40],
"classafio__v2__xxx_1_1mapped__file__handle.html#ab808f7ff9de4f37e046afa4cb90478b7":[3,0,0,26,13],
@@ -132,7 +132,6 @@ var NAVTREEINDEX3 =
"classafio__v2__xxx_1_1mapped__file__handle.html#ad44dcd9c7ca9e7a094dd1bc7c8aa4897":[3,0,0,26,53],
"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#adca505e51ea006ffa59e3673ea0a9853":[3,0,0,26,24],
"classafio__v2__xxx_1_1mapped__file__handle.html#add161546c0769941fce4fd9f06934e03":[3,0,0,26,86],
"classafio__v2__xxx_1_1mapped__file__handle.html#addc3baa29bc2b309043dcc314c984cfe":[3,0,0,26,3],
"classafio__v2__xxx_1_1mapped__file__handle.html#ade79cbd3cd40e6d194492319c3367da6":[3,0,0,26,33],
@@ -249,5 +248,6 @@ var NAVTREEINDEX3 =
"classafio__v2__xxx_1_1section__handle.html":[3,0,0,31],
"classafio__v2__xxx_1_1section__handle.html#a00f42a44de714feb3ed86dd0a175e69c":[3,0,0,31,35],
"classafio__v2__xxx_1_1section__handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18":[3,0,0,31,7],
-"classafio__v2__xxx_1_1section__handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18a334c4a4c42fdb79d7ebc3e73b517e6f8":[3,0,0,31,7,1]
+"classafio__v2__xxx_1_1section__handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18a334c4a4c42fdb79d7ebc3e73b517e6f8":[3,0,0,31,7,1],
+"classafio__v2__xxx_1_1section__handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18a8d7b3d6b83c0a517eac07e1aac94b773":[3,0,0,31,7,0]
};
diff --git a/navtreeindex4.js b/navtreeindex4.js
index eea3712e..2c17e9fb 100644
--- a/navtreeindex4.js
+++ b/navtreeindex4.js
@@ -1,6 +1,5 @@
var NAVTREEINDEX4 =
{
-"classafio__v2__xxx_1_1section__handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18a8d7b3d6b83c0a517eac07e1aac94b773":[3,0,0,31,7,0],
"classafio__v2__xxx_1_1section__handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18a9516dfb15f51c7ee19a4d46b8c0dbe1d":[3,0,0,31,7,6],
"classafio__v2__xxx_1_1section__handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18a9f56aff64cb748e078ab221474132d19":[3,0,0,31,7,3],
"classafio__v2__xxx_1_1section__handle.html#a0489b6c1e25cd2bad2ba1ec86e1aaf18aa4daf6d1e8da35af49c33bbe9ee91d79":[3,0,0,31,7,2],
@@ -174,8 +173,8 @@ var NAVTREEINDEX4 =
"functions_enum.html":[3,3,4],
"functions_eval.html":[3,3,5],
"functions_f.html":[3,3,0,6],
-"functions_func.html":[3,3,1,0],
"functions_func.html":[3,3,1],
+"functions_func.html":[3,3,1,0],
"functions_func_a.html":[3,3,1,1],
"functions_func_b.html":[3,3,1,2],
"functions_func_c.html":[3,3,1,3],
@@ -232,8 +231,8 @@ var NAVTREEINDEX4 =
"group__config.html#ga6a0165e41661247f1a10b44e3f38ba52":[4,0,0,0,2,3],
"group__config.html#ga7172d84eb04f1b165ec13ca67ab672c5":[1,0,15],
"group__config.html#ga7172d84eb04f1b165ec13ca67ab672c5":[4,0,0,0,2,8],
-"group__config.html#ga7c2409ed4b38a384c422012a43423a16":[4,0,0,0,0,3,24],
"group__config.html#ga7c2409ed4b38a384c422012a43423a16":[1,0,6],
+"group__config.html#ga7c2409ed4b38a384c422012a43423a16":[4,0,0,0,0,3,24],
"group__config.html#ga98c874cd585103f72c3c8338b491436b":[4,0,0,0,0,3,13],
"group__config.html#ga98c874cd585103f72c3c8338b491436b":[1,0,4],
"group__config.html#gaa3ed9f085329a0b81feeac3397a83740":[1,0,9],
@@ -242,12 +241,13 @@ var NAVTREEINDEX4 =
"group__config.html#gab93f424fae013cc67c4d19e349be454a":[4,0,0,0,0,3,11],
"group__config.html#gacb966611a7fc2153e23e4b76849da786":[4,0,0,0,2,9],
"group__config.html#gacb966611a7fc2153e23e4b76849da786":[1,0,16],
-"group__config.html#gad76892d94bb7a3a33aa956188171d048":[1,0,10],
"group__config.html#gad76892d94bb7a3a33aa956188171d048":[4,0,0,0,0,3,35],
+"group__config.html#gad76892d94bb7a3a33aa956188171d048":[1,0,10],
"group__config.html#gaf3ff30cde278dda89ad679d698fb7168":[4,0,0,0,0,3,33],
"group__config.html#gaf3ff30cde278dda89ad679d698fb7168":[1,0,8],
-"group__config.html#gaf5f9b13a512047008c0caeb5fcd310e0":[4,0,0,0,0,3,37],
"group__config.html#gaf5f9b13a512047008c0caeb5fcd310e0":[1,0,12],
+"group__config.html#gaf5f9b13a512047008c0caeb5fcd310e0":[4,0,0,0,0,3,37],
"group__config.html#gafa3b0c57823d6f9736497df6a1571a95":[1,0,0],
-"group__config.html#gafa3b0c57823d6f9736497df6a1571a95":[4,0,0,0,0,3,8]
+"group__config.html#gafa3b0c57823d6f9736497df6a1571a95":[4,0,0,0,0,3,8],
+"group__config.html#gafab2566c573eef8945053c8d57976764":[1,0,13]
};
diff --git a/navtreeindex5.js b/navtreeindex5.js
index c9a66c77..7ab3de88 100644
--- a/navtreeindex5.js
+++ b/navtreeindex5.js
@@ -1,6 +1,5 @@
var NAVTREEINDEX5 =
{
-"group__config.html#gafab2566c573eef8945053c8d57976764":[1,0,13],
"group__config.html#gafab2566c573eef8945053c8d57976764":[4,0,0,0,2,6],
"handle_8hpp.html":[4,0,0,0,0,8],
"handle_8hpp.html#a23c535a7d67a0bbd0cf3254325b6efc7":[4,0,0,0,0,8,5],
@@ -249,5 +248,6 @@ var NAVTREEINDEX5 =
"structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a77ac1dfbe6f0df38bf9ecd3fbdf515fe":[3,0,0,0,0,1,19],
"structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a782e7042f5ef8e5794566ad990418a8a":[3,0,0,0,0,1,36],
"structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a829281d387d6fe30048d9bcc4a75580c":[3,0,0,0,0,1,37],
-"structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a83a15aa2a15fe2231ee7c5691f9cc6e7":[3,0,0,0,0,1,27]
+"structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a83a15aa2a15fe2231ee7c5691f9cc6e7":[3,0,0,0,0,1,27],
+"structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a8daf059785543d0e281a4e3fe3903dcd":[3,0,0,0,0,1,43]
};
diff --git a/navtreeindex6.js b/navtreeindex6.js
index 672440fb..4d3db83d 100644
--- a/navtreeindex6.js
+++ b/navtreeindex6.js
@@ -1,6 +1,5 @@
var NAVTREEINDEX6 =
{
-"structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a8daf059785543d0e281a4e3fe3903dcd":[3,0,0,0,0,1,43],
"structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a91abb0240b71fb21b5feb71007208192":[3,0,0,0,0,1,25],
"structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a97d59a2919feeb1a4c2bb71dda63c2a3":[3,0,0,0,0,1,35],
"structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a9a48b859de9e022f56e2178fc01303ec":[3,0,0,0,0,1,31],
@@ -131,11 +130,15 @@ var NAVTREEINDEX6 =
"structafio__v2__xxx_1_1handle_1_1flag__base.html#a51aaa32c78950cedbc1b7a61e1738d3eae4a6e7b4b6489cd3761d9606ec07f09c":[3,0,0,21,0,0,1],
"structafio__v2__xxx_1_1handle_1_1flag__base.html#a51aaa32c78950cedbc1b7a61e1738d3eaebfe097a938adbdf4adcbf5f559259f5":[3,0,0,21,0,0,4],
"structafio__v2__xxx_1_1io__handle_1_1buffer__type.html":[3,0,0,22,0],
-"structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a772696494c5de167be74e3b5120e46b0":[3,0,0,22,0,1],
-"structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#af99fc701020c497671e8b865294b5ed2":[3,0,0,22,0,0],
+"structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a2d991122b5a706c69def8631e2897a1d":[3,0,0,22,0,0],
+"structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a629e060c2032a433613cf42dd969d61e":[3,0,0,22,0,3],
+"structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a7220a73a4d1d6465abe6351b04d8caf4":[3,0,0,22,0,2],
+"structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#abb445f051adab15fbca4b0acc8461e4c":[3,0,0,22,0,1],
"structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html":[3,0,0,22,1],
-"structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a18ff05ed710d3b3f210bff2f0e195885":[3,0,0,22,1,1],
-"structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#adc7fb3275838792208c936669926cfe9":[3,0,0,22,1,0],
+"structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a1a57197235e88675736a032578a3fd0c":[3,0,0,22,1,0],
+"structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a52a0e6d1b115430256e64db0c90d9186":[3,0,0,22,1,2],
+"structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a80e8c0e9427d35c3cacc60715f64b765":[3,0,0,22,1,1],
+"structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#af355ceae82988f25cfa34d595550cbcf":[3,0,0,22,1,3],
"structafio__v2__xxx_1_1io__handle_1_1io__request.html":[3,0,0,22,3],
"structafio__v2__xxx_1_1io__handle_1_1io__request.html#a2e286d1fc85eb7d0e6a7c184a71ef63d":[3,0,0,22,3,2],
"structafio__v2__xxx_1_1io__handle_1_1io__request.html#a331a35aab824809266890ff7abe81558":[3,0,0,22,3,0],
@@ -246,8 +249,5 @@ var NAVTREEINDEX6 =
"structafio__v2__xxx_1_1stat__t.html#a594e03167fe2b5315ef61edc532ab840":[3,0,0,32,4],
"structafio__v2__xxx_1_1stat__t.html#a6461e6278085dea3b33b865867746f6d":[3,0,0,32,23],
"structafio__v2__xxx_1_1stat__t.html#a76b46ca289cd0bb1ed94c5eb8273e52d":[3,0,0,32,25],
-"structafio__v2__xxx_1_1stat__t.html#a7870b1954f030a7af49ab8b98ca4c71f":[3,0,0,32,15],
-"structafio__v2__xxx_1_1stat__t.html#a78b6297a93774d5d2c1499cad3de366d":[3,0,0,32,21],
-"structafio__v2__xxx_1_1stat__t.html#a8057fa7dddeb8373f762b4d1a7f31747":[3,0,0,32,17],
-"structafio__v2__xxx_1_1stat__t.html#a869c50d26a4ecceaca4bd36edc8781c0":[3,0,0,32,8]
+"structafio__v2__xxx_1_1stat__t.html#a7870b1954f030a7af49ab8b98ca4c71f":[3,0,0,32,15]
};
diff --git a/navtreeindex7.js b/navtreeindex7.js
index babc486a..d5b9c1a0 100644
--- a/navtreeindex7.js
+++ b/navtreeindex7.js
@@ -1,5 +1,8 @@
var NAVTREEINDEX7 =
{
+"structafio__v2__xxx_1_1stat__t.html#a78b6297a93774d5d2c1499cad3de366d":[3,0,0,32,21],
+"structafio__v2__xxx_1_1stat__t.html#a8057fa7dddeb8373f762b4d1a7f31747":[3,0,0,32,17],
+"structafio__v2__xxx_1_1stat__t.html#a869c50d26a4ecceaca4bd36edc8781c0":[3,0,0,32,8],
"structafio__v2__xxx_1_1stat__t.html#a998eb1b348255bdcfa25e2f99064e5e5":[3,0,0,32,18],
"structafio__v2__xxx_1_1stat__t.html#a9b925315d4e65458bd5382efc343dec5":[3,0,0,32,10],
"structafio__v2__xxx_1_1stat__t.html#aa36e06b416a94dd67d3a112e2da0a3b7":[3,0,0,32,24],
@@ -246,8 +249,5 @@ var NAVTREEINDEX7 =
"v2_80_2afio_8hpp.html":[4,0,0,0,0,1],
"v2_80_2afio_8hpp.html#a2288a58c8561b4dd712a813c2dc87113":[4,0,0,0,0,1,0],
"v2_80_2afio_8hpp.html#a5a7b3dbd25ff8837537f5847fbd4277c":[4,0,0,0,0,1,6],
-"v2_80_2afio_8hpp.html#a5d898772f113c64c7fa9ecb267a85e79":[4,0,0,0,0,1,4],
-"v2_80_2afio_8hpp.html#a7172d84eb04f1b165ec13ca67ab672c5":[4,0,0,0,0,1,7],
-"v2_80_2afio_8hpp.html#aa446d6d4b32123465e362629430ea1c2":[4,0,0,0,0,1,3],
-"v2_80_2afio_8hpp.html#ab767a104191b56793f1e63713f8aa696":[4,0,0,0,0,1,2]
+"v2_80_2afio_8hpp.html#a5d898772f113c64c7fa9ecb267a85e79":[4,0,0,0,0,1,4]
};
diff --git a/navtreeindex8.js b/navtreeindex8.js
index 4a8c54e1..c917f009 100644
--- a/navtreeindex8.js
+++ b/navtreeindex8.js
@@ -1,5 +1,8 @@
var NAVTREEINDEX8 =
{
+"v2_80_2afio_8hpp.html#a7172d84eb04f1b165ec13ca67ab672c5":[4,0,0,0,0,1,7],
+"v2_80_2afio_8hpp.html#aa446d6d4b32123465e362629430ea1c2":[4,0,0,0,0,1,3],
+"v2_80_2afio_8hpp.html#ab767a104191b56793f1e63713f8aa696":[4,0,0,0,0,1,2],
"v2_80_2afio_8hpp.html#acb966611a7fc2153e23e4b76849da786":[4,0,0,0,0,1,8],
"v2_80_2afio_8hpp.html#adad16dcb7690ae81ee64424d44a31e70":[4,0,0,0,0,1,1],
"v2_80_2afio_8hpp.html#afab2566c573eef8945053c8d57976764":[4,0,0,0,0,1,5],
diff --git a/search/all_1.js b/search/all_1.js
index 9b2802df..7fc9f303 100644
--- a/search/all_1.js
+++ b/search/all_1.js
@@ -2,7 +2,7 @@ var searchData=
[
['acls',['acls',['../structafio__v2__xxx_1_1statfs__t_1_1f__flags__t.html#ad90201c2e2a8446c45feb244a9927778',1,'afio_v2_xxx::statfs_t::f_flags_t']]],
['adapted_5fhandle_5ftype',['adapted_handle_type',['../classafio__v2__xxx_1_1algorithm_1_1cached__parent__handle__adapter.html#a8650bcb7fef2623698debe2d49629d36',1,'afio_v2_xxx::algorithm::cached_parent_handle_adapter']]],
- ['address',['address',['../classafio__v2__xxx_1_1map__handle.html#a1e9273d0c6aca7da6480437f6cf6638a',1,'afio_v2_xxx::map_handle::address()'],['../classafio__v2__xxx_1_1mapped__file__handle.html#adca505e51ea006ffa59e3673ea0a9853',1,'afio_v2_xxx::mapped_file_handle::address()']]],
+ ['address',['address',['../classafio__v2__xxx_1_1map__handle.html#a6f203a9bb0bee94ac6b395ac5f3a2270',1,'afio_v2_xxx::map_handle::address()'],['../classafio__v2__xxx_1_1mapped__file__handle.html#ab1d9c370e86dc327e3efad1c71db3cb3',1,'afio_v2_xxx::mapped_file_handle::address()']]],
['afio_2ehpp',['afio.hpp',['../afio_8hpp.html',1,'(Global Namespace)'],['../v2_80_2afio_8hpp.html',1,'(Global Namespace)']]],
['afio_5fcompile_5fkqueues',['AFIO_COMPILE_KQUEUES',['../io__service_8hpp.html#ac31c5a745782f65978dc61e09f105040',1,'io_service.hpp']]],
['afio_5fdisable_5fpaths_5fin_5ffailure_5finfo',['AFIO_DISABLE_PATHS_IN_FAILURE_INFO',['../config_8hpp.html#a233035c2698f3cbf5910c8ecf5193135',1,'config.hpp']]],
diff --git a/search/all_10.js b/search/all_10.js
index 59f8a3a1..07c2d66e 100644
--- a/search/all_10.js
+++ b/search/all_10.js
@@ -17,7 +17,7 @@ var searchData=
['shrink_5fto_5ffit',['shrink_to_fit',['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a273087ee5045a35c2f6f84715fa5a0c2',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl']]],
['singleton',['singleton',['../structafio__v2__xxx_1_1section__handle_1_1flag__base.html#a5b790e66402ef3a07ce9464f3e1dc9d8a091dabebebe6745fe9c1ed2901c125f2',1,'afio_v2_xxx::section_handle::flag_base']]],
['size',['size',['../structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#a7b088508cc1b731b64b501a1f77a0108',1,'afio_v2_xxx::storage_profile::storage_profile::size()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a4caa322dde7556ae0a552ba428285dd2',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::size()']]],
- ['size_5ftype',['size_type',['../classafio__v2__xxx_1_1handle.html#a0adf7fa00e23ed561328f473986e9ccc',1,'afio_v2_xxx::handle::size_type()'],['../classafio__v2__xxx_1_1io__service.html#a2efd36ca952a401e2b0bc44b7e52524e',1,'afio_v2_xxx::io_service::size_type()'],['../classafio__v2__xxx_1_1path__view.html#ac9ea02ed943d7b9adeed34c4ed100d5f',1,'afio_v2_xxx::path_view::size_type()'],['../structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#ac854196b2d774c4c7375b1e15296b2d2',1,'afio_v2_xxx::storage_profile::storage_profile::size_type()'],['../classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5',1,'afio_v2_xxx::algorithm::mapped_span::size_type()'],['../classafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__iterator.html#a04de3895e4f179e8f66f80f8708c78eb',1,'afio_v2_xxx::algorithm::impl::trivial_vector_iterator::size_type()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a618ed9123552bf7a1681fc566ea8cd37',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::size_type()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#ac62b40fb77aa21ca6e24f296969aa70a',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; true, T &gt;::size_type()']]],
+ ['size_5ftype',['size_type',['../classafio__v2__xxx_1_1handle.html#a0adf7fa00e23ed561328f473986e9ccc',1,'afio_v2_xxx::handle::size_type()'],['../structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#abb445f051adab15fbca4b0acc8461e4c',1,'afio_v2_xxx::io_handle::buffer_type::size_type()'],['../structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a80e8c0e9427d35c3cacc60715f64b765',1,'afio_v2_xxx::io_handle::const_buffer_type::size_type()'],['../classafio__v2__xxx_1_1io__service.html#a2efd36ca952a401e2b0bc44b7e52524e',1,'afio_v2_xxx::io_service::size_type()'],['../classafio__v2__xxx_1_1path__view.html#ac9ea02ed943d7b9adeed34c4ed100d5f',1,'afio_v2_xxx::path_view::size_type()'],['../structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#ac854196b2d774c4c7375b1e15296b2d2',1,'afio_v2_xxx::storage_profile::storage_profile::size_type()'],['../classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5',1,'afio_v2_xxx::algorithm::mapped_span::size_type()'],['../classafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__iterator.html#a04de3895e4f179e8f66f80f8708c78eb',1,'afio_v2_xxx::algorithm::impl::trivial_vector_iterator::size_type()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a618ed9123552bf7a1681fc566ea8cd37',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::size_type()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#ac62b40fb77aa21ca6e24f296969aa70a',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; true, T &gt;::size_type()']]],
['source_5ftype',['source_type',['../structafio__v2__xxx_1_1path__discovery_1_1discovered__path.html#a1deccea0a3ad1c3a5a2688a1a3cc118c',1,'afio_v2_xxx::path_discovery::discovered_path']]],
['spinlock_5ftype',['spinlock_type',['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html#a80fcaf9fcaddc442e8517e11f20fcab9',1,'afio_v2_xxx::algorithm::shared_fs_mutex::memory_map']]],
['st_5fallocated',['st_allocated',['../structafio__v2__xxx_1_1stat__t.html#adc79f76a01eab3ca4704731e4d14e72e',1,'afio_v2_xxx::stat_t']]],
diff --git a/search/all_2.js b/search/all_2.js
index b7d5349e..42902fcb 100644
--- a/search/all_2.js
+++ b/search/all_2.js
@@ -3,7 +3,7 @@ var searchData=
['back',['back',['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a220b834444274ceffef2c3a529de5453',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::back()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a77ac1dfbe6f0df38bf9ecd3fbdf515fe',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::back() const']]],
['backing',['backing',['../classafio__v2__xxx_1_1section__handle.html#acdebf8de23e97950968d3fba84141366',1,'afio_v2_xxx::section_handle']]],
['backing_5fnative_5fhandle',['backing_native_handle',['../classafio__v2__xxx_1_1section__handle.html#a5464eac84bedf1ce13318451b3a95e93',1,'afio_v2_xxx::section_handle']]],
- ['barrier',['barrier',['../classafio__v2__xxx_1_1io__handle.html#a243156928e89b8988a1412f211b3b603',1,'afio_v2_xxx::io_handle::barrier()'],['../classafio__v2__xxx_1_1map__handle.html#a7119886b920953e12340b05ea94e395d',1,'afio_v2_xxx::map_handle::barrier()'],['../namespaceafio__v2__xxx.html#abb60a5dc89b41b1db101dbed12cb065d',1,'afio_v2_xxx::barrier(io_handle &amp;self, io_handle::io_request&lt; io_handle::const_buffers_type &gt; reqs=io_handle::io_request&lt; io_handle::const_buffers_type &gt;(), bool wait_for_device=false, bool and_metadata=false, deadline d=deadline()) noexcept'],['../namespaceafio__v2__xxx.html#a1b5c40714a95d835e7926b9508469bf2',1,'afio_v2_xxx::barrier(map_handle &amp;self, map_handle::const_buffer_type req, bool evict=false) noexcept']]],
+ ['barrier',['barrier',['../classafio__v2__xxx_1_1io__handle.html#a243156928e89b8988a1412f211b3b603',1,'afio_v2_xxx::io_handle::barrier()'],['../classafio__v2__xxx_1_1map__handle.html#a74e5785071e0d89b51edcbc9bc6089db',1,'afio_v2_xxx::map_handle::barrier()'],['../namespaceafio__v2__xxx.html#abb60a5dc89b41b1db101dbed12cb065d',1,'afio_v2_xxx::barrier(io_handle &amp;self, io_handle::io_request&lt; io_handle::const_buffers_type &gt; reqs=io_handle::io_request&lt; io_handle::const_buffers_type &gt;(), bool wait_for_device=false, bool and_metadata=false, deadline d=deadline()) noexcept'],['../namespaceafio__v2__xxx.html#a1b5c40714a95d835e7926b9508469bf2',1,'afio_v2_xxx::barrier(map_handle &amp;self, map_handle::const_buffer_type req, bool evict=false) noexcept']]],
['barrier_5fon_5fclose',['barrier_on_close',['../structafio__v2__xxx_1_1section__handle_1_1flag__base.html#a5b790e66402ef3a07ce9464f3e1dc9d8a13b22e159d85ac0067a3aac0f7255acd',1,'afio_v2_xxx::section_handle::flag_base']]],
['base_2ehpp',['base.hpp',['../base_8hpp.html',1,'']]],
['begin',['begin',['../structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#aa19331ff339cc1f81d42db90bdf5f1db',1,'afio_v2_xxx::storage_profile::storage_profile::begin() noexcept'],['../structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#ac36c1be86646518163e8812aff79d080',1,'afio_v2_xxx::storage_profile::storage_profile::begin() const noexcept'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#acebb433711065ad2b2d16d78eab4b0a0',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::begin() noexcept'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a5280496d7e2ba769963882652913e4b4',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::begin() const noexcept']]],
diff --git a/search/all_4.js b/search/all_4.js
index d1f51081..787b65ea 100644
--- a/search/all_4.js
+++ b/search/all_4.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['data',['data',['../structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#af99fc701020c497671e8b865294b5ed2',1,'afio_v2_xxx::io_handle::buffer_type::data()'],['../structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#adc7fb3275838792208c936669926cfe9',1,'afio_v2_xxx::io_handle::const_buffer_type::data()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#ab887c4445a8d0a42bdf493e28556aee4',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::data() noexcept'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#ace4d6145031f0cbe70ef34ecc5a9ba92',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::data() const noexcept']]],
+ ['data',['data',['../structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a7220a73a4d1d6465abe6351b04d8caf4',1,'afio_v2_xxx::io_handle::buffer_type::data()'],['../structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a52a0e6d1b115430256e64db0c90d9186',1,'afio_v2_xxx::io_handle::const_buffer_type::data()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#ab887c4445a8d0a42bdf493e28556aee4',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::data() noexcept'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#ace4d6145031f0cbe70ef34ecc5a9ba92',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::data() const noexcept']]],
['deadline',['deadline',['../structafio__v2__xxx_1_1deadline.html',1,'afio_v2_xxx']]],
['deadline_2eh',['deadline.h',['../deadline_8h.html',1,'']]],
['decommit',['decommit',['../classafio__v2__xxx_1_1map__handle.html#a5b69e8faa8a9e47dec1b1a123c722a3e',1,'afio_v2_xxx::map_handle']]],
diff --git a/search/all_a.js b/search/all_a.js
index 3822aebb..436a3fc4 100644
--- a/search/all_a.js
+++ b/search/all_a.js
@@ -1,7 +1,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#a772696494c5de167be74e3b5120e46b0',1,'afio_v2_xxx::io_handle::buffer_type::len()'],['../structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a18ff05ed710d3b3f210bff2f0e195885',1,'afio_v2_xxx::io_handle::const_buffer_type::len()']]],
+ ['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']]],
['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']]],
diff --git a/search/all_e.js b/search/all_e.js
index d04e450c..35b56692 100644
--- a/search/all_e.js
+++ b/search/all_e.js
@@ -17,7 +17,7 @@ var searchData=
['path_5fview_2ehpp',['path_view.hpp',['../path__view_8hpp.html',1,'']]],
['path_5fview_5ftype',['path_view_type',['../classafio__v2__xxx_1_1fs__handle.html#ac25247b15af82faf1db557b3e45e13d7',1,'afio_v2_xxx::fs_handle::path_view_type()'],['../classafio__v2__xxx_1_1path__handle.html#abe4d76fd0308667d7b5727c69cfe943f',1,'afio_v2_xxx::path_handle::path_view_type()']]],
['pid',['pid',['../structafio__v2__xxx_1_1native__handle__type.html#aace9906fbca321c8d178b3b05619fefe',1,'afio_v2_xxx::native_handle_type']]],
- ['pointer',['pointer',['../classafio__v2__xxx_1_1path__view.html#aecb84aa9657e989ae6cee330e329c535',1,'afio_v2_xxx::path_view::pointer()'],['../classafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__iterator.html#a51b7b19ce3ee34e86e6bcbe96a0fe22c',1,'afio_v2_xxx::algorithm::impl::trivial_vector_iterator::pointer()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a41fe029355ecd5d1febf45cb6d80e846',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::pointer()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a1a637a4a2f57438ece387e1c79e4fb6f',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; true, T &gt;::pointer()']]],
+ ['pointer',['pointer',['../structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a2d991122b5a706c69def8631e2897a1d',1,'afio_v2_xxx::io_handle::buffer_type::pointer()'],['../structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a1a57197235e88675736a032578a3fd0c',1,'afio_v2_xxx::io_handle::const_buffer_type::pointer()'],['../classafio__v2__xxx_1_1path__view.html#aecb84aa9657e989ae6cee330e329c535',1,'afio_v2_xxx::path_view::pointer()'],['../classafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__iterator.html#a51b7b19ce3ee34e86e6bcbe96a0fe22c',1,'afio_v2_xxx::algorithm::impl::trivial_vector_iterator::pointer()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a41fe029355ecd5d1febf45cb6d80e846',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::pointer()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a1a637a4a2f57438ece387e1c79e4fb6f',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; true, T &gt;::pointer()']]],
['pop_5fback',['pop_back',['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a6fa51a8f33e271df5fa6e7c0689e652e',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl']]],
['post',['post',['../classafio__v2__xxx_1_1io__service.html#acaa55fe3a61484c646c479f256158c02',1,'afio_v2_xxx::io_service']]],
['prefault',['prefault',['../structafio__v2__xxx_1_1section__handle_1_1flag__base.html#a5b790e66402ef3a07ce9464f3e1dc9d8a522b281f854fe92d7ea674d2d8cc4be2',1,'afio_v2_xxx::section_handle::flag_base']]],
diff --git a/search/functions_1.js b/search/functions_1.js
index 20f6a154..5e340c59 100644
--- a/search/functions_1.js
+++ b/search/functions_1.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['address',['address',['../classafio__v2__xxx_1_1map__handle.html#a1e9273d0c6aca7da6480437f6cf6638a',1,'afio_v2_xxx::map_handle::address()'],['../classafio__v2__xxx_1_1mapped__file__handle.html#adca505e51ea006ffa59e3673ea0a9853',1,'afio_v2_xxx::mapped_file_handle::address()']]],
+ ['address',['address',['../classafio__v2__xxx_1_1map__handle.html#a6f203a9bb0bee94ac6b395ac5f3a2270',1,'afio_v2_xxx::map_handle::address()'],['../classafio__v2__xxx_1_1mapped__file__handle.html#ab1d9c370e86dc327e3efad1c71db3cb3',1,'afio_v2_xxx::mapped_file_handle::address()']]],
['all_5ftemporary_5fdirectories',['all_temporary_directories',['../namespaceafio__v2__xxx_1_1path__discovery.html#a6b96e1ce0cebf33600e3f619ef355c7c',1,'afio_v2_xxx::path_discovery']]],
['are_5freads_5ffrom_5fcache',['are_reads_from_cache',['../classafio__v2__xxx_1_1handle.html#a71137cb82edd9a1bcb24f64886b5826d',1,'afio_v2_xxx::handle']]],
['are_5fsafety_5ffsyncs_5fissued',['are_safety_fsyncs_issued',['../classafio__v2__xxx_1_1handle.html#a3fc7db93fac699f5ecad453642ed314e',1,'afio_v2_xxx::handle']]],
diff --git a/search/functions_2.js b/search/functions_2.js
index dd7d5c84..240a8479 100644
--- a/search/functions_2.js
+++ b/search/functions_2.js
@@ -3,7 +3,7 @@ var searchData=
['back',['back',['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a220b834444274ceffef2c3a529de5453',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::back()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a77ac1dfbe6f0df38bf9ecd3fbdf515fe',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::back() const']]],
['backing',['backing',['../classafio__v2__xxx_1_1section__handle.html#acdebf8de23e97950968d3fba84141366',1,'afio_v2_xxx::section_handle']]],
['backing_5fnative_5fhandle',['backing_native_handle',['../classafio__v2__xxx_1_1section__handle.html#a5464eac84bedf1ce13318451b3a95e93',1,'afio_v2_xxx::section_handle']]],
- ['barrier',['barrier',['../classafio__v2__xxx_1_1io__handle.html#a243156928e89b8988a1412f211b3b603',1,'afio_v2_xxx::io_handle::barrier()'],['../classafio__v2__xxx_1_1map__handle.html#a7119886b920953e12340b05ea94e395d',1,'afio_v2_xxx::map_handle::barrier()'],['../namespaceafio__v2__xxx.html#abb60a5dc89b41b1db101dbed12cb065d',1,'afio_v2_xxx::barrier(io_handle &amp;self, io_handle::io_request&lt; io_handle::const_buffers_type &gt; reqs=io_handle::io_request&lt; io_handle::const_buffers_type &gt;(), bool wait_for_device=false, bool and_metadata=false, deadline d=deadline()) noexcept'],['../namespaceafio__v2__xxx.html#a1b5c40714a95d835e7926b9508469bf2',1,'afio_v2_xxx::barrier(map_handle &amp;self, map_handle::const_buffer_type req, bool evict=false) noexcept']]],
+ ['barrier',['barrier',['../classafio__v2__xxx_1_1io__handle.html#a243156928e89b8988a1412f211b3b603',1,'afio_v2_xxx::io_handle::barrier()'],['../classafio__v2__xxx_1_1map__handle.html#a74e5785071e0d89b51edcbc9bc6089db',1,'afio_v2_xxx::map_handle::barrier()'],['../namespaceafio__v2__xxx.html#abb60a5dc89b41b1db101dbed12cb065d',1,'afio_v2_xxx::barrier(io_handle &amp;self, io_handle::io_request&lt; io_handle::const_buffers_type &gt; reqs=io_handle::io_request&lt; io_handle::const_buffers_type &gt;(), bool wait_for_device=false, bool and_metadata=false, deadline d=deadline()) noexcept'],['../namespaceafio__v2__xxx.html#a1b5c40714a95d835e7926b9508469bf2',1,'afio_v2_xxx::barrier(map_handle &amp;self, map_handle::const_buffer_type req, bool evict=false) noexcept']]],
['begin',['begin',['../structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#aa19331ff339cc1f81d42db90bdf5f1db',1,'afio_v2_xxx::storage_profile::storage_profile::begin() noexcept'],['../structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#ac36c1be86646518163e8812aff79d080',1,'afio_v2_xxx::storage_profile::storage_profile::begin() const noexcept'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#acebb433711065ad2b2d16d78eab4b0a0',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::begin() noexcept'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a5280496d7e2ba769963882652913e4b4',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::begin() const noexcept']]],
['buffers_5ftype',['buffers_type',['../structafio__v2__xxx_1_1directory__handle_1_1buffers__type.html#af509b517a1ca07431f8c13dcaf7561f7',1,'afio_v2_xxx::directory_handle::buffers_type::buffers_type(span&lt; buffer_type &gt; v)'],['../structafio__v2__xxx_1_1directory__handle_1_1buffers__type.html#ac222d9bee85db4d81c5d9072811e30f3',1,'afio_v2_xxx::directory_handle::buffers_type::buffers_type(buffers_type &amp;&amp;o) noexcept'],['../structafio__v2__xxx_1_1directory__handle_1_1buffers__type.html#abcc10e5221526f9a9a618dc22bbeaf70',1,'afio_v2_xxx::directory_handle::buffers_type::buffers_type(const buffers_type &amp;)=delete']]],
['byte_5franges',['byte_ranges',['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1byte__ranges.html#a364c9875ff2249526b7450095999b2fa',1,'afio_v2_xxx::algorithm::shared_fs_mutex::byte_ranges::byte_ranges(const byte_ranges &amp;)=delete'],['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1byte__ranges.html#a047dc0602663a9011edc17720c239fd2',1,'afio_v2_xxx::algorithm::shared_fs_mutex::byte_ranges::byte_ranges(byte_ranges &amp;&amp;o) noexcept']]],
diff --git a/search/typedefs_8.js b/search/typedefs_8.js
index 8bfadebd..45aead47 100644
--- a/search/typedefs_8.js
+++ b/search/typedefs_8.js
@@ -2,5 +2,5 @@ var searchData=
[
['path_5ftype',['path_type',['../classafio__v2__xxx_1_1handle.html#a6c4df2242ece6f63ba7ef4e6baafaca6',1,'afio_v2_xxx::handle']]],
['path_5fview_5ftype',['path_view_type',['../classafio__v2__xxx_1_1fs__handle.html#ac25247b15af82faf1db557b3e45e13d7',1,'afio_v2_xxx::fs_handle::path_view_type()'],['../classafio__v2__xxx_1_1path__handle.html#abe4d76fd0308667d7b5727c69cfe943f',1,'afio_v2_xxx::path_handle::path_view_type()']]],
- ['pointer',['pointer',['../classafio__v2__xxx_1_1path__view.html#aecb84aa9657e989ae6cee330e329c535',1,'afio_v2_xxx::path_view::pointer()'],['../classafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__iterator.html#a51b7b19ce3ee34e86e6bcbe96a0fe22c',1,'afio_v2_xxx::algorithm::impl::trivial_vector_iterator::pointer()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a41fe029355ecd5d1febf45cb6d80e846',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::pointer()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a1a637a4a2f57438ece387e1c79e4fb6f',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; true, T &gt;::pointer()']]]
+ ['pointer',['pointer',['../structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a2d991122b5a706c69def8631e2897a1d',1,'afio_v2_xxx::io_handle::buffer_type::pointer()'],['../structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a1a57197235e88675736a032578a3fd0c',1,'afio_v2_xxx::io_handle::const_buffer_type::pointer()'],['../classafio__v2__xxx_1_1path__view.html#aecb84aa9657e989ae6cee330e329c535',1,'afio_v2_xxx::path_view::pointer()'],['../classafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__iterator.html#a51b7b19ce3ee34e86e6bcbe96a0fe22c',1,'afio_v2_xxx::algorithm::impl::trivial_vector_iterator::pointer()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a41fe029355ecd5d1febf45cb6d80e846',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::pointer()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#a1a637a4a2f57438ece387e1c79e4fb6f',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; true, T &gt;::pointer()']]]
];
diff --git a/search/typedefs_a.js b/search/typedefs_a.js
index 30244054..9a89e4e7 100644
--- a/search/typedefs_a.js
+++ b/search/typedefs_a.js
@@ -1,5 +1,5 @@
var searchData=
[
- ['size_5ftype',['size_type',['../classafio__v2__xxx_1_1handle.html#a0adf7fa00e23ed561328f473986e9ccc',1,'afio_v2_xxx::handle::size_type()'],['../classafio__v2__xxx_1_1io__service.html#a2efd36ca952a401e2b0bc44b7e52524e',1,'afio_v2_xxx::io_service::size_type()'],['../classafio__v2__xxx_1_1path__view.html#ac9ea02ed943d7b9adeed34c4ed100d5f',1,'afio_v2_xxx::path_view::size_type()'],['../structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#ac854196b2d774c4c7375b1e15296b2d2',1,'afio_v2_xxx::storage_profile::storage_profile::size_type()'],['../classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5',1,'afio_v2_xxx::algorithm::mapped_span::size_type()'],['../classafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__iterator.html#a04de3895e4f179e8f66f80f8708c78eb',1,'afio_v2_xxx::algorithm::impl::trivial_vector_iterator::size_type()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a618ed9123552bf7a1681fc566ea8cd37',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::size_type()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#ac62b40fb77aa21ca6e24f296969aa70a',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; true, T &gt;::size_type()']]],
+ ['size_5ftype',['size_type',['../classafio__v2__xxx_1_1handle.html#a0adf7fa00e23ed561328f473986e9ccc',1,'afio_v2_xxx::handle::size_type()'],['../structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#abb445f051adab15fbca4b0acc8461e4c',1,'afio_v2_xxx::io_handle::buffer_type::size_type()'],['../structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a80e8c0e9427d35c3cacc60715f64b765',1,'afio_v2_xxx::io_handle::const_buffer_type::size_type()'],['../classafio__v2__xxx_1_1io__service.html#a2efd36ca952a401e2b0bc44b7e52524e',1,'afio_v2_xxx::io_service::size_type()'],['../classafio__v2__xxx_1_1path__view.html#ac9ea02ed943d7b9adeed34c4ed100d5f',1,'afio_v2_xxx::path_view::size_type()'],['../structafio__v2__xxx_1_1storage__profile_1_1storage__profile.html#ac854196b2d774c4c7375b1e15296b2d2',1,'afio_v2_xxx::storage_profile::storage_profile::size_type()'],['../classafio__v2__xxx_1_1algorithm_1_1mapped__span.html#aa33d0ce0be15b0738c6b36341843ccb5',1,'afio_v2_xxx::algorithm::mapped_span::size_type()'],['../classafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__iterator.html#a04de3895e4f179e8f66f80f8708c78eb',1,'afio_v2_xxx::algorithm::impl::trivial_vector_iterator::size_type()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl.html#a618ed9123552bf7a1681fc566ea8cd37',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl::size_type()'],['../structafio__v2__xxx_1_1algorithm_1_1impl_1_1trivial__vector__impl_3_01true_00_01_t_01_4.html#ac62b40fb77aa21ca6e24f296969aa70a',1,'afio_v2_xxx::algorithm::impl::trivial_vector_impl&lt; true, T &gt;::size_type()']]],
['spinlock_5ftype',['spinlock_type',['../classafio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html#a80fcaf9fcaddc442e8517e11f20fcab9',1,'afio_v2_xxx::algorithm::shared_fs_mutex::memory_map']]]
];
diff --git a/search/variables_2.js b/search/variables_2.js
index acdce06b..02d83ecc 100644
--- a/search/variables_2.js
+++ b/search/variables_2.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['data',['data',['../structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#af99fc701020c497671e8b865294b5ed2',1,'afio_v2_xxx::io_handle::buffer_type::data()'],['../structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#adc7fb3275838792208c936669926cfe9',1,'afio_v2_xxx::io_handle::const_buffer_type::data()']]],
+ ['data',['data',['../structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a7220a73a4d1d6465abe6351b04d8caf4',1,'afio_v2_xxx::io_handle::buffer_type::data()'],['../structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a52a0e6d1b115430256e64db0c90d9186',1,'afio_v2_xxx::io_handle::const_buffer_type::data()']]],
['description',['description',['../structafio__v2__xxx_1_1storage__profile_1_1item__base.html#a3914ff417e4a91fd0cc1da8ccb3e81d0',1,'afio_v2_xxx::storage_profile::item_base']]],
['done',['done',['../structafio__v2__xxx_1_1directory__handle_1_1enumerate__info.html#a516cfbc33c3f1aaaa52f5d3eb043db41',1,'afio_v2_xxx::directory_handle::enumerate_info']]]
];
diff --git a/search/variables_6.js b/search/variables_6.js
index d2066c59..2d2734bf 100644
--- a/search/variables_6.js
+++ b/search/variables_6.js
@@ -1,6 +1,6 @@
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#a772696494c5de167be74e3b5120e46b0',1,'afio_v2_xxx::io_handle::buffer_type::len()'],['../structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a18ff05ed710d3b3f210bff2f0e195885',1,'afio_v2_xxx::io_handle::const_buffer_type::len()']]],
+ ['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']]]
];
diff --git a/structafio__v2__xxx_1_1error__info.html b/structafio__v2__xxx_1_1error__info.html
index 1872c557..881c606d 100644
--- a/structafio__v2__xxx_1_1error__info.html
+++ b/structafio__v2__xxx_1_1error__info.html
@@ -159,8 +159,8 @@ std::error_code&#160;</td><td class="memItemRight" valign="bottom"><a class="el"
</table>
</div><div class="memdoc">
<p>Throw this failure as a C++ exception. Firstly if the error code matches any of the standard C++ exception types e.g. <code>bad_alloc</code>, we throw those types using the string from <code>message()</code> where possible. We then will throw an <code>error</code> exception type. </p>
-<div class="fragment"><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;{</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; std::string msg;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; {</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; msg = <a class="code" href="structafio__v2__xxx_1_1error__info.html#ae710a4b60f3da9ab91e32374f9a766d5">message</a>();</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; }</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">catch</span>(...)</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; }</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; OUTCOME_V2_NAMESPACE::try_throw_std_exception_from_error(<a class="code" href="structafio__v2__xxx_1_1error__info.html#a1e44563674108c5338d1ca1050c4d0eb">ec</a>, msg);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">throw</span> error(*<span class="keyword">this</span>);</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;}</div><div class="ttc" id="structafio__v2__xxx_1_1error__info_html_a1e44563674108c5338d1ca1050c4d0eb"><div class="ttname"><a href="structafio__v2__xxx_1_1error__info.html#a1e44563674108c5338d1ca1050c4d0eb">afio_v2_xxx::error_info::ec</a></div><div class="ttdeci">std::error_code ec</div><div class="ttdoc">The error code for the failure. </div><div class="ttdef"><b>Definition:</b> config.hpp:345</div></div>
-<div class="ttc" id="structafio__v2__xxx_1_1error__info_html_ae710a4b60f3da9ab91e32374f9a766d5"><div class="ttname"><a href="structafio__v2__xxx_1_1error__info.html#ae710a4b60f3da9ab91e32374f9a766d5">afio_v2_xxx::error_info::message</a></div><div class="ttdeci">std::string message() const</div><div class="ttdoc">Retrieve a descriptive message for this failure, possibly with paths and stack backtraces. Extra detail only appears if called from the same thread as where the failure occurred. </div><div class="ttdef"><b>Definition:</b> config.hpp:644</div></div>
+<div class="fragment"><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;{</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; std::string msg;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; {</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; msg = <a class="code" href="structafio__v2__xxx_1_1error__info.html#ae710a4b60f3da9ab91e32374f9a766d5">message</a>();</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; }</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">catch</span>(...)</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; {</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; OUTCOME_V2_NAMESPACE::try_throw_std_exception_from_error(<a class="code" href="structafio__v2__xxx_1_1error__info.html#a1e44563674108c5338d1ca1050c4d0eb">ec</a>, msg);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">throw</span> error(*<span class="keyword">this</span>);</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;}</div><div class="ttc" id="structafio__v2__xxx_1_1error__info_html_a1e44563674108c5338d1ca1050c4d0eb"><div class="ttname"><a href="structafio__v2__xxx_1_1error__info.html#a1e44563674108c5338d1ca1050c4d0eb">afio_v2_xxx::error_info::ec</a></div><div class="ttdeci">std::error_code ec</div><div class="ttdoc">The error code for the failure. </div><div class="ttdef"><b>Definition:</b> config.hpp:351</div></div>
+<div class="ttc" id="structafio__v2__xxx_1_1error__info_html_ae710a4b60f3da9ab91e32374f9a766d5"><div class="ttname"><a href="structafio__v2__xxx_1_1error__info.html#ae710a4b60f3da9ab91e32374f9a766d5">afio_v2_xxx::error_info::message</a></div><div class="ttdeci">std::string message() const</div><div class="ttdoc">Retrieve a descriptive message for this failure, possibly with paths and stack backtraces. Extra detail only appears if called from the same thread as where the failure occurred. </div><div class="ttdef"><b>Definition:</b> config.hpp:650</div></div>
</div><!-- fragment -->
</div>
</div>
diff --git a/structafio__v2__xxx_1_1io__handle_1_1buffer__type-members.html b/structafio__v2__xxx_1_1io__handle_1_1buffer__type-members.html
index e40664c9..d64b69f4 100644
--- a/structafio__v2__xxx_1_1io__handle_1_1buffer__type-members.html
+++ b/structafio__v2__xxx_1_1io__handle_1_1buffer__type-members.html
@@ -87,8 +87,10 @@ $(document).ready(function(){initNavTree('structafio__v2__xxx_1_1io__handle_1_1b
<p>This is the complete list of members for <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html">afio_v2_xxx::io_handle::buffer_type</a>, including all inherited members.</p>
<table class="directory">
- <tr class="even"><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#af99fc701020c497671e8b865294b5ed2">data</a></td><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html">afio_v2_xxx::io_handle::buffer_type</a></td><td class="entry"></td></tr>
- <tr><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a772696494c5de167be74e3b5120e46b0">len</a></td><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html">afio_v2_xxx::io_handle::buffer_type</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a7220a73a4d1d6465abe6351b04d8caf4">data</a></td><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html">afio_v2_xxx::io_handle::buffer_type</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a629e060c2032a433613cf42dd969d61e">len</a></td><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html">afio_v2_xxx::io_handle::buffer_type</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a2d991122b5a706c69def8631e2897a1d">pointer</a> typedef</td><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html">afio_v2_xxx::io_handle::buffer_type</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#abb445f051adab15fbca4b0acc8461e4c">size_type</a> typedef</td><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html">afio_v2_xxx::io_handle::buffer_type</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
diff --git a/structafio__v2__xxx_1_1io__handle_1_1buffer__type.html b/structafio__v2__xxx_1_1io__handle_1_1buffer__type.html
index eb7eaa2c..1cc8f9fb 100644
--- a/structafio__v2__xxx_1_1io__handle_1_1buffer__type.html
+++ b/structafio__v2__xxx_1_1io__handle_1_1buffer__type.html
@@ -81,6 +81,7 @@ $(document).ready(function(){initNavTree('structafio__v2__xxx_1_1io__handle_1_1b
<div class="header">
<div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="structafio__v2__xxx_1_1io__handle_1_1buffer__type-members.html">List of all members</a> </div>
<div class="headertitle">
@@ -93,16 +94,27 @@ $(document).ready(function(){initNavTree('structafio__v2__xxx_1_1io__handle_1_1b
<p><code>#include &quot;io_handle.hpp&quot;</code></p>
<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a2d991122b5a706c69def8631e2897a1d"><td class="memItemLeft" align="right" valign="top"><a id="a2d991122b5a706c69def8631e2897a1d"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a2d991122b5a706c69def8631e2897a1d">pointer</a> = byte *</td></tr>
+<tr class="memdesc:a2d991122b5a706c69def8631e2897a1d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type of the pointer to memory. <br /></td></tr>
+<tr class="separator:a2d991122b5a706c69def8631e2897a1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb445f051adab15fbca4b0acc8461e4c"><td class="memItemLeft" align="right" valign="top"><a id="abb445f051adab15fbca4b0acc8461e4c"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#abb445f051adab15fbca4b0acc8461e4c">size_type</a> = size_t</td></tr>
+<tr class="memdesc:abb445f051adab15fbca4b0acc8461e4c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type of the length of memory. <br /></td></tr>
+<tr class="separator:abb445f051adab15fbca4b0acc8461e4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Public Attributes</h2></td></tr>
-<tr class="memitem:af99fc701020c497671e8b865294b5ed2"><td class="memItemLeft" align="right" valign="top"><a id="af99fc701020c497671e8b865294b5ed2"></a>
-char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#af99fc701020c497671e8b865294b5ed2">data</a></td></tr>
-<tr class="memdesc:af99fc701020c497671e8b865294b5ed2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to memory to be filled by a read. Try to make this 64 byte, or ideally, <code>page_size()</code> aligned where possible. <br /></td></tr>
-<tr class="separator:af99fc701020c497671e8b865294b5ed2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a772696494c5de167be74e3b5120e46b0"><td class="memItemLeft" align="right" valign="top"><a id="a772696494c5de167be74e3b5120e46b0"></a>
-size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a772696494c5de167be74e3b5120e46b0">len</a></td></tr>
-<tr class="memdesc:a772696494c5de167be74e3b5120e46b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of bytes to fill into this address. Try to make this a 64 byte multiple, or ideally, a whole multiple of <code>page_size()</code>. <br /></td></tr>
-<tr class="separator:a772696494c5de167be74e3b5120e46b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7220a73a4d1d6465abe6351b04d8caf4"><td class="memItemLeft" align="right" valign="top"><a id="a7220a73a4d1d6465abe6351b04d8caf4"></a>
+<a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a2d991122b5a706c69def8631e2897a1d">pointer</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a7220a73a4d1d6465abe6351b04d8caf4">data</a></td></tr>
+<tr class="memdesc:a7220a73a4d1d6465abe6351b04d8caf4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to memory to be filled by a read. Try to make this 64 byte, or ideally, <code>page_size()</code> aligned where possible. <br /></td></tr>
+<tr class="separator:a7220a73a4d1d6465abe6351b04d8caf4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629e060c2032a433613cf42dd969d61e"><td class="memItemLeft" align="right" valign="top"><a id="a629e060c2032a433613cf42dd969d61e"></a>
+<a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#abb445f051adab15fbca4b0acc8461e4c">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a629e060c2032a433613cf42dd969d61e">len</a></td></tr>
+<tr class="memdesc:a629e060c2032a433613cf42dd969d61e"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of bytes to fill into this address. Try to make this a 64 byte multiple, or ideally, a whole multiple of <code>page_size()</code>. <br /></td></tr>
+<tr class="separator:a629e060c2032a433613cf42dd969d61e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>The scatter buffer type used by this handle. Guaranteed to be <code>TrivialType</code> and <code>StandardLayoutType</code>. </p>
diff --git a/structafio__v2__xxx_1_1io__handle_1_1buffer__type.js b/structafio__v2__xxx_1_1io__handle_1_1buffer__type.js
index fc92407a..8780ff22 100644
--- a/structafio__v2__xxx_1_1io__handle_1_1buffer__type.js
+++ b/structafio__v2__xxx_1_1io__handle_1_1buffer__type.js
@@ -1,5 +1,7 @@
var structafio__v2__xxx_1_1io__handle_1_1buffer__type =
[
- [ "data", "structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#af99fc701020c497671e8b865294b5ed2", null ],
- [ "len", "structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a772696494c5de167be74e3b5120e46b0", null ]
+ [ "pointer", "structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a2d991122b5a706c69def8631e2897a1d", null ],
+ [ "size_type", "structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#abb445f051adab15fbca4b0acc8461e4c", null ],
+ [ "data", "structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a7220a73a4d1d6465abe6351b04d8caf4", null ],
+ [ "len", "structafio__v2__xxx_1_1io__handle_1_1buffer__type.html#a629e060c2032a433613cf42dd969d61e", null ]
]; \ No newline at end of file
diff --git a/structafio__v2__xxx_1_1io__handle_1_1const__buffer__type-members.html b/structafio__v2__xxx_1_1io__handle_1_1const__buffer__type-members.html
index 9bf7acb7..9d7538d2 100644
--- a/structafio__v2__xxx_1_1io__handle_1_1const__buffer__type-members.html
+++ b/structafio__v2__xxx_1_1io__handle_1_1const__buffer__type-members.html
@@ -87,8 +87,10 @@ $(document).ready(function(){initNavTree('structafio__v2__xxx_1_1io__handle_1_1c
<p>This is the complete list of members for <a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">afio_v2_xxx::io_handle::const_buffer_type</a>, including all inherited members.</p>
<table class="directory">
- <tr class="even"><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#adc7fb3275838792208c936669926cfe9">data</a></td><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">afio_v2_xxx::io_handle::const_buffer_type</a></td><td class="entry"></td></tr>
- <tr><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a18ff05ed710d3b3f210bff2f0e195885">len</a></td><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">afio_v2_xxx::io_handle::const_buffer_type</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a52a0e6d1b115430256e64db0c90d9186">data</a></td><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">afio_v2_xxx::io_handle::const_buffer_type</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#af355ceae82988f25cfa34d595550cbcf">len</a></td><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">afio_v2_xxx::io_handle::const_buffer_type</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a1a57197235e88675736a032578a3fd0c">pointer</a> typedef</td><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">afio_v2_xxx::io_handle::const_buffer_type</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a80e8c0e9427d35c3cacc60715f64b765">size_type</a> typedef</td><td class="entry"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">afio_v2_xxx::io_handle::const_buffer_type</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
diff --git a/structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html b/structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html
index 73773a14..65557810 100644
--- a/structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html
+++ b/structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html
@@ -81,6 +81,7 @@ $(document).ready(function(){initNavTree('structafio__v2__xxx_1_1io__handle_1_1c
<div class="header">
<div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type-members.html">List of all members</a> </div>
<div class="headertitle">
@@ -93,16 +94,27 @@ $(document).ready(function(){initNavTree('structafio__v2__xxx_1_1io__handle_1_1c
<p><code>#include &quot;io_handle.hpp&quot;</code></p>
<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a1a57197235e88675736a032578a3fd0c"><td class="memItemLeft" align="right" valign="top"><a id="a1a57197235e88675736a032578a3fd0c"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a1a57197235e88675736a032578a3fd0c">pointer</a> = const byte *</td></tr>
+<tr class="memdesc:a1a57197235e88675736a032578a3fd0c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type of the pointer to memory. <br /></td></tr>
+<tr class="separator:a1a57197235e88675736a032578a3fd0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a80e8c0e9427d35c3cacc60715f64b765"><td class="memItemLeft" align="right" valign="top"><a id="a80e8c0e9427d35c3cacc60715f64b765"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a80e8c0e9427d35c3cacc60715f64b765">size_type</a> = size_t</td></tr>
+<tr class="memdesc:a80e8c0e9427d35c3cacc60715f64b765"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type of the length of memory. <br /></td></tr>
+<tr class="separator:a80e8c0e9427d35c3cacc60715f64b765"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Public Attributes</h2></td></tr>
-<tr class="memitem:adc7fb3275838792208c936669926cfe9"><td class="memItemLeft" align="right" valign="top"><a id="adc7fb3275838792208c936669926cfe9"></a>
-const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#adc7fb3275838792208c936669926cfe9">data</a></td></tr>
-<tr class="memdesc:adc7fb3275838792208c936669926cfe9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to memory to be written. Try to make this 64 byte, or ideally, <code>page_size()</code> aligned where possible. <br /></td></tr>
-<tr class="separator:adc7fb3275838792208c936669926cfe9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a18ff05ed710d3b3f210bff2f0e195885"><td class="memItemLeft" align="right" valign="top"><a id="a18ff05ed710d3b3f210bff2f0e195885"></a>
-size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a18ff05ed710d3b3f210bff2f0e195885">len</a></td></tr>
-<tr class="memdesc:a18ff05ed710d3b3f210bff2f0e195885"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of bytes to write from this address. Try to make this a 64 byte multiple, or ideally, a whole multiple of <code>page_size()</code>. <br /></td></tr>
-<tr class="separator:a18ff05ed710d3b3f210bff2f0e195885"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a52a0e6d1b115430256e64db0c90d9186"><td class="memItemLeft" align="right" valign="top"><a id="a52a0e6d1b115430256e64db0c90d9186"></a>
+<a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a1a57197235e88675736a032578a3fd0c">pointer</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a52a0e6d1b115430256e64db0c90d9186">data</a></td></tr>
+<tr class="memdesc:a52a0e6d1b115430256e64db0c90d9186"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to memory to be written. Try to make this 64 byte, or ideally, <code>page_size()</code> aligned where possible. <br /></td></tr>
+<tr class="separator:a52a0e6d1b115430256e64db0c90d9186"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af355ceae82988f25cfa34d595550cbcf"><td class="memItemLeft" align="right" valign="top"><a id="af355ceae82988f25cfa34d595550cbcf"></a>
+<a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a80e8c0e9427d35c3cacc60715f64b765">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#af355ceae82988f25cfa34d595550cbcf">len</a></td></tr>
+<tr class="memdesc:af355ceae82988f25cfa34d595550cbcf"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of bytes to write from this address. Try to make this a 64 byte multiple, or ideally, a whole multiple of <code>page_size()</code>. <br /></td></tr>
+<tr class="separator:af355ceae82988f25cfa34d595550cbcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>The gather buffer type used by this handle. Guaranteed to be <code>TrivialType</code> and <code>StandardLayoutType</code>. </p>
diff --git a/structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.js b/structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.js
index 3e520363..350bf65d 100644
--- a/structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.js
+++ b/structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.js
@@ -1,5 +1,7 @@
var structafio__v2__xxx_1_1io__handle_1_1const__buffer__type =
[
- [ "data", "structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#adc7fb3275838792208c936669926cfe9", null ],
- [ "len", "structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a18ff05ed710d3b3f210bff2f0e195885", null ]
+ [ "pointer", "structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a1a57197235e88675736a032578a3fd0c", null ],
+ [ "size_type", "structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a80e8c0e9427d35c3cacc60715f64b765", null ],
+ [ "data", "structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#a52a0e6d1b115430256e64db0c90d9186", null ],
+ [ "len", "structafio__v2__xxx_1_1io__handle_1_1const__buffer__type.html#af355ceae82988f25cfa34d595550cbcf", null ]
]; \ No newline at end of file