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>2019-10-14 21:43:57 +0300
committerJenkins nedprod CI <foo@nowhere>2019-10-14 21:43:57 +0300
commit1a739729c063ebb74669581d3ef39ccbbec923fb (patch)
tree1e5f426277e36aadc5c7de9214799281be112883
parent515b486ebfb872c575fe5bd4785aa6a3b7188a2b (diff)
Travis CI updates documentation
-rw-r--r--classllfio__v2__xxx_1_1algorithm_1_1cached__parent__handle__adapter.html2
-rw-r--r--classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html2
-rw-r--r--classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html6
-rw-r--r--classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html2
-rw-r--r--classllfio__v2__xxx_1_1path__view-members.html123
-rw-r--r--classllfio__v2__xxx_1_1path__view.html14
-rw-r--r--classllfio__v2__xxx_1_1path__view.js1
-rw-r--r--classllfio__v2__xxx_1_1path__view__component-members.html57
-rw-r--r--classllfio__v2__xxx_1_1path__view__component.html11
-rw-r--r--classllfio__v2__xxx_1_1path__view__component.js1
-rw-r--r--navtreedata.js8
-rw-r--r--navtreeindex4.js16
-rw-r--r--navtreeindex5.js114
-rw-r--r--navtreeindex6.js20
-rw-r--r--navtreeindex7.js6
-rw-r--r--navtreeindex8.js6
-rw-r--r--navtreeindex9.js4
-rw-r--r--todo.html16
18 files changed, 209 insertions, 200 deletions
diff --git a/classllfio__v2__xxx_1_1algorithm_1_1cached__parent__handle__adapter.html b/classllfio__v2__xxx_1_1algorithm_1_1cached__parent__handle__adapter.html
index 8a57984b..f5a77540 100644
--- a/classllfio__v2__xxx_1_1algorithm_1_1cached__parent__handle__adapter.html
+++ b/classllfio__v2__xxx_1_1algorithm_1_1cached__parent__handle__adapter.html
@@ -169,7 +169,7 @@ class llfio_v2_xxx::algorithm::cached_parent_handle_adapter&lt; T &gt;</h3>
<p>For some use cases where one is calling <code>parent_path_handle()</code> or code which calls that function very frequently e.g. calling <code>relink()</code> or <code>unlink()</code> a lot on many files with the same parent directory, having to constantly fetch the current path, open the parent directory and verify inodes becomes unhelpfully inefficient. This adapter keeps a process-wide hash table of directory handles shared between all instances of this adapter, thus making calling <code>parent_path_handle()</code> almost zero cost.</p>
<p>This adapter is of especial use on platforms which do not reliably implement per-fd path tracking for regular files (Apple MacOS, FreeBSD) as <code>current_path()</code> is reimplemented to use the current path of the shared parent directory instead. One loses race freedom within the contained directory, but that is the case on POSIX anyway.</p>
<p>This adapter is also of use on platforms which do not implement path tracking for open handles at all (e.g. Linux without <code>/proc</code> mounted) as the process-wide cache of directory handles retains the path of the directory handle at the time of creation. Third party changes to the part of the filesystem you are working upon will result in the inability to do race free unlinking etc, but if no third party changes are encountered it ought to work well.</p>
-<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000004">Todo:</a></b></dt><dd>I have been lazy and used public inheritance from that base i/o handle. I should use protected inheritance to prevent slicing, and expose all the public functions by hand. </dd></dl>
+<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000003">Todo:</a></b></dt><dd>I have been lazy and used public inheritance from that base i/o handle. I should use protected inheritance to prevent slicing, and expose all the public functions by hand. </dd></dl>
</div><hr/>The documentation for this class was generated from the following file:<ul>
<li>include/llfio/v2.0/algorithm/handle_adapter/<a class="el" href="cached__parent_8hpp.html">cached_parent.hpp</a></li>
</ul>
diff --git a/classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html b/classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html
index 9ba44431..87054b3b 100644
--- a/classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html
+++ b/classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html
@@ -206,7 +206,7 @@ class llfio_v2_xxx::algorithm::combining_handle_adapter&lt; Op, Target, Source &
<p>If just one handle type is supplied (the additional source type is <code>void</code>), then instead of combining, this handle adapter is transforming. <code>Op::do_read()</code> and <code>Op::do_write()</code> will be called with the second of the input buffers empty.</p>
<p>The defaults for the virtual functions may not suit your use case, in which case you can override them in the <code>Op::override</code> class.</p>
<p>Destroying the adapter does not destroy the attached handles. Closing the adapter does close the attached handles.</p>
-<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000005">Todo:</a></b></dt><dd>I have been lazy and used public inheritance from <code>io_handle</code> and <code>file_handle</code>. I should use protected inheritance to prevent slicing, and expose all the public functions by hand. </dd></dl>
+<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000004">Todo:</a></b></dt><dd>I have been lazy and used public inheritance from <code>io_handle</code> and <code>file_handle</code>. I should use protected inheritance to prevent slicing, and expose all the public functions by hand. </dd></dl>
</div><hr/>The documentation for this class was generated from the following file:<ul>
<li>include/llfio/v2.0/algorithm/handle_adapter/<a class="el" href="combining_8hpp.html">combining.hpp</a></li>
</ul>
diff --git a/classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html b/classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html
index 483dbafa..23c966b2 100644
--- a/classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html
+++ b/classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html
@@ -204,7 +204,7 @@ Protected Member Functions</h2></td></tr>
<li>Similarly older operating systems (e.g. Linux &lt; 3.0) do not implement extent hole punching and therefore will also see excessive disk space consumption. Note at the time of writing OS X doesn't implement hole punching at all.</li>
<li>If your OS doesn't have sane byte range locks (OS X, BSD, older Linuxes) and multiple objects in your process use the same lock file, misoperation will occur. Use lock_files instead.</li>
</ul>
-<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000007">Todo:</a></b></dt><dd><p class="startdd">Implement hole punching once I port that code from LLFIO v1. </p>
+<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000006">Todo:</a></b></dt><dd><p class="startdd">Implement hole punching once I port that code from LLFIO v1. </p>
<p>Decide on some resolution mechanism for sudden process exit. </p>
<p class="enddd">There is a 1 out of 2^64-2 chance of unique id collision. It would be nice if we actually formally checked that our chosen unique id is actually unique. </p>
</dd></dl>
@@ -248,7 +248,7 @@ Protected Member Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
-<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000009">Todo:</a></b></dt><dd>Read from header.last_known_good immediately if possible in order to avoid a duplicate read later </dd></dl>
+<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000008">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="classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex.html">llfio_v2_xxx::algorithm::shared_fs_mutex::shared_fs_mutex</a>.</p>
<div class="fragment"><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; LLFIO_LOG_FUNCTION_CALL(<span class="keyword">this</span>);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; atomic_append_detail::lock_request lock_request;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</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="l00253"></a><span class="lineno"> 253</span>&#160; {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> errc::argument_list_too_long;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; }</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; std::chrono::steady_clock::time_point began_steady;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; std::chrono::system_clock::time_point end_utc;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">if</span>(d)</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">if</span>((d).steady)</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; began_steady = std::chrono::steady_clock::now();</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="keywordflow">else</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; end_utc = (d).to_time_point();</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; }</div><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; <span class="comment">// Fire this if an error occurs</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">auto</span> disableunlock = undoer([&amp;] { out.release(); });</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// Write my lock request immediately</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; memset(&amp;lock_request, 0, <span class="keyword">sizeof</span>(lock_request));</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; lock_request.unique_id = _unique_id;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</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="l00277"></a><span class="lineno"> 277</span>&#160; lock_request.us_count = std::chrono::duration_cast&lt;std::chrono::microseconds&gt;(count).count();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; lock_request.items = out.entities.size();</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</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="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span>(!_skip_hashing)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</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="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</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="l00285"></a><span class="lineno"> 285</span>&#160; OUTCOME_TRY(my_lock_request_offset, _h.<a class="code" href="classllfio__v2__xxx_1_1file__handle.html#a7991af58283025b80a7225866643f0b4">maximum_extent</a>());</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; OUTCOME_TRYV(_h.<a class="code" href="classllfio__v2__xxx_1_1handle.html#a101620e9fff0c0e8c346af0e9de58b6a">set_append_only</a>(<span class="keyword">true</span>));</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keyword">auto</span> undo = undoer([<span class="keyword">this</span>] { (void) _h.<a class="code" href="classllfio__v2__xxx_1_1handle.html#a101620e9fff0c0e8c346af0e9de58b6a">set_append_only</a>(<span class="keyword">false</span>); });</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; file_handle::extent_guard append_guard;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">if</span>(_nfs_compatibility)</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; <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="l00293"></a><span class="lineno"> 293</span>&#160; <span class="comment">// Lock up to the beginning of the shadow lock space</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; lastbyte &amp;= ~(1ULL &lt;&lt; 63U);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; OUTCOME_TRY(append_guard_, _h.<a class="code" href="classllfio__v2__xxx_1_1io__handle.html#a29cc9f2525f78dd73f8402cb59d97212">lock</a>(my_lock_request_offset, lastbyte, <span class="keyword">true</span>));</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; append_guard = std::move(append_guard_);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; OUTCOME_TRYV(_h.<a class="code" href="classllfio__v2__xxx_1_1io__handle.html#a83884eca7b4cd09125a5cf8a155e6052">write</a>(0, {{reinterpret_cast&lt;byte *&gt;(&amp;lock_request), sizeof(lock_request)}}));</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// Find the record I just wrote</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</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="l00303"></a><span class="lineno"> 303</span>&#160; <span class="comment">// Read onwards from length as reported before I wrote my lock request</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">// until I find my lock request. This loop should never actually iterate</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// except under extreme load conditions.</span><span class="comment"></span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="comment"> //! \todo Read from header.last_known_good immediately if possible in order</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;<span class="comment"> //! to avoid a duplicate read later</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="comment"></span> <span class="keywordflow">for</span>(;;)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; file_handle::buffer_type req{_buffer, <span class="keyword">sizeof</span>(_buffer)};</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; file_handle::io_result&lt;file_handle::buffers_type&gt; readoutcome = _h.<a class="code" href="classllfio__v2__xxx_1_1file__handle.html#a6e46c6ea379152eb559ab15990f7c467">read</a>({req, my_lock_request_offset});</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">// Should never happen :)</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">if</span>(readoutcome.has_error())</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; {</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; LLFIO_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="l00316"></a><span class="lineno"> 316</span>&#160; std::terminate();</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; <span class="keyword">const</span> atomic_append_detail::lock_request *record, *lastrecord;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</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].size()); record &lt; lastrecord &amp;&amp; record-&gt;hash != lock_request.hash;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; ++record)</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; my_lock_request_offset += <span class="keyword">sizeof</span>(atomic_append_detail::lock_request);</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="keywordflow">if</span>(record-&gt;hash == lock_request.hash)</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">break</span>;</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; }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// extent_guard is now valid and will be unlocked on error</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; out.hint = my_lock_request_offset;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; disableunlock.dismiss();</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; <span class="comment">// Lock my request for writing so others can sleep on me</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; file_handle::extent_guard my_request_guard;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span>(!spin_not_sleep)</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keyword">auto</span> lock_offset = my_lock_request_offset;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="comment">// Set the top bit to use the shadow lock space on Windows</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; lock_offset |= (1ULL &lt;&lt; 63U);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; OUTCOME_TRY(my_request_guard_, _h.<a class="code" href="classllfio__v2__xxx_1_1io__handle.html#a29cc9f2525f78dd73f8402cb59d97212">lock</a>(lock_offset, <span class="keyword">sizeof</span>(lock_request), <span class="keyword">true</span>));</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; my_request_guard = std::move(my_request_guard_);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="comment">// Read every record preceding mine until header.first_known_good inclusive</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</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="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">do</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; reload:</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="comment">// Refresh the header and load a snapshot of everything between record_offset</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="comment">// and first_known_good or -6Kb, whichever the sooner</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; OUTCOME_TRYV(_read_header());</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="comment">// If there are no preceding records, we&#39;re done</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">if</span>(record_offset &lt; _header.first_known_good)</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; }</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keyword">auto</span> start_offset = record_offset;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</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="l00360"></a><span class="lineno"> 360</span>&#160; {</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</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="l00362"></a><span class="lineno"> 362</span>&#160; }</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">else</span></div><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; start_offset = <span class="keyword">sizeof</span>(atomic_append_detail::lock_request);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">if</span>(start_offset &lt; _header.first_known_good)</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; start_offset = _header.first_known_good;</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; assert(record_offset &gt;= start_offset);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; assert(record_offset - start_offset &lt;= <span class="keyword">sizeof</span>(_buffer));</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; file_handle::buffer_type req{_buffer, (size_t)(record_offset - start_offset) + <span class="keyword">sizeof</span>(atomic_append_detail::lock_request)};</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; OUTCOME_TRY(batchread, _h.<a class="code" href="classllfio__v2__xxx_1_1file__handle.html#a6e46c6ea379152eb559ab15990f7c467">read</a>({req, start_offset}));</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; assert(batchread[0].size() == record_offset - start_offset + <span class="keyword">sizeof</span>(atomic_append_detail::lock_request));</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</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].size() - <span class="keyword">sizeof</span>(atomic_append_detail::lock_request));</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</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="l00378"></a><span class="lineno"> 378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="comment">// Skip all completed lock requests or not mentioning any of my entities</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</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="l00381"></a><span class="lineno"> 381</span>&#160; {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">// If a completed lock request, skip</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span>(!record-&gt;hash &amp;&amp; (record-&gt;unique_id == 0u))</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="keywordflow">continue</span>;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; }</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</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="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">if</span>(!_skip_hashing)</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;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="l00391"></a><span class="lineno"> 391</span>&#160; {</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">goto</span> reload;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</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="comment">// Does this record lock anything I am locking?</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</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="l00398"></a><span class="lineno"> 398</span>&#160; {</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</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="l00400"></a><span class="lineno"> 400</span>&#160; {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">if</span>(record-&gt;entities[n].value == entity.value)</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="comment">// Is the lock I want exclusive or the lock he wants exclusive?</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="comment">// If so, need to block</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">if</span>((record-&gt;entities[n].exclusive != 0u) || (entity.exclusive != 0u))</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">goto</span> beginwait;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; }</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; }</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</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="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; beginwait:</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="comment">// Sleep until this record is freed using a shared lock</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">// on the record in our way. Note there is a race here</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="comment">// between when the lock requester writes the lock</span></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="comment">// request and when he takes an exclusive lock on it,</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="comment">// so if our shared lock succeeds we need to immediately</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// unlock and retry based on the data.</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; std::this_thread::yield();</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">if</span>(!spin_not_sleep)</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; {</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; deadline nd;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">if</span>(d)</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; <span class="keywordflow">if</span>((d).steady)</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</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="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">if</span>(ns.count() &lt; 0)</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; (nd).nsecs = 0;</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; <span class="keywordflow">else</span></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; (nd).nsecs = ns.count();</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; }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">else</span></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; (nd) = (d);</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; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">auto</span> lock_offset = record_offset;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="comment">// Set the top bit to use the shadow lock space on Windows</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; lock_offset |= (1ULL &lt;&lt; 63U);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; OUTCOME_TRYV(_h.<a class="code" href="classllfio__v2__xxx_1_1io__handle.html#a29cc9f2525f78dd73f8402cb59d97212">lock</a>(lock_offset, <span class="keyword">sizeof</span>(*record), <span class="keyword">false</span>, nd));</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="comment">// Make sure we haven&#39;t timed out during this wait</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">if</span>(d)</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">if</span>((d).steady)</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; <span class="keywordflow">if</span>(std::chrono::steady_clock::now() &gt;= (began_steady + std::chrono::nanoseconds((d).nsecs)))</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">return</span> errc::timed_out;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; }</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">if</span>(std::chrono::system_clock::now() &gt;= end_utc)</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">return</span> errc::timed_out;</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; }</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">while</span>(record_offset &gt;= _header.first_known_good);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">return</span> success();</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1io__handle_html_a83884eca7b4cd09125a5cf8a155e6052"><div class="ttname"><a href="classllfio__v2__xxx_1_1io__handle.html#a83884eca7b4cd09125a5cf8a155e6052">llfio_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>
@@ -315,7 +315,7 @@ Protected Member Functions</h2></td></tr>
</table>
</dd>
</dl>
-<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000008">Todo:</a></b></dt><dd>fs_mutex_append needs to check if file still exists after lock is granted, awaiting path fetching. </dd></dl>
+<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000007">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="l00204"></a><span class="lineno"> 204</span>&#160; {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; LLFIO_LOG_FUNCTION_CALL(0);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; OUTCOME_TRY(ret, <a class="code" href="classllfio__v2__xxx_1_1file__handle.html#a09e6b3e9806b328a687a55e955b885a3">file_handle::file</a>(base, lockfile, <a class="code" href="classllfio__v2__xxx_1_1handle.html#aa3930273a2d4cabbac309e0b75701dcaaefb2a684e4afb7d55e6147fbe5a332ee">file_handle::mode::write</a>, <a class="code" href="classllfio__v2__xxx_1_1handle.html#af0b352d0f273ba6fa70c178b2c2fee42a8f0339e854eb5321306a443ce9199e1d">file_handle::creation::if_needed</a>, <a class="code" href="classllfio__v2__xxx_1_1handle.html#aecd3a7db6cee3aec07d32fe6f99e6852ad5197d93c063a2b1e22d1630a39b7aef">file_handle::caching::temporary</a>));</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; atomic_append_detail::header header;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="comment">// Lock the entire header for exclusive access</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</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="l00210"></a><span class="lineno"> 210</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="l00211"></a><span class="lineno"> 211</span>&#160;<span class="comment"></span> <span class="keywordflow">if</span>(lockresult.has_error())</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="keywordflow">if</span>(lockresult.error() != errc::timed_out)</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">return</span> std::move(lockresult).error();</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// Somebody else is also using this file</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">else</span></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; <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="l00222"></a><span class="lineno"> 222</span>&#160; OUTCOME_TRYV(ret.truncate(<span class="keyword">sizeof</span>(header)));</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; memset(&amp;header, 0, <span class="keyword">sizeof</span>(header));</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; header.time_offset = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; header.first_known_good = <span class="keyword">sizeof</span>(header);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; header.first_after_hole_punch = <span class="keyword">sizeof</span>(header);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">if</span>(!skip_hashing)</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; 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="l00230"></a><span class="lineno"> 230</span>&#160; }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; OUTCOME_TRYV(ret.write(0, {{reinterpret_cast&lt;byte *&gt;(&amp;header), sizeof(header)}}));</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">// Open a shared lock on last byte in header to prevent other users zomping the file</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</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="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// Unlock any exclusive lock I gained earlier now</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">if</span>(lockresult)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; lockresult.value().unlock();</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">// The constructor will read and cache the header</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</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="l00242"></a><span class="lineno"> 242</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1file__handle_html_a09e6b3e9806b328a687a55e955b885a3"><div class="ttname"><a href="classllfio__v2__xxx_1_1file__handle.html#a09e6b3e9806b328a687a55e955b885a3">llfio_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="classllfio__v2__xxx_1_1handle_html_aa3930273a2d4cabbac309e0b75701dcaaefb2a684e4afb7d55e6147fbe5a332ee"><div class="ttname"><a href="classllfio__v2__xxx_1_1handle.html#aa3930273a2d4cabbac309e0b75701dcaaefb2a684e4afb7d55e6147fbe5a332ee">llfio_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="classllfio__v2__xxx_1_1handle_html_aecd3a7db6cee3aec07d32fe6f99e6852ad5197d93c063a2b1e22d1630a39b7aef"><div class="ttname"><a href="classllfio__v2__xxx_1_1handle.html#aecd3a7db6cee3aec07d32fe6f99e6852ad5197d93c063a2b1e22d1630a39b7aef">llfio_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>
diff --git a/classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html b/classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html
index 4054c2f0..b24115aa 100644
--- a/classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html
+++ b/classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html
@@ -239,7 +239,7 @@ class llfio_v2_xxx::algorithm::shared_fs_mutex::memory_map&lt; Hasher, HashIndex
<li>If your OS doesn't have sane byte range locks (OS X, BSD, older Linuxes) and multiple objects in your process use the same lock file, misoperation will occur.</li>
<li>Requires <code>handle::current_path()</code> to be working.</li>
</ul>
-<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000010">Todo:</a></b></dt><dd>memory_map::_hash_entities needs to hash x16, x8 and x4 at a time to encourage auto vectorisation </dd></dl>
+<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000009">Todo:</a></b></dt><dd>memory_map::_hash_entities needs to hash x16, x8 and x4 at a time to encourage auto vectorisation </dd></dl>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a23750199fded35429d27ec4824b65c18"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a23750199fded35429d27ec4824b65c18">&#9670;&nbsp;</a></span>fs_mutex_map()</h2>
diff --git a/classllfio__v2__xxx_1_1path__view-members.html b/classllfio__v2__xxx_1_1path__view-members.html
index ee761c0e..b146a408 100644
--- a/classllfio__v2__xxx_1_1path__view-members.html
+++ b/classllfio__v2__xxx_1_1path__view-members.html
@@ -87,69 +87,70 @@ $(document).ready(function(){initNavTree('classllfio__v2__xxx_1_1path__view.html
<p>This is the complete list of members for <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>, including all inherited members.</p>
<table class="directory">
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ad732574572c44177bd661456a542f50a">begin</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a61cb7bbf03f090213d899ca28598b891">begin</a>() noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a1aaf2407fed87b3b4c077e71495039ca">byte</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>c_str</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a8efb8be3b3f3b224680e9f10149bb2da">cbegin</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a37beaa71c1df79c40133a0548e8d0042">cend</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>char16_t</b> enum name (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ae064112c51630be49c33bd51e4380cbd">const_iterator</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#af613a5a2995dd0fca21d914b59e4aff8">const_reverse_iterator</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>contains_glob</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a2a8bf49225c71090012ed30260f117bf">default_internal_buffer_size</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ad4e14fc71abee0765b06af857bd6a025">difference_type</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a35074d82517e50c28aa99f4a13e8c501">empty</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a266f7052b687b4ba422c4cbcd0b2f453">end</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a2711832d81f40800e9d3915b9c37ff4e">end</a>() noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ad799e35ea5899df97ee570337376f8c1">extension</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#abccf122f0c4d537e0e41b87e86aeb61a">filename</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>has_extension</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>has_filename</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>has_parent_path</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>has_relative_path</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>has_root_directory</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>has_root_name</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>has_root_path</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>has_stem</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>is_absolute</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_relative</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ab44ed2bb7b699babc60d4d91b4fc5724">is_source_acceptable</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a3d8c5a6551685e57ed19e1924feaa07a">is_source_chartype_acceptable</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a7bfb0a79057416a10f43cf25b4c6c57a">iterator</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a0d5e676b565090269032a91908a8c0bf">LLFIO_TEMPLATE</a>(class Char) LLFIO_TREQUIRES(LLFIO_TPRED(path_view_component</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>_raw_data</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ad732574572c44177bd661456a542f50a">begin</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a61cb7bbf03f090213d899ca28598b891">begin</a>() noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a1aaf2407fed87b3b4c077e71495039ca">byte</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>c_str</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a8efb8be3b3f3b224680e9f10149bb2da">cbegin</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a37beaa71c1df79c40133a0548e8d0042">cend</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>char16_t</b> enum name (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ae064112c51630be49c33bd51e4380cbd">const_iterator</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#af613a5a2995dd0fca21d914b59e4aff8">const_reverse_iterator</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>contains_glob</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a2a8bf49225c71090012ed30260f117bf">default_internal_buffer_size</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ad4e14fc71abee0765b06af857bd6a025">difference_type</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a35074d82517e50c28aa99f4a13e8c501">empty</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a266f7052b687b4ba422c4cbcd0b2f453">end</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a2711832d81f40800e9d3915b9c37ff4e">end</a>() noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ad799e35ea5899df97ee570337376f8c1">extension</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#abccf122f0c4d537e0e41b87e86aeb61a">filename</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>has_extension</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>has_filename</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>has_parent_path</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>has_relative_path</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>has_root_directory</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>has_root_name</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>has_root_path</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>has_stem</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_absolute</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>is_relative</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ab44ed2bb7b699babc60d4d91b4fc5724">is_source_acceptable</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a3d8c5a6551685e57ed19e1924feaa07a">is_source_chartype_acceptable</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a7bfb0a79057416a10f43cf25b4c6c57a">iterator</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a0d5e676b565090269032a91908a8c0bf">LLFIO_TEMPLATE</a>(class Char) LLFIO_TREQUIRES(LLFIO_TPRED(path_view_component</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a0d5e676b565090269032a91908a8c0bf">LLFIO_TEMPLATE</a>(class Char) LLFIO_TREQUIRES(LLFIO_TPRED(path_view_component</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#afef4720fa17884bec1fd6eaa1d5faf56">LLFIO_TEMPLATE</a>(class T=typename filesystem::path::value_type, class Deleter=std::default_delete&lt; T[]&gt;, size_t _internal_buffer_size=default_internal_buffer_size, class Char) LLFIO_TREQUIRES(LLFIO_TPRED(is_source_acceptable&lt; T &gt; &amp;&amp;is_source_chartype_acceptable&lt; Char &gt;)) const expr int compare(const basic_string_view&lt; Char &gt; s) const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a1080207b46f1b48f0ee656995a506646">LLFIO_TEMPLATE</a>(class T=typename filesystem::path::value_type, class Deleter=std::default_delete&lt; T[]&gt;, size_t _internal_buffer_size=default_internal_buffer_size) LLFIO_TREQUIRES(LLFIO_TPRED(is_source_acceptable&lt; T &gt;)) struct c_str</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a2265f98040ccff9b1707326d4984ba4e">native_size</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator!=</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>operator&lt;&lt;</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ad9c86fad629570418502318585ec9f2a">operator=</a>(const path_view &amp;p)=default</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a3cfdc7d5b0557c4f5d1c7f7ca9b0a76f">operator=</a>(path_view &amp;&amp;p) noexcept=default</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator==</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a3572b45e9a180899d0c5eac7605cc562">parent_path</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ab86fa3a4456b6d298ec78e18e76f999d">path</a>() const</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">path_view</a>()</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ab423783d2a907166248f3074f3750045">path_view</a>(const filesystem::path &amp;v) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a9bfb80a086ac6f7848639a818de9841a">path_view</a>(path_view_component v) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a711521276cb79a9483a27bf5692ab30d">path_view</a>(const char *v) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a38729f67ca5ce1801b5cf951dcd71a28">path_view</a>(const wchar_t *v) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ab5cf1494522b2422c9b6e645e5837deb">path_view</a>(const char8_t *v) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a5f649112f30854859d95629a460dca23">path_view</a>(const char16_t *v) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a83b86163124a03eadb509e3bb4bcce3e">path_view</a>(const path_view &amp;)=default</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a4fb290145d390bd9e8cf3b5e2553c266">path_view</a>(path_view &amp;&amp;o) noexcept=default</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a5d34d5bd6de76ad2d56817214a7b8aee">preferred_separator</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a8b6b10a1839b3c801e3a8298881d3032">relative_path</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ac33ed45573976ace5610de51d40de0ee">remove_filename</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a4d90bae7abb2aa764d6dbd36ddbaa9ba">reverse_iterator</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a1712388490311a193a7e9be4df081400">root_directory</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a57047ecaa75f039c61b6bbeb5b5c33af">root_name</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a5dde24635b2a5ab43e3622fefb2c656a">root_path</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ac797abdc80bbd5f5b94ccb4e30117cbb">size_type</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a8e0dbd474d2c668a0c33a01e7a5aafe8">stem</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ab7ae611a6aa7fed01b4447a3f5133c14">swap</a>(path_view &amp;o) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~path_view</b>()=default (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a0d5e676b565090269032a91908a8c0bf">LLFIO_TEMPLATE</a>(class Char) LLFIO_TREQUIRES(LLFIO_TPRED(path_view_component</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#afef4720fa17884bec1fd6eaa1d5faf56">LLFIO_TEMPLATE</a>(class T=typename filesystem::path::value_type, class Deleter=std::default_delete&lt; T[]&gt;, size_t _internal_buffer_size=default_internal_buffer_size, class Char) LLFIO_TREQUIRES(LLFIO_TPRED(is_source_acceptable&lt; T &gt; &amp;&amp;is_source_chartype_acceptable&lt; Char &gt;)) const expr int compare(const basic_string_view&lt; Char &gt; s) const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a1080207b46f1b48f0ee656995a506646">LLFIO_TEMPLATE</a>(class T=typename filesystem::path::value_type, class Deleter=std::default_delete&lt; T[]&gt;, size_t _internal_buffer_size=default_internal_buffer_size) LLFIO_TREQUIRES(LLFIO_TPRED(is_source_acceptable&lt; T &gt;)) struct c_str</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a2265f98040ccff9b1707326d4984ba4e">native_size</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator!=</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator&lt;&lt;</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ad9c86fad629570418502318585ec9f2a">operator=</a>(const path_view &amp;p)=default</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a3cfdc7d5b0557c4f5d1c7f7ca9b0a76f">operator=</a>(path_view &amp;&amp;p) noexcept=default</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator==</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a3572b45e9a180899d0c5eac7605cc562">parent_path</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ab86fa3a4456b6d298ec78e18e76f999d">path</a>() const</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">path_view</a>()</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ab423783d2a907166248f3074f3750045">path_view</a>(const filesystem::path &amp;v) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a9bfb80a086ac6f7848639a818de9841a">path_view</a>(path_view_component v) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a711521276cb79a9483a27bf5692ab30d">path_view</a>(const char *v) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a38729f67ca5ce1801b5cf951dcd71a28">path_view</a>(const wchar_t *v) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ab5cf1494522b2422c9b6e645e5837deb">path_view</a>(const char8_t *v) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a5f649112f30854859d95629a460dca23">path_view</a>(const char16_t *v) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a83b86163124a03eadb509e3bb4bcce3e">path_view</a>(const path_view &amp;)=default</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a4fb290145d390bd9e8cf3b5e2553c266">path_view</a>(path_view &amp;&amp;o) noexcept=default</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a5d34d5bd6de76ad2d56817214a7b8aee">preferred_separator</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a8b6b10a1839b3c801e3a8298881d3032">relative_path</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ac33ed45573976ace5610de51d40de0ee">remove_filename</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a4d90bae7abb2aa764d6dbd36ddbaa9ba">reverse_iterator</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a1712388490311a193a7e9be4df081400">root_directory</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a57047ecaa75f039c61b6bbeb5b5c33af">root_name</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a5dde24635b2a5ab43e3622fefb2c656a">root_path</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ac797abdc80bbd5f5b94ccb4e30117cbb">size_type</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a8e0dbd474d2c668a0c33a01e7a5aafe8">stem</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ab7ae611a6aa7fed01b4447a3f5133c14">swap</a>(path_view &amp;o) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~path_view</b>()=default (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
diff --git a/classllfio__v2__xxx_1_1path__view.html b/classllfio__v2__xxx_1_1path__view.html
index 13e13196..323f1230 100644
--- a/classllfio__v2__xxx_1_1path__view.html
+++ b/classllfio__v2__xxx_1_1path__view.html
@@ -185,6 +185,9 @@ constexpr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href=
constexpr void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#ab7ae611a6aa7fed01b4447a3f5133c14">swap</a> (<a class="el" href="classllfio__v2__xxx_1_1path__view.html">path_view</a> &amp;o) noexcept</td></tr>
<tr class="memdesc:ab7ae611a6aa7fed01b4447a3f5133c14"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swap the view with another. <br /></td></tr>
<tr class="separator:ab7ae611a6aa7fed01b4447a3f5133c14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a99db0dd434afa24ee6f2b6ae9287ecb2"><td class="memItemLeft" align="right" valign="top"><a id="a99db0dd434afa24ee6f2b6ae9287ecb2"></a>
+const <a class="el" href="classllfio__v2__xxx_1_1path__view.html#a1aaf2407fed87b3b4c077e71495039ca">byte</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>_raw_data</b> () const noexcept</td></tr>
+<tr class="separator:a99db0dd434afa24ee6f2b6ae9287ecb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a35074d82517e50c28aa99f4a13e8c501"><td class="memItemLeft" align="right" valign="top"><a id="a35074d82517e50c28aa99f4a13e8c501"></a>
LLFIO_NODISCARD LLFIO_PATH_VIEW_CONSTEXPR bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1path__view.html#a35074d82517e50c28aa99f4a13e8c501">empty</a> () const noexcept</td></tr>
<tr class="memdesc:a35074d82517e50c28aa99f4a13e8c501"><td class="mdescLeft">&#160;</td><td class="mdescRight">True if empty. <br /></td></tr>
@@ -333,7 +336,6 @@ std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operato
<div class="textblock"><p>A borrowed view of a path. A lightweight trivial-type alternative to <code>std::filesystem::path</code>. </p>
<p>LLFIO is sufficiently fast that <code>std::filesystem::path</code> as a wrapper of an underlying <code>std::basic_string&lt;&gt;</code> can be problematically expensive for some filing system operations due to the potential memory allocation. LLFIO therefore works exclusively with borrowed views of other path storage.</p>
<p>Some of the API for <code>std::filesystem::path</code> is replicated here, however any APIs which modify the path other than taking subsets are obviously not possible with borrowed views.</p>
-<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000003">Todo:</a></b></dt><dd>Lots of member functions remain to be implemented. <code>char8_t</code> and <code>char16_t</code> support is not implemented yet.</dd></dl>
<p>Each consumer of <code>path_view</code> defines what the "native platform transport" and "native platform encoding" is. For LLFIO, the native platform transport is defined to be <code>std::filesystem::path::value_type</code>, which is as follows:</p>
<ul>
<li>POSIX: The native platform transport is <code>char</code>.</li>
@@ -391,7 +393,7 @@ std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operato
</table>
</div><div class="memdoc">
<p>Constructs a path view from a lengthed array of one of <code>byte</code>, <code>char</code>, <code>wchar_t</code>, <code>char8_t</code> or <code>char16_t</code>. The input string MUST continue to exist for this view to be valid. </p>
-<div class="fragment"><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; : _state(v, len, is_zero_terminated)</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; {</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; }</div></div><!-- fragment -->
+<div class="fragment"><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; : _state(v, len, is_zero_terminated)</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; {</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; }</div></div><!-- fragment -->
</div>
</div>
<a id="a0d5e676b565090269032a91908a8c0bf"></a>
@@ -418,7 +420,7 @@ std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operato
</table>
</div><div class="memdoc">
<p>Constructs from a basic string if the character type is one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code> or <code>char16_t</code>. </p>
-<div class="fragment"><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; : <a class="code" href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">path_view</a>(v.data(), v.size(), <span class="keyword">true</span>)</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; {</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1path__view_html_a91540ade852194b9507184cdcaed3339"><div class="ttname"><a href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">llfio_v2_xxx::path_view::path_view</a></div><div class="ttdeci">constexpr path_view()</div><div class="ttdoc">Constructs an empty path view. </div><div class="ttdef"><b>Definition:</b> path_view.hpp:997</div></div>
+<div class="fragment"><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; : <a class="code" href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">path_view</a>(v.data(), v.size(), <span class="keyword">true</span>)</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; {</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1path__view_html_a91540ade852194b9507184cdcaed3339"><div class="ttname"><a href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">llfio_v2_xxx::path_view::path_view</a></div><div class="ttdeci">constexpr path_view()</div><div class="ttdoc">Constructs an empty path view. </div><div class="ttdef"><b>Definition:</b> path_view.hpp:996</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -446,7 +448,7 @@ std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operato
</table>
</div><div class="memdoc">
<p>Constructs from a basic string view if the character type is one of <code>char</code>, <code>wchar_t</code>, <code>char8_t</code> or <code>char16_t</code>. </p>
-<div class="fragment"><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; : <a class="code" href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">path_view</a>(v.data(), v.size(), is_zero_terminated)</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; {</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1path__view_html_a91540ade852194b9507184cdcaed3339"><div class="ttname"><a href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">llfio_v2_xxx::path_view::path_view</a></div><div class="ttdeci">constexpr path_view()</div><div class="ttdoc">Constructs an empty path view. </div><div class="ttdef"><b>Definition:</b> path_view.hpp:997</div></div>
+<div class="fragment"><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; : <a class="code" href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">path_view</a>(v.data(), v.size(), is_zero_terminated)</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; {</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1path__view_html_a91540ade852194b9507184cdcaed3339"><div class="ttname"><a href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">llfio_v2_xxx::path_view::path_view</a></div><div class="ttdeci">constexpr path_view()</div><div class="ttdoc">Constructs an empty path view. </div><div class="ttdef"><b>Definition:</b> path_view.hpp:996</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -500,7 +502,7 @@ std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operato
<p>If the source encodings of the two path views are compatible, a lexicographical comparison is performed. If they are incompatible, either or both views are converted to the destination encoding using <code>c_str&lt;T, Delete, _internal_buffer_size&gt;</code>, and then a lexicographical comparison is performed.</p>
<p>This can, for obvious reasons, be expensive. It can also throw exceptions, as <code>c_str</code> does.</p>
<p>If the destination encoding is <code>byte</code>, <code>memcmp()</code> is used, and <code>c_str</code> is never invoked as the two sources are byte compared directly.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="l01320"></a><span class="lineno"> 1320</span>&#160; { <span class="keywordflow">return</span> compare&lt;T, Deleter, _internal_buffer_size&gt;(path_view_component(s)); }</div></div><!-- fragment -->
+<div class="fragment"><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; { <span class="keywordflow">return</span> compare&lt;T, Deleter, _internal_buffer_size&gt;(path_view_component(s)); }</div></div><!-- fragment -->
</div>
</div>
<a id="a1080207b46f1b48f0ee656995a506646"></a>
@@ -547,7 +549,7 @@ std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operato
<p>Number of characters, excluding zero terminating char, at buffer</p>
<p>See constructor for <code>path_view_component::c_str</code>.</p>
<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="l01326"></a><span class="lineno"> 1326</span>&#160; : <span class="keyword">public</span> path_view_component::c_str&lt;T, Deleter, _internal_buffer_size&gt;</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; {<span class="comment"></span></div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;<span class="comment"> //! Number of characters, excluding zero terminating char, at buffer</span></div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;<span class="comment"></span> <span class="keyword">using</span> _base = path_view_component::c_str&lt;T, Deleter, _internal_buffer_size&gt;;<span class="comment"></span></div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;<span class="comment"> /*! See constructor for `path_view_component::c_str`.</span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> U&gt;</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; c_str(<a class="code" href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">path_view</a> view, <span class="keywordtype">bool</span> no_zero_terminate, U &amp;&amp;allocate)</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; : _base(view._state, no_zero_terminate, static_cast&lt;U &amp;&amp;&gt;(allocate))</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; {</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; }<span class="comment"></span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;<span class="comment"> //! \overload</span></div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;<span class="comment"></span> c_str(<a class="code" href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">path_view</a> view, <span class="keywordtype">bool</span> no_zero_terminate = <span class="keyword">false</span>)</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; : _base(view._state, no_zero_terminate)</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; {</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; }</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; };</div><div class="ttc" id="classllfio__v2__xxx_1_1path__view_html_a91540ade852194b9507184cdcaed3339"><div class="ttname"><a href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">llfio_v2_xxx::path_view::path_view</a></div><div class="ttdeci">constexpr path_view()</div><div class="ttdoc">Constructs an empty path view. </div><div class="ttdef"><b>Definition:</b> path_view.hpp:997</div></div>
+<div class="fragment"><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; : <span class="keyword">public</span> path_view_component::c_str&lt;T, Deleter, _internal_buffer_size&gt;</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; {<span class="comment"></span></div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;<span class="comment"> //! Number of characters, excluding zero terminating char, at buffer</span></div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;<span class="comment"></span> <span class="keyword">using</span> _base = path_view_component::c_str&lt;T, Deleter, _internal_buffer_size&gt;;<span class="comment"></span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;<span class="comment"> /*! See constructor for `path_view_component::c_str`.</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> U&gt;</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; c_str(<a class="code" href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">path_view</a> view, <span class="keywordtype">bool</span> no_zero_terminate, U &amp;&amp;allocate)</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; : _base(view._state, no_zero_terminate, static_cast&lt;U &amp;&amp;&gt;(allocate))</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; {</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; }<span class="comment"></span></div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;<span class="comment"> //! \overload</span></div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;<span class="comment"></span> c_str(<a class="code" href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">path_view</a> view, <span class="keywordtype">bool</span> no_zero_terminate = <span class="keyword">false</span>)</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; : _base(view._state, no_zero_terminate)</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; {</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; }</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; };</div><div class="ttc" id="classllfio__v2__xxx_1_1path__view_html_a91540ade852194b9507184cdcaed3339"><div class="ttname"><a href="classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339">llfio_v2_xxx::path_view::path_view</a></div><div class="ttdeci">constexpr path_view()</div><div class="ttdoc">Constructs an empty path view. </div><div class="ttdef"><b>Definition:</b> path_view.hpp:996</div></div>
</div><!-- fragment -->
</div>
</div>
diff --git a/classllfio__v2__xxx_1_1path__view.js b/classllfio__v2__xxx_1_1path__view.js
index ef5ca684..d8c66a1b 100644
--- a/classllfio__v2__xxx_1_1path__view.js
+++ b/classllfio__v2__xxx_1_1path__view.js
@@ -18,6 +18,7 @@ var classllfio__v2__xxx_1_1path__view =
[ "path_view", "classllfio__v2__xxx_1_1path__view.html#a5f649112f30854859d95629a460dca23", null ],
[ "path_view", "classllfio__v2__xxx_1_1path__view.html#a83b86163124a03eadb509e3bb4bcce3e", null ],
[ "path_view", "classllfio__v2__xxx_1_1path__view.html#a4fb290145d390bd9e8cf3b5e2553c266", null ],
+ [ "_raw_data", "classllfio__v2__xxx_1_1path__view.html#a99db0dd434afa24ee6f2b6ae9287ecb2", null ],
[ "begin", "classllfio__v2__xxx_1_1path__view.html#ad732574572c44177bd661456a542f50a", null ],
[ "begin", "classllfio__v2__xxx_1_1path__view.html#a61cb7bbf03f090213d899ca28598b891", null ],
[ "cbegin", "classllfio__v2__xxx_1_1path__view.html#a8efb8be3b3f3b224680e9f10149bb2da", null ],
diff --git a/classllfio__v2__xxx_1_1path__view__component-members.html b/classllfio__v2__xxx_1_1path__view__component-members.html
index 2b67edb6..67651f15 100644
--- a/classllfio__v2__xxx_1_1path__view__component-members.html
+++ b/classllfio__v2__xxx_1_1path__view__component-members.html
@@ -91,34 +91,35 @@ $(document).ready(function(){initNavTree('classllfio__v2__xxx_1_1path__view__com
<tr bgcolor="#f0f0f0"><td class="entry"><b>_char16str</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>_char8str</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>_charstr</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>_wcharstr</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a7663cb908516be3f8bf17b6826da186a">byte</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>c_str</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>char16_t</b> typedef (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>contains_glob</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a7b52fa10c4359dcc25aed43be0be8a91">default_internal_buffer_size</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a467256884725db92974c8a5a2c786bc2">empty</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a2d62abddb51d080a8c2e42998bc6fb58">extension</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a411e9c36a49bd37d596ab34f99b656fd">is_source_acceptable</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a3c5feb7fca596c44418f89c9e60b8165">is_source_chartype_acceptable</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#abec4610490eafa45921d1f8b0eaa7591">LLFIO_TEMPLATE</a>(class T=typename filesystem::path::value_type, class Deleter=std::default_delete&lt; T[]&gt;, size_t _internal_buffer_size=default_internal_buffer_size) LLFIO_TREQUIRES(LLFIO_TPRED(is_source_acceptable&lt; T &gt;)) const expr int compare(path_view_component p) const</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a5f6999a46c792e260428497a722fc8ff">LLFIO_TEMPLATE</a>(class T=typename filesystem::path::value_type, class Deleter=std::default_delete&lt; T[]&gt;, size_t _internal_buffer_size=default_internal_buffer_size, class Char) LLFIO_TREQUIRES(LLFIO_TPRED(is_source_acceptable&lt; T &gt; &amp;&amp;is_source_acceptable&lt; Char &gt;)) const expr int compare(const Char *s) const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#aaf8f8d21319fb02bdb0442d1fea2c7c4">LLFIO_TEMPLATE</a>(class T=typename filesystem::path::value_type, class Deleter=std::default_delete&lt; T[]&gt;, size_t _internal_buffer_size=default_internal_buffer_size, class Char) LLFIO_TREQUIRES(LLFIO_TPRED(is_source_acceptable&lt; T &gt; &amp;&amp;is_source_chartype_acceptable&lt; Char &gt;)) const expr int compare(const basic_string_view&lt; Char &gt; s) const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#ac114eb6e2ed74625c8dc89c6499c05a1">LLFIO_TEMPLATE</a>(class T=typename filesystem::path::value_type, class Deleter=std::default_delete&lt; T[]&gt;, size_t _internal_buffer_size=default_internal_buffer_size) LLFIO_TREQUIRES(LLFIO_TPRED(is_source_acceptable&lt; T &gt;)) struct c_str</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#ae8f844fe50fd3a3ee3da24aee760e456">native_size</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>operator!=</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator&lt;&lt;</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const path_view_component &amp;)=default (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(path_view_component &amp;&amp;)=default (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>operator==</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#ac367f2c429245c567448780511f24c0d">path</a>() const</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>path_view</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>path_view_component</b>(const path_view_component &amp;)=default (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>path_view_component</b>(path_view_component &amp;&amp;)=default (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a7c7def30502a37e61b83836e52a0a40b">preferred_separator</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
- <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a4a0bfc3e06986b6287a22fdc97799181">stem</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a247fba2fecd5b850a17b0994f5913b4f">swap</a>(path_view_component &amp;o) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>~path_view_component</b>()=default (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>_raw_data</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>_wcharstr</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a7663cb908516be3f8bf17b6826da186a">byte</a> typedef</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>c_str</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>char16_t</b> typedef (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>contains_glob</b>() const noexcept (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a7b52fa10c4359dcc25aed43be0be8a91">default_internal_buffer_size</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a467256884725db92974c8a5a2c786bc2">empty</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a2d62abddb51d080a8c2e42998bc6fb58">extension</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a411e9c36a49bd37d596ab34f99b656fd">is_source_acceptable</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a3c5feb7fca596c44418f89c9e60b8165">is_source_chartype_acceptable</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#abec4610490eafa45921d1f8b0eaa7591">LLFIO_TEMPLATE</a>(class T=typename filesystem::path::value_type, class Deleter=std::default_delete&lt; T[]&gt;, size_t _internal_buffer_size=default_internal_buffer_size) LLFIO_TREQUIRES(LLFIO_TPRED(is_source_acceptable&lt; T &gt;)) const expr int compare(path_view_component p) const</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a5f6999a46c792e260428497a722fc8ff">LLFIO_TEMPLATE</a>(class T=typename filesystem::path::value_type, class Deleter=std::default_delete&lt; T[]&gt;, size_t _internal_buffer_size=default_internal_buffer_size, class Char) LLFIO_TREQUIRES(LLFIO_TPRED(is_source_acceptable&lt; T &gt; &amp;&amp;is_source_acceptable&lt; Char &gt;)) const expr int compare(const Char *s) const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#aaf8f8d21319fb02bdb0442d1fea2c7c4">LLFIO_TEMPLATE</a>(class T=typename filesystem::path::value_type, class Deleter=std::default_delete&lt; T[]&gt;, size_t _internal_buffer_size=default_internal_buffer_size, class Char) LLFIO_TREQUIRES(LLFIO_TPRED(is_source_acceptable&lt; T &gt; &amp;&amp;is_source_chartype_acceptable&lt; Char &gt;)) const expr int compare(const basic_string_view&lt; Char &gt; s) const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#ac114eb6e2ed74625c8dc89c6499c05a1">LLFIO_TEMPLATE</a>(class T=typename filesystem::path::value_type, class Deleter=std::default_delete&lt; T[]&gt;, size_t _internal_buffer_size=default_internal_buffer_size) LLFIO_TREQUIRES(LLFIO_TPRED(is_source_acceptable&lt; T &gt;)) struct c_str</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#ae8f844fe50fd3a3ee3da24aee760e456">native_size</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator!=</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator&lt;&lt;</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const path_view_component &amp;)=default (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(path_view_component &amp;&amp;)=default (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator==</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#ac367f2c429245c567448780511f24c0d">path</a>() const</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>path_view</b> (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>path_view_component</b>(const path_view_component &amp;)=default (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>path_view_component</b>(path_view_component &amp;&amp;)=default (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a7c7def30502a37e61b83836e52a0a40b">preferred_separator</a></td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a4a0bfc3e06986b6287a22fdc97799181">stem</a>() const noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a247fba2fecd5b850a17b0994f5913b4f">swap</a>(path_view_component &amp;o) noexcept</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~path_view_component</b>()=default (defined in <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a>)</td><td class="entry"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">llfio_v2_xxx::path_view_component</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
diff --git a/classllfio__v2__xxx_1_1path__view__component.html b/classllfio__v2__xxx_1_1path__view__component.html
index 5460bf35..1be42081 100644
--- a/classllfio__v2__xxx_1_1path__view__component.html
+++ b/classllfio__v2__xxx_1_1path__view__component.html
@@ -120,6 +120,9 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:aac07b365ff507ce5493fdc608d48329c"><td class="memItemLeft" align="right" valign="top"><a id="aac07b365ff507ce5493fdc608d48329c"></a>
<a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">path_view_component</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="classllfio__v2__xxx_1_1path__view__component.html">path_view_component</a> &amp;&amp;)=default</td></tr>
<tr class="separator:aac07b365ff507ce5493fdc608d48329c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a026f3fd0f948212028182d1b501dffbb"><td class="memItemLeft" align="right" valign="top"><a id="a026f3fd0f948212028182d1b501dffbb"></a>
+const <a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a7663cb908516be3f8bf17b6826da186a">byte</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>_raw_data</b> () const noexcept</td></tr>
+<tr class="separator:a026f3fd0f948212028182d1b501dffbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a467256884725db92974c8a5a2c786bc2"><td class="memItemLeft" align="right" valign="top"><a id="a467256884725db92974c8a5a2c786bc2"></a>
LLFIO_NODISCARD constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1path__view__component.html#a467256884725db92974c8a5a2c786bc2">empty</a> () const noexcept</td></tr>
<tr class="memdesc:a467256884725db92974c8a5a2c786bc2"><td class="mdescLeft">&#160;</td><td class="mdescRight">True if empty. <br /></td></tr>
@@ -238,7 +241,7 @@ std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operato
<p>If the source encodings of the two path views are compatible, a lexicographical comparison is performed. If they are incompatible, either or both views are converted to the destination encoding using <code>c_str&lt;T, Delete, _internal_buffer_size&gt;</code>, and then a lexicographical comparison is performed.</p>
<p>This can, for obvious reasons, be expensive. It can also throw exceptions, as <code>c_str</code> does.</p>
<p>If the destination encoding is <code>byte</code>, <code>memcmp()</code> is used, and <code>c_str</code> is never invoked as the two sources are byte compared directly. </p>
-<div class="fragment"><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> _invoke([&amp;p](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;<span class="keyword">self</span>) { <span class="keywordflow">return</span> p._invoke([&amp;<span class="keyword">self</span>](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;other) { <span class="keywordflow">return</span> _compare&lt;T, Deleter, _internal_buffer_size&gt;(<span class="keyword">self</span>, other); }); });</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; }</div></div><!-- fragment -->
+<div class="fragment"><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; <span class="keywordflow">return</span> _invoke([&amp;p](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;<span class="keyword">self</span>) { <span class="keywordflow">return</span> p._invoke([&amp;<span class="keyword">self</span>](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;other) { <span class="keywordflow">return</span> _compare&lt;T, Deleter, _internal_buffer_size&gt;(<span class="keyword">self</span>, other); }); });</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div></div><!-- fragment -->
</div>
</div>
<a id="a5f6999a46c792e260428497a722fc8ff"></a>
@@ -287,7 +290,7 @@ std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operato
</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="l00452"></a><span class="lineno"> 452</span>&#160; { <span class="keywordflow">return</span> compare&lt;T, Deleter, _internal_buffer_size&gt;(path_view_component(s, detail::constexpr_strlen(s), <span class="keyword">true</span>)); }</div></div><!-- fragment -->
+<div class="fragment"><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; { <span class="keywordflow">return</span> compare&lt;T, Deleter, _internal_buffer_size&gt;(path_view_component(s, detail::constexpr_strlen(s), <span class="keyword">true</span>)); }</div></div><!-- fragment -->
</div>
</div>
<a id="aaf8f8d21319fb02bdb0442d1fea2c7c4"></a>
@@ -336,7 +339,7 @@ std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operato
</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="l00456"></a><span class="lineno"> 456</span>&#160; { <span class="keywordflow">return</span> compare&lt;T, Deleter, _internal_buffer_size&gt;(path_view_component(s)); }</div></div><!-- fragment -->
+<div class="fragment"><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; { <span class="keywordflow">return</span> compare&lt;T, Deleter, _internal_buffer_size&gt;(path_view_component(s)); }</div></div><!-- fragment -->
</div>
</div>
<a id="ac114eb6e2ed74625c8dc89c6499c05a1"></a>
@@ -404,7 +407,7 @@ std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operato
</dl>
<p>If an error occurs during any conversion from UTF-8 or UTF-16, an exception of <code>system_error(errc::illegal_byte_sequence)</code> is thrown. This is because if you tell <code>path_view</code> that its source is UTF-8 or UTF-16, then that must be <b>valid</b> UTF. If you wish to supply UTF-invalid paths (which are legal on most filesystems), use native narrow or wide encoded source, or binary.</p>
<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="l00482"></a><span class="lineno"> 482</span>&#160; {</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; static_assert(is_source_acceptable&lt;T&gt;, <span class="stringliteral">&quot;path_view_component::c_str&lt;T&gt; does not have a T which is one of byte, char, wchar_t, char8_t nor char16_t&quot;</span>);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="comment"> //! Type of the value type</span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="comment"></span> <span class="keyword">using</span> value_type = T;<span class="comment"></span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="comment"> //! Type of the deleter</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="comment"></span> <span class="keyword">using</span> deleter_type = Deleter;<span class="comment"></span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment"> //! The size of the internal temporary buffer</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="comment"></span> <span class="keyword">static</span> constexpr <span class="keywordtype">size_t</span> internal_buffer_size = (_internal_buffer_size == 0) ? 1 : _internal_buffer_size;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;<span class="comment"> //! Number of characters, excluding zero terminating char, at buffer</span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="comment"></span> <span class="keywordtype">size_t</span> <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>{0};<span class="comment"></span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="comment"> //! Pointer to the possibly-converted path</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<span class="comment"></span> <span class="keyword">const</span> value_type *buffer{<span class="keyword">nullptr</span>};</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> U, <span class="keyword">class</span> source_type&gt; <span class="keywordtype">void</span> _make_passthrough(path_view_component <span class="comment">/*unused*/</span>, <span class="keywordtype">bool</span> <span class="comment">/*unused*/</span>, U &amp; <span class="comment">/*unused*/</span>, <span class="keyword">const</span> source_type * <span class="comment">/*unused*/</span>) {}</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> U&gt; <span class="keywordtype">void</span> _make_passthrough(path_view_component view, <span class="keywordtype">bool</span> no_zero_terminate, U &amp;allocate, <span class="keyword">const</span> value_type *source)</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; {</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = view._length;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">if</span>(no_zero_terminate || view._zero_terminated)</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; {</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; buffer = source;</div><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">else</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="comment">// Source must be not zero terminated, and zero terminated is required</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> required_length = view._length + view._zero_terminated;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> required_bytes = required_length * <span class="keyword">sizeof</span>(value_type);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> _buffer_bytes = <span class="keyword">sizeof</span>(_buffer);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;<span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">if</span>(required_bytes &gt; 65535)</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; LLFIO_LOG_FATAL(<span class="keyword">nullptr</span>, <span class="stringliteral">&quot;Paths exceeding 64Kb are impossible on Microsoft Windows&quot;</span>);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; abort();</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; }</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">if</span>(required_bytes &lt;= _buffer_bytes)</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">// Use the internal buffer</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; memcpy(_buffer, source, required_bytes);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; _buffer[required_length] = 0;</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; buffer = _buffer;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; {</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keyword">auto</span> *buffer_ = allocate(required_length);</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">nullptr</span> == buffer_)</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = 0;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; {</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; _call_deleter = <span class="keyword">true</span>;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; memcpy(buffer_, source, required_bytes);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; buffer_[required_length] = 0;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; buffer = buffer_;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; }</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; }</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; }</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; }</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="preprocessor">#pragma warning(push)</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;<span class="preprocessor">#pragma warning(disable : 4127) // conditional expression is constant</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;<span class="comment"> /*! Construct, performing any reencoding or memory copying required.</span></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;<span class="comment"> \param view The path component view to use as source.</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;<span class="comment"> \param no_zero_terminate Set to true if zero termination is not required.</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;<span class="comment"> \param allocate A callable with prototype `value_type *(size_t length)` which</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="comment"> is defaulted to `return new value_type[length];`. You can return `nullptr` if</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;<span class="comment"> you wish, the consumer of `c_str` will see a `buffer` set to `nullptr`.</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;<span class="comment"> If an error occurs during any conversion from UTF-8 or UTF-16, an exception of</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="comment"> `system_error(errc::illegal_byte_sequence)` is thrown.</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;<span class="comment"> This is because if you tell `path_view` that its source is UTF-8 or UTF-16, then that</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;<span class="comment"> must be **valid** UTF. If you wish to supply UTF-invalid paths (which are legal</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="comment"> on most filesystems), use native narrow or wide encoded source, or binary.</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> U&gt; c_str(path_view_component view, <span class="keywordtype">bool</span> no_zero_terminate, U &amp;&amp;allocate)</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">if</span>(0 == view._length)</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; {</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; _buffer[0] = 0;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; buffer = _buffer;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = 0;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; }</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, byte&gt;::value || view._passthrough)</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = view._length;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; buffer = (<span class="keyword">const</span> value_type *) view._bytestr;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, char&gt;::value &amp;&amp; view._char)</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._charstr);</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; }</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, wchar_t&gt;::value &amp;&amp; view._wchar)</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; {</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._wcharstr);</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; }</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, char8_t&gt;::value &amp;&amp; view._utf8)</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._char8str);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; }</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, char16_t&gt;::value &amp;&amp; view._utf16)</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; {</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._char16str);</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; }</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160;<span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="comment">// On Windows, consider char16_t input equivalent to wchar_t</span></div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, wchar_t&gt;::value &amp;&amp; view._utf16)</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; {</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._wcharstr);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="comment">// On POSIX, consider char8_t input equivalent to char</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, char&gt;::value &amp;&amp; view._utf8)</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; {</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._charstr);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; }</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="comment">// A reencode is required. We keep this out of header because reencoding</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">// requires dragging in lots of system header files.</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordtype">size_t</span> required_length = 0;</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; value_type *end = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="keywordflow">if</span>(view._passthrough)</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; {</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._bytestr, view._length);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; }</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._char)</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._charstr, view._length);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._wchar)</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; {</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._wcharstr, view._length);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; }</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._utf8)</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._char8str, view._length);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; }</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._utf16)</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; {</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._char16str, view._length);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; }</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; LLFIO_LOG_FATAL(<span class="keyword">nullptr</span>, <span class="stringliteral">&quot;path_view_component::cstr somehow sees no state!&quot;</span>);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; abort();</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordflow">if</span>(0 == required_length)</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; {</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="comment">// The internal buffer was sufficient.</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; buffer = _buffer;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = end - _buffer;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; }</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="comment">// The internal buffer is too small. Fall back to dynamic allocation. This may throw.</span></div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keyword">auto</span> *allocated_buffer = allocate(required_length);</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">nullptr</span> == allocated_buffer)</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = 0;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; _call_deleter = <span class="keyword">true</span>;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; memcpy(allocated_buffer, _buffer, end - _buffer);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; required_length -= (end - _buffer);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; end = allocated_buffer + (end - _buffer);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">if</span>(view._passthrough)</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; {</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; end = detail::reencode_path_to(<a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>, end, required_length, view._bytestr, view._length);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; }</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._char)</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; {</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; end = detail::reencode_path_to(<a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>, end, required_length, view._charstr, view._length);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; }</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._wchar)</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; {</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; end = detail::reencode_path_to(<a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>, end, required_length, view._wcharstr, view._length);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._utf8)</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; {</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; end = detail::reencode_path_to(<a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>, end, required_length, view._char8str, view._length);</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; }</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._utf16)</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; end = detail::reencode_path_to(<a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>, end, required_length, view._char16str, view._length);</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; }</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; {</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; LLFIO_LOG_FATAL(<span class="keyword">nullptr</span>, <span class="stringliteral">&quot;path_view_component::cstr somehow sees no state!&quot;</span>);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; abort();</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; }</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; buffer = allocated_buffer;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = end - buffer;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; }</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160;<span class="preprocessor">#pragma warning(pop)</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;<span class="comment"> //! \overload</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;<span class="comment"></span> c_str(path_view_component view, <span class="keywordtype">bool</span> no_zero_terminate = <span class="keyword">false</span>)</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; : c_str(view, no_zero_terminate, [](size_t <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>) { <span class="keywordflow">return</span> <span class="keyword">new</span> value_type[<a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>]; })</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; {</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; }</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; ~c_str() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; c_str(<span class="keyword">const</span> c_str &amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; c_str(c_str &amp;&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; c_str &amp;operator=(<span class="keyword">const</span> c_str &amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; c_str &amp;operator=(c_str &amp;&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keywordtype">bool</span> _call_deleter{<span class="keyword">false</span>};</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; Deleter _deleter;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="comment">// MAKE SURE this is the final item in storage, the compiler will elide the storage</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="comment">// under optimisation if it can prove it is never used.</span></div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; value_type _buffer[internal_buffer_size]{};</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; };</div><div class="ttc" id="namespacellfio__v2__xxx_html_aa3676f0dd69f4b54cf7e14e3f86d32b9"><div class="ttname"><a href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">llfio_v2_xxx::length</a></div><div class="ttdeci">result&lt; section_handle::extent_type &gt; length(const section_handle &amp;self) noexcept</div><div class="ttdoc">Return the current maximum permitted extent of the memory section. </div><div class="ttdef"><b>Definition:</b> map_handle.hpp:708</div></div>
+<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; static_assert(is_source_acceptable&lt;T&gt;, <span class="stringliteral">&quot;path_view_component::c_str&lt;T&gt; does not have a T which is one of byte, char, wchar_t, char8_t nor char16_t&quot;</span>);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="comment"> //! Type of the value type</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="comment"></span> <span class="keyword">using</span> value_type = T;<span class="comment"></span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment"> //! Type of the deleter</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="comment"></span> <span class="keyword">using</span> deleter_type = Deleter;<span class="comment"></span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="comment"> //! The size of the internal temporary buffer</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;<span class="comment"></span> <span class="keyword">static</span> constexpr <span class="keywordtype">size_t</span> internal_buffer_size = (_internal_buffer_size == 0) ? 1 : _internal_buffer_size;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="comment"> //! Number of characters, excluding zero terminating char, at buffer</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<span class="comment"></span> <span class="keywordtype">size_t</span> <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>{0};<span class="comment"></span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="comment"> //! Pointer to the possibly-converted path</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;<span class="comment"></span> <span class="keyword">const</span> value_type *buffer{<span class="keyword">nullptr</span>};</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> U, <span class="keyword">class</span> source_type&gt; <span class="keywordtype">void</span> _make_passthrough(path_view_component <span class="comment">/*unused*/</span>, <span class="keywordtype">bool</span> <span class="comment">/*unused*/</span>, U &amp; <span class="comment">/*unused*/</span>, <span class="keyword">const</span> source_type * <span class="comment">/*unused*/</span>) {}</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> U&gt; <span class="keywordtype">void</span> _make_passthrough(path_view_component view, <span class="keywordtype">bool</span> no_zero_terminate, U &amp;allocate, <span class="keyword">const</span> value_type *source)</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; {</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = view._length;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">if</span>(no_zero_terminate || view._zero_terminated)</div><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; buffer = source;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="comment">// Source must be not zero terminated, and zero terminated is required</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> required_length = view._length + view._zero_terminated;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> required_bytes = required_length * <span class="keyword">sizeof</span>(value_type);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> _buffer_bytes = <span class="keyword">sizeof</span>(_buffer);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">if</span>(required_bytes &gt; 65535)</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; {</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; LLFIO_LOG_FATAL(<span class="keyword">nullptr</span>, <span class="stringliteral">&quot;Paths exceeding 64Kb are impossible on Microsoft Windows&quot;</span>);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; abort();</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">if</span>(required_bytes &lt;= _buffer_bytes)</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">// Use the internal buffer</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; memcpy(_buffer, source, required_bytes);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; _buffer[required_length] = 0;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; buffer = _buffer;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; {</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keyword">auto</span> *buffer_ = allocate(required_length);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">nullptr</span> == buffer_)</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; {</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = 0;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; }</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; {</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; _call_deleter = <span class="keyword">true</span>;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; memcpy(buffer_, source, required_bytes);</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; buffer_[required_length] = 0;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; buffer = buffer_;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; }</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; }</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; }</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;<span class="preprocessor">#pragma warning(push)</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;<span class="preprocessor">#pragma warning(disable : 4127) // conditional expression is constant</span></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;<span class="comment"> /*! Construct, performing any reencoding or memory copying required.</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;<span class="comment"> \param view The path component view to use as source.</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="comment"> \param no_zero_terminate Set to true if zero termination is not required.</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;<span class="comment"> \param allocate A callable with prototype `value_type *(size_t length)` which</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;<span class="comment"> is defaulted to `return new value_type[length];`. You can return `nullptr` if</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;<span class="comment"> you wish, the consumer of `c_str` will see a `buffer` set to `nullptr`.</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;<span class="comment"> If an error occurs during any conversion from UTF-8 or UTF-16, an exception of</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;<span class="comment"> `system_error(errc::illegal_byte_sequence)` is thrown.</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="comment"> This is because if you tell `path_view` that its source is UTF-8 or UTF-16, then that</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;<span class="comment"> must be **valid** UTF. If you wish to supply UTF-invalid paths (which are legal</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;<span class="comment"> on most filesystems), use native narrow or wide encoded source, or binary.</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> U&gt; c_str(path_view_component view, <span class="keywordtype">bool</span> no_zero_terminate, U &amp;&amp;allocate)</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; {</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">if</span>(0 == view._length)</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; _buffer[0] = 0;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; buffer = _buffer;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = 0;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; }</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, byte&gt;::value || view._passthrough)</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; {</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = view._length;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; buffer = (<span class="keyword">const</span> value_type *) view._bytestr;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, char&gt;::value &amp;&amp; view._char)</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; {</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._charstr);</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; }</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, wchar_t&gt;::value &amp;&amp; view._wchar)</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; {</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._wcharstr);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; }</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, char8_t&gt;::value &amp;&amp; view._utf8)</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; {</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._char8str);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, char16_t&gt;::value &amp;&amp; view._utf16)</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; {</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._char16str);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;<span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="comment">// On Windows, consider char16_t input equivalent to wchar_t</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, wchar_t&gt;::value &amp;&amp; view._utf16)</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; {</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._wcharstr);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; }</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="comment">// On POSIX, consider char8_t input equivalent to char</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keywordflow">if</span>(std::is_same&lt;T, char&gt;::value &amp;&amp; view._utf8)</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; {</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._charstr);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; }</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="comment">// A reencode is required. We keep this out of header because reencoding</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="comment">// requires dragging in lots of system header files.</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="keywordtype">size_t</span> required_length = 0;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; value_type *end = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">if</span>(view._passthrough)</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; {</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._bytestr, view._length);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; }</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._char)</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; {</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._charstr, view._length);</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._wchar)</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; {</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._wcharstr, view._length);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._utf8)</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; {</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._char8str, view._length);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._utf16)</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; {</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._char16str, view._length);</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; }</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; LLFIO_LOG_FATAL(<span class="keyword">nullptr</span>, <span class="stringliteral">&quot;path_view_component::cstr somehow sees no state!&quot;</span>);</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; abort();</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; }</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keywordflow">if</span>(0 == required_length)</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; {</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="comment">// The internal buffer was sufficient.</span></div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; buffer = _buffer;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = end - _buffer;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; }</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="comment">// The internal buffer is too small. Fall back to dynamic allocation. This may throw.</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keyword">auto</span> *allocated_buffer = allocate(required_length);</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">nullptr</span> == allocated_buffer)</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; {</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = 0;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; }</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; _call_deleter = <span class="keyword">true</span>;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; memcpy(allocated_buffer, _buffer, end - _buffer);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; required_length -= (end - _buffer);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; end = allocated_buffer + (end - _buffer);</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">if</span>(view._passthrough)</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; {</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; end = detail::reencode_path_to(<a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>, end, required_length, view._bytestr, view._length);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._char)</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; end = detail::reencode_path_to(<a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>, end, required_length, view._charstr, view._length);</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._wchar)</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; {</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; end = detail::reencode_path_to(<a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>, end, required_length, view._wcharstr, view._length);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._utf8)</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; {</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; end = detail::reencode_path_to(<a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>, end, required_length, view._char8str, view._length);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._utf16)</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; end = detail::reencode_path_to(<a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>, end, required_length, view._char16str, view._length);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; }</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; LLFIO_LOG_FATAL(<span class="keyword">nullptr</span>, <span class="stringliteral">&quot;path_view_component::cstr somehow sees no state!&quot;</span>);</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; abort();</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; buffer = allocated_buffer;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = end - buffer;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; }</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;<span class="preprocessor">#pragma warning(pop)</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;<span class="comment"> //! \overload</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;<span class="comment"></span> c_str(path_view_component view, <span class="keywordtype">bool</span> no_zero_terminate = <span class="keyword">false</span>)</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; : c_str(view, no_zero_terminate, [](size_t <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>) { <span class="keywordflow">return</span> <span class="keyword">new</span> value_type[<a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a>]; })</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; }</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; ~c_str() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; c_str(<span class="keyword">const</span> c_str &amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; c_str(c_str &amp;&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; c_str &amp;operator=(<span class="keyword">const</span> c_str &amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; c_str &amp;operator=(c_str &amp;&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordtype">bool</span> _call_deleter{<span class="keyword">false</span>};</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; Deleter _deleter;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="comment">// MAKE SURE this is the final item in storage, the compiler will elide the storage</span></div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="comment">// under optimisation if it can prove it is never used.</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; value_type _buffer[internal_buffer_size]{};</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; };</div><div class="ttc" id="namespacellfio__v2__xxx_html_aa3676f0dd69f4b54cf7e14e3f86d32b9"><div class="ttname"><a href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">llfio_v2_xxx::length</a></div><div class="ttdeci">result&lt; section_handle::extent_type &gt; length(const section_handle &amp;self) noexcept</div><div class="ttdoc">Return the current maximum permitted extent of the memory section. </div><div class="ttdef"><b>Definition:</b> map_handle.hpp:708</div></div>
</div><!-- fragment -->
</div>
</div>
diff --git a/classllfio__v2__xxx_1_1path__view__component.js b/classllfio__v2__xxx_1_1path__view__component.js
index 13052bd0..aa1dc0a1 100644
--- a/classllfio__v2__xxx_1_1path__view__component.js
+++ b/classllfio__v2__xxx_1_1path__view__component.js
@@ -5,6 +5,7 @@ var classllfio__v2__xxx_1_1path__view__component =
[ "path_view_component", "classllfio__v2__xxx_1_1path__view__component.html#a72f7bc6b8dd06f719f83732bc91f36e0", null ],
[ "path_view_component", "classllfio__v2__xxx_1_1path__view__component.html#a7dfa033bda230ae9a1fdd60a17fb7880", null ],
[ "~path_view_component", "classllfio__v2__xxx_1_1path__view__component.html#a93aef9d3a7c37537ec71bd788d0f7272", null ],
+ [ "_raw_data", "classllfio__v2__xxx_1_1path__view__component.html#a026f3fd0f948212028182d1b501dffbb", null ],
[ "contains_glob", "classllfio__v2__xxx_1_1path__view__component.html#aea489beba43bb7bb9fa31b5bfd23b0cb", null ],
[ "empty", "classllfio__v2__xxx_1_1path__view__component.html#a467256884725db92974c8a5a2c786bc2", null ],
[ "extension", "classllfio__v2__xxx_1_1path__view__component.html#a2d62abddb51d080a8c2e42998bc6fb58", null ],
diff --git a/navtreedata.js b/navtreedata.js
index 5e893b6e..391d8e8d 100644
--- a/navtreedata.js
+++ b/navtreedata.js
@@ -43,10 +43,10 @@ var NAVTREEINDEX =
"classllfio__v2__xxx_1_1file__handle.html#adb03b26fe4085d50ea650f6d6a6aee2a",
"classllfio__v2__xxx_1_1map__handle.html#a751e912d8dab755ea969a418c1d544eb",
"classllfio__v2__xxx_1_1path__view.html#a345b745ec73e1a9615a420e9295a0257",
-"config_8hpp.html#a153d3be235debcda8578952291884b74",
-"namespacemembers.html",
-"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex_1_1entity__type.html#a7ad77fdbebd5f1ec023e4324797f3716",
-"structllfio__v2__xxx_1_1statfs__t.html#ac7bedb646a6855541633e7bb7232b5e0"
+"config_8hpp.html",
+"namespacellfio__v2__xxx_1_1utils.html",
+"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex_1_1entity__type.html#a20d7ec8c41e328ad9d8dc07564b9e191",
+"structllfio__v2__xxx_1_1statfs__t.html#aa8b39815508e9252da673c7e18666cd7"
];
var SYNCONMSG = 'click to disable panel synchronisation';
diff --git a/navtreeindex4.js b/navtreeindex4.js
index bfed524c..d5715735 100644
--- a/navtreeindex4.js
+++ b/navtreeindex4.js
@@ -238,16 +238,16 @@ var NAVTREEINDEX4 =
"classllfio__v2__xxx_1_1path__handle.html#af00ba815654b5bfd399deec7d87ceaea":[4,0,2,32,7],
"classllfio__v2__xxx_1_1path__handle.html#affb091ded80ffde7c0c3854e2abc52fd":[4,0,2,32,45],
"classllfio__v2__xxx_1_1path__view.html":[4,0,2,34],
-"classllfio__v2__xxx_1_1path__view.html#a049a6d80a473b5808706863dfd23888d":[4,0,2,34,58],
-"classllfio__v2__xxx_1_1path__view.html#a0d5e676b565090269032a91908a8c0bf":[4,0,2,34,38],
+"classllfio__v2__xxx_1_1path__view.html#a049a6d80a473b5808706863dfd23888d":[4,0,2,34,59],
"classllfio__v2__xxx_1_1path__view.html#a0d5e676b565090269032a91908a8c0bf":[4,0,2,34,39],
"classllfio__v2__xxx_1_1path__view.html#a0d5e676b565090269032a91908a8c0bf":[4,0,2,34,40],
-"classllfio__v2__xxx_1_1path__view.html#a1080207b46f1b48f0ee656995a506646":[4,0,2,34,42],
-"classllfio__v2__xxx_1_1path__view.html#a1712388490311a193a7e9be4df081400":[4,0,2,34,50],
+"classllfio__v2__xxx_1_1path__view.html#a0d5e676b565090269032a91908a8c0bf":[4,0,2,34,41],
+"classllfio__v2__xxx_1_1path__view.html#a1080207b46f1b48f0ee656995a506646":[4,0,2,34,43],
+"classllfio__v2__xxx_1_1path__view.html#a1712388490311a193a7e9be4df081400":[4,0,2,34,51],
"classllfio__v2__xxx_1_1path__view.html#a1aaf2407fed87b3b4c077e71495039ca":[4,0,2,34,0],
"classllfio__v2__xxx_1_1path__view.html#a1b128bc55c1c093b9b46de07b7c1ced7":[4,0,2,34,9],
-"classllfio__v2__xxx_1_1path__view.html#a2265f98040ccff9b1707326d4984ba4e":[4,0,2,34,43],
-"classllfio__v2__xxx_1_1path__view.html#a257d31cbb37fc019033bab262d01d50e":[4,0,2,34,29],
-"classllfio__v2__xxx_1_1path__view.html#a266f7052b687b4ba422c4cbcd0b2f453":[4,0,2,34,24],
-"classllfio__v2__xxx_1_1path__view.html#a2711832d81f40800e9d3915b9c37ff4e":[4,0,2,34,25]
+"classllfio__v2__xxx_1_1path__view.html#a2265f98040ccff9b1707326d4984ba4e":[4,0,2,34,44],
+"classllfio__v2__xxx_1_1path__view.html#a257d31cbb37fc019033bab262d01d50e":[4,0,2,34,30],
+"classllfio__v2__xxx_1_1path__view.html#a266f7052b687b4ba422c4cbcd0b2f453":[4,0,2,34,25],
+"classllfio__v2__xxx_1_1path__view.html#a2711832d81f40800e9d3915b9c37ff4e":[4,0,2,34,26]
};
diff --git a/navtreeindex5.js b/navtreeindex5.js
index 28bd18b6..ce21b0e3 100644
--- a/navtreeindex5.js
+++ b/navtreeindex5.js
@@ -1,81 +1,83 @@
var NAVTREEINDEX5 =
{
-"classllfio__v2__xxx_1_1path__view.html#a345b745ec73e1a9615a420e9295a0257":[4,0,2,34,34],
-"classllfio__v2__xxx_1_1path__view.html#a35074d82517e50c28aa99f4a13e8c501":[4,0,2,34,23],
-"classllfio__v2__xxx_1_1path__view.html#a3572b45e9a180899d0c5eac7605cc562":[4,0,2,34,46],
-"classllfio__v2__xxx_1_1path__view.html#a37beaa71c1df79c40133a0548e8d0042":[4,0,2,34,21],
+"classllfio__v2__xxx_1_1path__view.html#a345b745ec73e1a9615a420e9295a0257":[4,0,2,34,35],
+"classllfio__v2__xxx_1_1path__view.html#a35074d82517e50c28aa99f4a13e8c501":[4,0,2,34,24],
+"classllfio__v2__xxx_1_1path__view.html#a3572b45e9a180899d0c5eac7605cc562":[4,0,2,34,47],
+"classllfio__v2__xxx_1_1path__view.html#a37beaa71c1df79c40133a0548e8d0042":[4,0,2,34,22],
"classllfio__v2__xxx_1_1path__view.html#a38729f67ca5ce1801b5cf951dcd71a28":[4,0,2,34,13],
-"classllfio__v2__xxx_1_1path__view.html#a3cfdc7d5b0557c4f5d1c7f7ca9b0a76f":[4,0,2,34,45],
-"classllfio__v2__xxx_1_1path__view.html#a4578d185306681fe2bc7996b53396d0f":[4,0,2,34,28],
+"classllfio__v2__xxx_1_1path__view.html#a3cfdc7d5b0557c4f5d1c7f7ca9b0a76f":[4,0,2,34,46],
+"classllfio__v2__xxx_1_1path__view.html#a4578d185306681fe2bc7996b53396d0f":[4,0,2,34,29],
"classllfio__v2__xxx_1_1path__view.html#a4d90bae7abb2aa764d6dbd36ddbaa9ba":[4,0,2,34,5],
"classllfio__v2__xxx_1_1path__view.html#a4fb290145d390bd9e8cf3b5e2553c266":[4,0,2,34,17],
-"classllfio__v2__xxx_1_1path__view.html#a512962b9588d3d4d15f366ae3cb09d34":[4,0,2,34,35],
-"classllfio__v2__xxx_1_1path__view.html#a565624fc24e6a6d57d38d0471e91cd84":[4,0,2,34,57],
-"classllfio__v2__xxx_1_1path__view.html#a57047ecaa75f039c61b6bbeb5b5c33af":[4,0,2,34,51],
-"classllfio__v2__xxx_1_1path__view.html#a5dde24635b2a5ab43e3622fefb2c656a":[4,0,2,34,52],
+"classllfio__v2__xxx_1_1path__view.html#a512962b9588d3d4d15f366ae3cb09d34":[4,0,2,34,36],
+"classllfio__v2__xxx_1_1path__view.html#a565624fc24e6a6d57d38d0471e91cd84":[4,0,2,34,58],
+"classllfio__v2__xxx_1_1path__view.html#a57047ecaa75f039c61b6bbeb5b5c33af":[4,0,2,34,52],
+"classllfio__v2__xxx_1_1path__view.html#a5dde24635b2a5ab43e3622fefb2c656a":[4,0,2,34,53],
"classllfio__v2__xxx_1_1path__view.html#a5f649112f30854859d95629a460dca23":[4,0,2,34,15],
-"classllfio__v2__xxx_1_1path__view.html#a61cb7bbf03f090213d899ca28598b891":[4,0,2,34,19],
+"classllfio__v2__xxx_1_1path__view.html#a61cb7bbf03f090213d899ca28598b891":[4,0,2,34,20],
"classllfio__v2__xxx_1_1path__view.html#a711521276cb79a9483a27bf5692ab30d":[4,0,2,34,12],
"classllfio__v2__xxx_1_1path__view.html#a7bfb0a79057416a10f43cf25b4c6c57a":[4,0,2,34,4],
"classllfio__v2__xxx_1_1path__view.html#a83b86163124a03eadb509e3bb4bcce3e":[4,0,2,34,16],
-"classllfio__v2__xxx_1_1path__view.html#a8b6b10a1839b3c801e3a8298881d3032":[4,0,2,34,48],
-"classllfio__v2__xxx_1_1path__view.html#a8e0dbd474d2c668a0c33a01e7a5aafe8":[4,0,2,34,53],
-"classllfio__v2__xxx_1_1path__view.html#a8efb8be3b3f3b224680e9f10149bb2da":[4,0,2,34,20],
+"classllfio__v2__xxx_1_1path__view.html#a8b6b10a1839b3c801e3a8298881d3032":[4,0,2,34,49],
+"classllfio__v2__xxx_1_1path__view.html#a8e0dbd474d2c668a0c33a01e7a5aafe8":[4,0,2,34,54],
+"classllfio__v2__xxx_1_1path__view.html#a8efb8be3b3f3b224680e9f10149bb2da":[4,0,2,34,21],
"classllfio__v2__xxx_1_1path__view.html#a91540ade852194b9507184cdcaed3339":[4,0,2,34,8],
+"classllfio__v2__xxx_1_1path__view.html#a99db0dd434afa24ee6f2b6ae9287ecb2":[4,0,2,34,18],
"classllfio__v2__xxx_1_1path__view.html#a9bfb80a086ac6f7848639a818de9841a":[4,0,2,34,11],
-"classllfio__v2__xxx_1_1path__view.html#a9c02c1b6cc56f8221abea75a1e92a776":[4,0,2,34,55],
-"classllfio__v2__xxx_1_1path__view.html#a9fca33ec3b70cbe44bc3c6968fdc6376":[4,0,2,34,22],
-"classllfio__v2__xxx_1_1path__view.html#aa764357828bed56ec356828a090aff86":[4,0,2,34,36],
+"classllfio__v2__xxx_1_1path__view.html#a9c02c1b6cc56f8221abea75a1e92a776":[4,0,2,34,56],
+"classllfio__v2__xxx_1_1path__view.html#a9fca33ec3b70cbe44bc3c6968fdc6376":[4,0,2,34,23],
+"classllfio__v2__xxx_1_1path__view.html#aa764357828bed56ec356828a090aff86":[4,0,2,34,37],
"classllfio__v2__xxx_1_1path__view.html#ab423783d2a907166248f3074f3750045":[4,0,2,34,10],
"classllfio__v2__xxx_1_1path__view.html#ab5cf1494522b2422c9b6e645e5837deb":[4,0,2,34,14],
-"classllfio__v2__xxx_1_1path__view.html#ab7ae611a6aa7fed01b4447a3f5133c14":[4,0,2,34,54],
-"classllfio__v2__xxx_1_1path__view.html#ab86fa3a4456b6d298ec78e18e76f999d":[4,0,2,34,47],
-"classllfio__v2__xxx_1_1path__view.html#abccf122f0c4d537e0e41b87e86aeb61a":[4,0,2,34,27],
-"classllfio__v2__xxx_1_1path__view.html#ac33ed45573976ace5610de51d40de0ee":[4,0,2,34,49],
+"classllfio__v2__xxx_1_1path__view.html#ab7ae611a6aa7fed01b4447a3f5133c14":[4,0,2,34,55],
+"classllfio__v2__xxx_1_1path__view.html#ab86fa3a4456b6d298ec78e18e76f999d":[4,0,2,34,48],
+"classllfio__v2__xxx_1_1path__view.html#abccf122f0c4d537e0e41b87e86aeb61a":[4,0,2,34,28],
+"classllfio__v2__xxx_1_1path__view.html#ac33ed45573976ace5610de51d40de0ee":[4,0,2,34,50],
"classllfio__v2__xxx_1_1path__view.html#ac797abdc80bbd5f5b94ccb4e30117cbb":[4,0,2,34,6],
-"classllfio__v2__xxx_1_1path__view.html#acbd047c290ab91eaf1067036194f1e8f":[4,0,2,34,33],
-"classllfio__v2__xxx_1_1path__view.html#ad4ba638203e3fc1e6cbcef9b6c4ca956":[4,0,2,34,31],
+"classllfio__v2__xxx_1_1path__view.html#acbd047c290ab91eaf1067036194f1e8f":[4,0,2,34,34],
+"classllfio__v2__xxx_1_1path__view.html#ad4ba638203e3fc1e6cbcef9b6c4ca956":[4,0,2,34,32],
"classllfio__v2__xxx_1_1path__view.html#ad4e14fc71abee0765b06af857bd6a025":[4,0,2,34,3],
-"classllfio__v2__xxx_1_1path__view.html#ad732574572c44177bd661456a542f50a":[4,0,2,34,18],
-"classllfio__v2__xxx_1_1path__view.html#ad799e35ea5899df97ee570337376f8c1":[4,0,2,34,26],
-"classllfio__v2__xxx_1_1path__view.html#ad9c86fad629570418502318585ec9f2a":[4,0,2,34,44],
+"classllfio__v2__xxx_1_1path__view.html#ad732574572c44177bd661456a542f50a":[4,0,2,34,19],
+"classllfio__v2__xxx_1_1path__view.html#ad799e35ea5899df97ee570337376f8c1":[4,0,2,34,27],
+"classllfio__v2__xxx_1_1path__view.html#ad9c86fad629570418502318585ec9f2a":[4,0,2,34,45],
"classllfio__v2__xxx_1_1path__view.html#ae064112c51630be49c33bd51e4380cbd":[4,0,2,34,1],
"classllfio__v2__xxx_1_1path__view.html#ae1cf7b922e5bb83510b787b64479d304":[4,0,2,34,7],
-"classllfio__v2__xxx_1_1path__view.html#ae4f0f2678b636b59e50114a0bcdbc6ca":[4,0,2,34,30],
-"classllfio__v2__xxx_1_1path__view.html#ae9532a152294cc91153584a909210b30":[4,0,2,34,37],
-"classllfio__v2__xxx_1_1path__view.html#af155697bac67542927db4af277b4e01d":[4,0,2,34,56],
+"classllfio__v2__xxx_1_1path__view.html#ae4f0f2678b636b59e50114a0bcdbc6ca":[4,0,2,34,31],
+"classllfio__v2__xxx_1_1path__view.html#ae9532a152294cc91153584a909210b30":[4,0,2,34,38],
+"classllfio__v2__xxx_1_1path__view.html#af155697bac67542927db4af277b4e01d":[4,0,2,34,57],
"classllfio__v2__xxx_1_1path__view.html#af613a5a2995dd0fca21d914b59e4aff8":[4,0,2,34,2],
-"classllfio__v2__xxx_1_1path__view.html#afe52198fb027adfce8f86c5ae8e7a2ad":[4,0,2,34,32],
-"classllfio__v2__xxx_1_1path__view.html#afef4720fa17884bec1fd6eaa1d5faf56":[4,0,2,34,41],
+"classllfio__v2__xxx_1_1path__view.html#afe52198fb027adfce8f86c5ae8e7a2ad":[4,0,2,34,33],
+"classllfio__v2__xxx_1_1path__view.html#afef4720fa17884bec1fd6eaa1d5faf56":[4,0,2,34,42],
"classllfio__v2__xxx_1_1path__view__component.html":[4,0,2,35],
-"classllfio__v2__xxx_1_1path__view__component.html#a03281bf06f85b14622386bd87b9a947e":[4,0,2,35,27],
-"classllfio__v2__xxx_1_1path__view__component.html#a1531ffbbfb4d089a18f09809290190cc":[4,0,2,35,26],
-"classllfio__v2__xxx_1_1path__view__component.html#a18615f1a2c588d52c8d508d55ed3e7aa":[4,0,2,35,20],
-"classllfio__v2__xxx_1_1path__view__component.html#a247fba2fecd5b850a17b0994f5913b4f":[4,0,2,35,17],
-"classllfio__v2__xxx_1_1path__view__component.html#a2c1703ab02cbf45e564f399dc5ff8d18":[4,0,2,35,19],
-"classllfio__v2__xxx_1_1path__view__component.html#a2d62abddb51d080a8c2e42998bc6fb58":[4,0,2,35,7],
+"classllfio__v2__xxx_1_1path__view__component.html#a026f3fd0f948212028182d1b501dffbb":[4,0,2,35,5],
+"classllfio__v2__xxx_1_1path__view__component.html#a03281bf06f85b14622386bd87b9a947e":[4,0,2,35,28],
+"classllfio__v2__xxx_1_1path__view__component.html#a1531ffbbfb4d089a18f09809290190cc":[4,0,2,35,27],
+"classllfio__v2__xxx_1_1path__view__component.html#a18615f1a2c588d52c8d508d55ed3e7aa":[4,0,2,35,21],
+"classllfio__v2__xxx_1_1path__view__component.html#a247fba2fecd5b850a17b0994f5913b4f":[4,0,2,35,18],
+"classllfio__v2__xxx_1_1path__view__component.html#a2c1703ab02cbf45e564f399dc5ff8d18":[4,0,2,35,20],
+"classllfio__v2__xxx_1_1path__view__component.html#a2d62abddb51d080a8c2e42998bc6fb58":[4,0,2,35,8],
"classllfio__v2__xxx_1_1path__view__component.html#a38ff18893dfc84c562fb36c299702bf5":[4,0,2,35,1],
-"classllfio__v2__xxx_1_1path__view__component.html#a467256884725db92974c8a5a2c786bc2":[4,0,2,35,6],
-"classllfio__v2__xxx_1_1path__view__component.html#a4a0bfc3e06986b6287a22fdc97799181":[4,0,2,35,16],
-"classllfio__v2__xxx_1_1path__view__component.html#a4b9a5f0abe97449212fac7607b5dadd5":[4,0,2,35,13],
-"classllfio__v2__xxx_1_1path__view__component.html#a5f6999a46c792e260428497a722fc8ff":[4,0,2,35,9],
+"classllfio__v2__xxx_1_1path__view__component.html#a467256884725db92974c8a5a2c786bc2":[4,0,2,35,7],
+"classllfio__v2__xxx_1_1path__view__component.html#a4a0bfc3e06986b6287a22fdc97799181":[4,0,2,35,17],
+"classllfio__v2__xxx_1_1path__view__component.html#a4b9a5f0abe97449212fac7607b5dadd5":[4,0,2,35,14],
+"classllfio__v2__xxx_1_1path__view__component.html#a5f6999a46c792e260428497a722fc8ff":[4,0,2,35,10],
"classllfio__v2__xxx_1_1path__view__component.html#a72f7bc6b8dd06f719f83732bc91f36e0":[4,0,2,35,2],
"classllfio__v2__xxx_1_1path__view__component.html#a7663cb908516be3f8bf17b6826da186a":[4,0,2,35,0],
"classllfio__v2__xxx_1_1path__view__component.html#a7dfa033bda230ae9a1fdd60a17fb7880":[4,0,2,35,3],
"classllfio__v2__xxx_1_1path__view__component.html#a93aef9d3a7c37537ec71bd788d0f7272":[4,0,2,35,4],
-"classllfio__v2__xxx_1_1path__view__component.html#a9c02c1b6cc56f8221abea75a1e92a776":[4,0,2,35,18],
-"classllfio__v2__xxx_1_1path__view__component.html#aac07b365ff507ce5493fdc608d48329c":[4,0,2,35,14],
-"classllfio__v2__xxx_1_1path__view__component.html#aac2507e0f91813aaf4afdc5c2dc1b138":[4,0,2,35,21],
-"classllfio__v2__xxx_1_1path__view__component.html#aaf8f8d21319fb02bdb0442d1fea2c7c4":[4,0,2,35,10],
-"classllfio__v2__xxx_1_1path__view__component.html#abec4610490eafa45921d1f8b0eaa7591":[4,0,2,35,8],
-"classllfio__v2__xxx_1_1path__view__component.html#ac114eb6e2ed74625c8dc89c6499c05a1":[4,0,2,35,11],
-"classllfio__v2__xxx_1_1path__view__component.html#ac367f2c429245c567448780511f24c0d":[4,0,2,35,15],
-"classllfio__v2__xxx_1_1path__view__component.html#ac3a413fa5bbe8dbe10765bc790c1b762":[4,0,2,35,24],
-"classllfio__v2__xxx_1_1path__view__component.html#ad10ef737f6f91fc67cc2c26326b45c2f":[4,0,2,35,22],
-"classllfio__v2__xxx_1_1path__view__component.html#ad560fb8127764a5cf07357c07a35d8b0":[4,0,2,35,25],
-"classllfio__v2__xxx_1_1path__view__component.html#ad71dcb87f377236474b948d621b3b2a8":[4,0,2,35,23],
-"classllfio__v2__xxx_1_1path__view__component.html#ae8f844fe50fd3a3ee3da24aee760e456":[4,0,2,35,12],
-"classllfio__v2__xxx_1_1path__view__component.html#aea489beba43bb7bb9fa31b5bfd23b0cb":[4,0,2,35,5],
+"classllfio__v2__xxx_1_1path__view__component.html#a9c02c1b6cc56f8221abea75a1e92a776":[4,0,2,35,19],
+"classllfio__v2__xxx_1_1path__view__component.html#aac07b365ff507ce5493fdc608d48329c":[4,0,2,35,15],
+"classllfio__v2__xxx_1_1path__view__component.html#aac2507e0f91813aaf4afdc5c2dc1b138":[4,0,2,35,22],
+"classllfio__v2__xxx_1_1path__view__component.html#aaf8f8d21319fb02bdb0442d1fea2c7c4":[4,0,2,35,11],
+"classllfio__v2__xxx_1_1path__view__component.html#abec4610490eafa45921d1f8b0eaa7591":[4,0,2,35,9],
+"classllfio__v2__xxx_1_1path__view__component.html#ac114eb6e2ed74625c8dc89c6499c05a1":[4,0,2,35,12],
+"classllfio__v2__xxx_1_1path__view__component.html#ac367f2c429245c567448780511f24c0d":[4,0,2,35,16],
+"classllfio__v2__xxx_1_1path__view__component.html#ac3a413fa5bbe8dbe10765bc790c1b762":[4,0,2,35,25],
+"classllfio__v2__xxx_1_1path__view__component.html#ad10ef737f6f91fc67cc2c26326b45c2f":[4,0,2,35,23],
+"classllfio__v2__xxx_1_1path__view__component.html#ad560fb8127764a5cf07357c07a35d8b0":[4,0,2,35,26],
+"classllfio__v2__xxx_1_1path__view__component.html#ad71dcb87f377236474b948d621b3b2a8":[4,0,2,35,24],
+"classllfio__v2__xxx_1_1path__view__component.html#ae8f844fe50fd3a3ee3da24aee760e456":[4,0,2,35,13],
+"classllfio__v2__xxx_1_1path__view__component.html#aea489beba43bb7bb9fa31b5bfd23b0cb":[4,0,2,35,6],
"classllfio__v2__xxx_1_1section__handle.html":[4,0,2,36],
"classllfio__v2__xxx_1_1section__handle.html#a00a85eec5a41f7edb2c574d40cf04535":[4,0,2,36,18],
"classllfio__v2__xxx_1_1section__handle.html#a013936bc1254b1a47567fe29698d1b1c":[4,0,2,36,19],
@@ -247,7 +249,5 @@ var NAVTREEINDEX5 =
"classllfio__v2__xxx_1_1utils_1_1page__allocator_3_01void_01_4.html#a96b40be459cb832df002d8033d858a46":[4,0,2,3,1,4],
"classllfio__v2__xxx_1_1utils_1_1page__allocator_3_01void_01_4.html#aee4a3d1c9ea248acfa3b8b0935e55a6b":[4,0,2,3,1,3],
"combining_8hpp.html":[5,0,0,1,0,0,0,1],
-"combining_8hpp.html#a8b1d1e556711d50dacb5e279dc58407a":[5,0,0,1,0,0,0,1,1],
-"config_8hpp.html":[5,0,0,1,0,2],
-"config_8hpp.html#a02c02d05e24d34c25324c192df11c0b4":[5,0,0,1,0,2,32]
+"combining_8hpp.html#a8b1d1e556711d50dacb5e279dc58407a":[5,0,0,1,0,0,0,1,1]
};
diff --git a/navtreeindex6.js b/navtreeindex6.js
index d2a6810a..8f612ca6 100644
--- a/navtreeindex6.js
+++ b/navtreeindex6.js
@@ -1,5 +1,7 @@
var NAVTREEINDEX6 =
{
+"config_8hpp.html":[5,0,0,1,0,2],
+"config_8hpp.html#a02c02d05e24d34c25324c192df11c0b4":[5,0,0,1,0,2,32],
"config_8hpp.html#a153d3be235debcda8578952291884b74":[5,0,0,1,0,2,19],
"config_8hpp.html#a163aaaaa4d238aebd5fb9acec82006dd":[5,0,0,1,0,2,1],
"config_8hpp.html#a1e5f2d817ba0955e319af287e5dd924b":[5,0,0,1,0,2,18],
@@ -116,8 +118,8 @@ var NAVTREEINDEX6 =
"group__config.html#ga090b0d323b6d7d2496dba7aa42068013":[2,0,20],
"group__config.html#ga18295c2601f9e6cb9e759d57fa0d8ab4":[2,0,21],
"group__config.html#ga18295c2601f9e6cb9e759d57fa0d8ab4":[5,0,0,1,2,9],
-"group__config.html#ga1d39516e3f1380b0d2906629a8add07c":[5,0,0,0,0,11],
"group__config.html#ga1d39516e3f1380b0d2906629a8add07c":[2,0,4],
+"group__config.html#ga1d39516e3f1380b0d2906629a8add07c":[5,0,0,0,0,11],
"group__config.html#ga2e45ede29ed7b2aa06eb19aff2485541":[2,0,11],
"group__config.html#ga2e45ede29ed7b2aa06eb19aff2485541":[5,0,0,1,0,2,13],
"group__config.html#ga33014e3ba68fc774bc1ebc1d88b1dae3":[5,0,0,0,0,7],
@@ -136,20 +138,20 @@ var NAVTREEINDEX6 =
"group__config.html#ga84df5d479525cd6b58f873c2f9869b22":[2,0,16],
"group__config.html#ga86edeb2887d8f97f8b93005f08e46c80":[5,0,0,0,0,9],
"group__config.html#ga86edeb2887d8f97f8b93005f08e46c80":[2,0,2],
-"group__config.html#ga8a15603141e848a1816c1758b9436287":[2,0,1],
"group__config.html#ga8a15603141e848a1816c1758b9436287":[5,0,0,0,0,8],
+"group__config.html#ga8a15603141e848a1816c1758b9436287":[2,0,1],
"group__config.html#gaadd4f1f9d1a5c77c3b40d9e1b759b706":[2,0,12],
"group__config.html#gaadd4f1f9d1a5c77c3b40d9e1b759b706":[5,0,0,1,2,3],
-"group__config.html#gab03294596f77a7717954929a887ca425":[5,0,0,1,2,7],
"group__config.html#gab03294596f77a7717954929a887ca425":[2,0,19],
+"group__config.html#gab03294596f77a7717954929a887ca425":[5,0,0,1,2,7],
"group__config.html#gab2f82803f0ce479a2993d3b7696db8d3":[5,0,0,1,0,2,27],
"group__config.html#gab2f82803f0ce479a2993d3b7696db8d3":[2,0,17],
"group__config.html#gabb964a24682a722a7eaad891ee497a61":[2,0,13],
"group__config.html#gabb964a24682a722a7eaad891ee497a61":[5,0,0,1,0,2,23],
-"group__config.html#gac9f7f0153adb9034d26c4554728f817a":[5,0,0,1,0,2,24],
"group__config.html#gac9f7f0153adb9034d26c4554728f817a":[2,0,14],
-"group__config.html#gacac3045524a50876c1bc6068bd6237f0":[2,0,18],
+"group__config.html#gac9f7f0153adb9034d26c4554728f817a":[5,0,0,1,0,2,24],
"group__config.html#gacac3045524a50876c1bc6068bd6237f0":[5,0,0,1,2,6],
+"group__config.html#gacac3045524a50876c1bc6068bd6237f0":[2,0,18],
"group__config.html#gad270840dbd547a75ad62d48e93412ca7":[5,0,0,1,0,2,8],
"group__config.html#gad270840dbd547a75ad62d48e93412ca7":[2,0,7],
"group__config.html#gae1eb04a1ef4089291c04f60a66b9849e":[2,0,15],
@@ -232,22 +234,20 @@ var NAVTREEINDEX6 =
"md__build.html":[0],
"memory__map_8hpp.html":[5,0,0,1,0,0,1,4],
"modules.html":[2],
-"namespacekvstore__v1__xxx.html":[3,0,0],
"namespacekvstore__v1__xxx.html":[4,0,1],
+"namespacekvstore__v1__xxx.html":[3,0,0],
"namespacekvstore__v1__xxx_1_1traits.html":[4,0,1,0],
"namespacekvstore__v1__xxx_1_1traits.html":[3,0,0,0],
"namespacellfio__v2__xxx.html":[3,0,1],
"namespacellfio__v2__xxx.html":[4,0,2],
"namespacellfio__v2__xxx_1_1algorithm.html":[3,0,1,0],
"namespacellfio__v2__xxx_1_1algorithm.html":[4,0,2,0],
-"namespacellfio__v2__xxx_1_1algorithm_1_1impl.html":[4,0,2,0,0],
"namespacellfio__v2__xxx_1_1algorithm_1_1impl.html":[3,0,1,0,0],
+"namespacellfio__v2__xxx_1_1algorithm_1_1impl.html":[4,0,2,0,0],
"namespacellfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex.html":[3,0,1,0,1],
"namespacellfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex.html":[4,0,2,0,1],
"namespacellfio__v2__xxx_1_1path__discovery.html":[3,0,1,1],
"namespacellfio__v2__xxx_1_1path__discovery.html":[4,0,2,1],
"namespacellfio__v2__xxx_1_1storage__profile.html":[4,0,2,2],
-"namespacellfio__v2__xxx_1_1storage__profile.html":[3,0,1,2],
-"namespacellfio__v2__xxx_1_1utils.html":[3,0,1,3],
-"namespacellfio__v2__xxx_1_1utils.html":[4,0,2,3]
+"namespacellfio__v2__xxx_1_1storage__profile.html":[3,0,1,2]
};
diff --git a/navtreeindex7.js b/navtreeindex7.js
index 0ab71c82..f1d7ad28 100644
--- a/navtreeindex7.js
+++ b/navtreeindex7.js
@@ -1,5 +1,7 @@
var NAVTREEINDEX7 =
{
+"namespacellfio__v2__xxx_1_1utils.html":[3,0,1,3],
+"namespacellfio__v2__xxx_1_1utils.html":[4,0,2,3],
"namespacemembers.html":[3,1,0],
"namespacemembers_enum.html":[3,1,3],
"namespacemembers_func.html":[3,1,1],
@@ -247,7 +249,5 @@ var NAVTREEINDEX7 =
"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map_1_1__entity__idx.html#a3e4939b7eed7dee1ae7b938ed21f0bc2":[4,0,2,0,1,3,0,0],
"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map_1_1__entity__idx.html#ae31e6520a32c4f07c753ceeeeffbc047":[4,0,2,0,1,3,0,1],
"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex_1_1entity__type.html":[4,0,2,0,1,5,1],
-"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex_1_1entity__type.html#a0f9bc3718d9c671c10221cf401f81a7f":[4,0,2,0,1,5,1,2],
-"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex_1_1entity__type.html#a20d7ec8c41e328ad9d8dc07564b9e191":[4,0,2,0,1,5,1,1],
-"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex_1_1entity__type.html#a2ad515aaa41bfda6ade62bd7257330f6":[4,0,2,0,1,5,1,5]
+"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex_1_1entity__type.html#a0f9bc3718d9c671c10221cf401f81a7f":[4,0,2,0,1,5,1,2]
};
diff --git a/navtreeindex8.js b/navtreeindex8.js
index 90a148a1..021d5190 100644
--- a/navtreeindex8.js
+++ b/navtreeindex8.js
@@ -1,5 +1,7 @@
var NAVTREEINDEX8 =
{
+"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex_1_1entity__type.html#a20d7ec8c41e328ad9d8dc07564b9e191":[4,0,2,0,1,5,1,1],
+"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex_1_1entity__type.html#a2ad515aaa41bfda6ade62bd7257330f6":[4,0,2,0,1,5,1,5],
"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex_1_1entity__type.html#a7ad77fdbebd5f1ec023e4324797f3716":[4,0,2,0,1,5,1,4],
"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex_1_1entity__type.html#add9eada07537877fd3c2d0059f6972e3":[4,0,2,0,1,5,1,3],
"structllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1shared__fs__mutex_1_1entity__type.html#adfb9e2612d4f570f0d3eb043bbb05d81":[4,0,2,0,1,5,1,0],
@@ -247,7 +249,5 @@ var NAVTREEINDEX8 =
"structllfio__v2__xxx_1_1statfs__t.html#a7b8ea29dcda069ef2af42a25eb283786":[4,0,2,38,14],
"structllfio__v2__xxx_1_1statfs__t.html#a9684fea78f72efeafdbaa4a11f402060":[4,0,2,38,10],
"structllfio__v2__xxx_1_1statfs__t.html#aa24a1f36d9addae9d0d6ab13eeb43e5d":[4,0,2,38,7],
-"structllfio__v2__xxx_1_1statfs__t.html#aa4a4f434ba56992244ac59c8f825a962":[4,0,2,38,4],
-"structllfio__v2__xxx_1_1statfs__t.html#aa8b39815508e9252da673c7e18666cd7":[4,0,2,38,17],
-"structllfio__v2__xxx_1_1statfs__t.html#abe7361e7f354e4de36b64f80b4c6c72e":[4,0,2,38,12]
+"structllfio__v2__xxx_1_1statfs__t.html#aa4a4f434ba56992244ac59c8f825a962":[4,0,2,38,4]
};
diff --git a/navtreeindex9.js b/navtreeindex9.js
index 456e0fe0..fec34b64 100644
--- a/navtreeindex9.js
+++ b/navtreeindex9.js
@@ -1,5 +1,7 @@
var NAVTREEINDEX9 =
{
+"structllfio__v2__xxx_1_1statfs__t.html#aa8b39815508e9252da673c7e18666cd7":[4,0,2,38,17],
+"structllfio__v2__xxx_1_1statfs__t.html#abe7361e7f354e4de36b64f80b4c6c72e":[4,0,2,38,12],
"structllfio__v2__xxx_1_1statfs__t.html#ac7bedb646a6855541633e7bb7232b5e0":[4,0,2,38,15],
"structllfio__v2__xxx_1_1statfs__t.html#ae6bb78770f0544cee409e3420efed426":[4,0,2,38,3],
"structllfio__v2__xxx_1_1statfs__t.html#aee7f0b961f34b79e95189e6cf8677cbf":[4,0,2,38,6],
@@ -241,8 +243,8 @@ var NAVTREEINDEX9 =
"v2_80_2llfio_8hpp.html#ae0f8dc3a9d303f90044533d23f6417a8":[5,0,0,1,0,11,0],
"version_8hpp.html":[5,0,0,1,2],
"version_8hpp.html#a699beb5138cc8f2a2df12d833e4d96be":[5,0,0,1,2,4],
-"version_8hpp.html#a7b08237a3cfed4832068a4daa6d6e160":[5,0,0,1,2,2],
"version_8hpp.html#a7b08237a3cfed4832068a4daa6d6e160":[5,0,0,1,2,1],
+"version_8hpp.html#a7b08237a3cfed4832068a4daa6d6e160":[5,0,0,1,2,2],
"version_8hpp.html#aadba5400c27b35d85067c431cfd9b0e6":[5,0,0,1,2,5],
"version_8hpp.html#ac7aedfe0660c15373b69a68f760c5799":[5,0,0,1,2,0],
"xor_8hpp.html":[5,0,0,1,0,0,0,2],
diff --git a/todo.html b/todo.html
index 07d5884f..99097a8e 100644
--- a/todo.html
+++ b/todo.html
@@ -87,25 +87,23 @@ $(document).ready(function(){initNavTree('todo.html','');});
<div class="textblock"><dl class="reflist">
<dt><a class="anchor" id="_todo000002"></a>Namespace <a class="el" href="namespacellfio__v2__xxx.html">llfio_v2_xxx</a> </dt>
<dd>TODO FIXME Replace in-memory log with memory map file backed log. </dd>
-<dt><a class="anchor" id="_todo000004"></a>Class <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1cached__parent__handle__adapter.html">llfio_v2_xxx::algorithm::cached_parent_handle_adapter&lt; T &gt;</a> </dt>
+<dt><a class="anchor" id="_todo000003"></a>Class <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1cached__parent__handle__adapter.html">llfio_v2_xxx::algorithm::cached_parent_handle_adapter&lt; T &gt;</a> </dt>
<dd>I have been lazy and used public inheritance from that base i/o handle. I should use protected inheritance to prevent slicing, and expose all the public functions by hand. </dd>
-<dt><a class="anchor" id="_todo000005"></a>Class <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html">llfio_v2_xxx::algorithm::combining_handle_adapter&lt; Op, Target, Source &gt;</a> </dt>
+<dt><a class="anchor" id="_todo000004"></a>Class <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html">llfio_v2_xxx::algorithm::combining_handle_adapter&lt; Op, Target, Source &gt;</a> </dt>
<dd>I have been lazy and used public inheritance from <code>io_handle</code> and <code>file_handle</code>. I should use protected inheritance to prevent slicing, and expose all the public functions by hand. </dd>
-<dt><a class="anchor" id="_todo000007"></a>Class <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html">llfio_v2_xxx::algorithm::shared_fs_mutex::atomic_append</a> </dt>
+<dt><a class="anchor" id="_todo000006"></a>Class <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html">llfio_v2_xxx::algorithm::shared_fs_mutex::atomic_append</a> </dt>
<dd><p class="startdd">Implement hole punching once I port that code from LLFIO v1. </p>
<p>Decide on some resolution mechanism for sudden process exit. </p>
<p class="enddd">There is a 1 out of 2^64-2 chance of unique id collision. It would be nice if we actually formally checked that our chosen unique id is actually unique. </p>
</dd>
-<dt><a class="anchor" id="_todo000009"></a>Member <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html#a2b211531334c21185cbc7fc04a982357">llfio_v2_xxx::algorithm::shared_fs_mutex::atomic_append::_lock</a> (entities_guard &amp;out, deadline d, bool spin_not_sleep) noexcept final</dt>
+<dt><a class="anchor" id="_todo000008"></a>Member <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html#a2b211531334c21185cbc7fc04a982357">llfio_v2_xxx::algorithm::shared_fs_mutex::atomic_append::_lock</a> (entities_guard &amp;out, deadline d, bool spin_not_sleep) noexcept final</dt>
<dd>Read from header.last_known_good immediately if possible in order to avoid a duplicate read later </dd>
-<dt><a class="anchor" id="_todo000008"></a>Member <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html#a53cfcfafa373bdb5a4d16f325b95d700">llfio_v2_xxx::algorithm::shared_fs_mutex::atomic_append::fs_mutex_append</a> (const path_handle &amp;base, path_view lockfile, bool nfs_compatibility=false, bool skip_hashing=false) noexcept</dt>
+<dt><a class="anchor" id="_todo000007"></a>Member <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1atomic__append.html#a53cfcfafa373bdb5a4d16f325b95d700">llfio_v2_xxx::algorithm::shared_fs_mutex::atomic_append::fs_mutex_append</a> (const path_handle &amp;base, path_view lockfile, bool nfs_compatibility=false, bool skip_hashing=false) noexcept</dt>
<dd>fs_mutex_append needs to check if file still exists after lock is granted, awaiting path fetching. </dd>
-<dt><a class="anchor" id="_todo000010"></a>Class <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html">llfio_v2_xxx::algorithm::shared_fs_mutex::memory_map&lt; Hasher, HashIndexSize, SpinlockType &gt;</a> </dt>
+<dt><a class="anchor" id="_todo000009"></a>Class <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1shared__fs__mutex_1_1memory__map.html">llfio_v2_xxx::algorithm::shared_fs_mutex::memory_map&lt; Hasher, HashIndexSize, SpinlockType &gt;</a> </dt>
<dd>memory_map::_hash_entities needs to hash x16, x8 and x4 at a time to encourage auto vectorisation </dd>
<dt><a class="anchor" id="_todo000001"></a>Member <a class="el" href="classllfio__v2__xxx_1_1io__handle.html#ab4b195f6b8cee1ffd48e28545245c762">llfio_v2_xxx::io_handle::io_handle</a> ()</dt>
-<dd>Why is io_result&lt;buffers_type&gt; not a standard layout type? </dd>
-<dt><a class="anchor" id="_todo000003"></a>Class <a class="el" href="classllfio__v2__xxx_1_1path__view.html">llfio_v2_xxx::path_view</a> </dt>
-<dd>Lots of member functions remain to be implemented. <code>char8_t</code> and <code>char16_t</code> support is not implemented yet.</dd>
+<dd>Why is io_result&lt;buffers_type&gt; not a standard layout type? </dd>
</dl>
</div></div><!-- contents -->
</div><!-- doc-content -->