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-15 01:00:44 +0300
committerJenkins nedprod CI <foo@nowhere>2019-10-15 01:00:44 +0300
commitb4212a140568062e17c2eb885674914811b7060a (patch)
tree2e6df0f15215b749a132b44ebe0032c7b2e4f5fd
parent1a739729c063ebb74669581d3ef39ccbbec923fb (diff)
Travis CI updates documentation
-rw-r--r--classllfio__v2__xxx_1_1path__view.html10
-rw-r--r--classllfio__v2__xxx_1_1path__view__component.html8
2 files changed, 9 insertions, 9 deletions
diff --git a/classllfio__v2__xxx_1_1path__view.html b/classllfio__v2__xxx_1_1path__view.html
index 323f1230..9bc204ed 100644
--- a/classllfio__v2__xxx_1_1path__view.html
+++ b/classllfio__v2__xxx_1_1path__view.html
@@ -393,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="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 class="fragment"><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; : _state(v, len, is_zero_terminated)</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; {</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; }</div></div><!-- fragment -->
</div>
</div>
<a id="a0d5e676b565090269032a91908a8c0bf"></a>
@@ -420,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="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 class="fragment"><div class="line"><a name="l01049"></a><span class="lineno"> 1049</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="l01050"></a><span class="lineno"> 1050</span>&#160; {</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</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:998</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -448,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="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 class="fragment"><div class="line"><a name="l01058"></a><span class="lineno"> 1058</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="l01059"></a><span class="lineno"> 1059</span>&#160; {</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</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:998</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -502,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="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 class="fragment"><div class="line"><a name="l01323"></a><span class="lineno"> 1323</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>
@@ -549,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="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 class="fragment"><div class="line"><a name="l01329"></a><span class="lineno"> 1329</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="l01330"></a><span class="lineno"> 1330</span>&#160; {<span class="comment"></span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;<span class="comment"> //! Number of characters, excluding zero terminating char, at buffer</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</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="l01333"></a><span class="lineno"> 1333</span>&#160;<span class="comment"> /*! See constructor for `path_view_component::c_str`.</span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> U&gt;</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</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="l01337"></a><span class="lineno"> 1337</span>&#160; : _base(view._state, no_zero_terminate, static_cast&lt;U &amp;&amp;&gt;(allocate))</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; {</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; }<span class="comment"></span></div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;<span class="comment"> //! \overload</span></div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</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="l01342"></a><span class="lineno"> 1342</span>&#160; : _base(view._state, no_zero_terminate)</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; {</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; }</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</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:998</div></div>
</div><!-- fragment -->
</div>
</div>
diff --git a/classllfio__v2__xxx_1_1path__view__component.html b/classllfio__v2__xxx_1_1path__view__component.html
index 1be42081..ff4df84d 100644
--- a/classllfio__v2__xxx_1_1path__view__component.html
+++ b/classllfio__v2__xxx_1_1path__view__component.html
@@ -241,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="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 class="fragment"><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="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="l00452"></a><span class="lineno"> 452</span>&#160; }</div></div><!-- fragment -->
</div>
</div>
<a id="a5f6999a46c792e260428497a722fc8ff"></a>
@@ -290,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="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 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, detail::constexpr_strlen(s), <span class="keyword">true</span>)); }</div></div><!-- fragment -->
</div>
</div>
<a id="aaf8f8d21319fb02bdb0442d1fea2c7c4"></a>
@@ -339,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="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 class="fragment"><div class="line"><a name="l00460"></a><span class="lineno"> 460</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>
@@ -407,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="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 class="fragment"><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</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="l00488"></a><span class="lineno"> 488</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment"> //! Type of the value type</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="comment"></span> <span class="keyword">using</span> value_type = T;<span class="comment"></span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="comment"> //! Type of the deleter</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;<span class="comment"></span> <span class="keyword">using</span> deleter_type = Deleter;<span class="comment"></span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="comment"> //! The size of the internal temporary buffer</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</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="l00495"></a><span class="lineno"> 495</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="comment"> //! Number of characters, excluding zero terminating char, at buffer</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</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="l00498"></a><span class="lineno"> 498</span>&#160;<span class="comment"> //! Pointer to the possibly-converted path</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</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="l00500"></a><span class="lineno"> 500</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</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="l00503"></a><span class="lineno"> 503</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="l00504"></a><span class="lineno"> 504</span>&#160; {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = view._length;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">if</span>(no_zero_terminate || view._zero_terminated)</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; buffer = source;</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="keywordflow">else</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="comment">// Source must be not zero terminated, and zero terminated is required</span></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> required_length = view._length + view._zero_terminated;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</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="l00515"></a><span class="lineno"> 515</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="l00516"></a><span class="lineno"> 516</span>&#160;<span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">if</span>(required_bytes &gt; 65535)</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; {</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</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="l00520"></a><span class="lineno"> 520</span>&#160; abort();</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">if</span>(required_bytes &lt;= _buffer_bytes)</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="comment">// Use the internal buffer</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; memcpy(_buffer, source, required_bytes);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; _buffer[required_length] = 0;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; buffer = _buffer;</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="keywordflow">else</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keyword">auto</span> *buffer_ = allocate(required_length);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">nullptr</span> == buffer_)</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; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = 0;</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; {</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; _call_deleter = <span class="keyword">true</span>;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; memcpy(buffer_, source, required_bytes);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; buffer_[required_length] = 0;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; buffer = buffer_;</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; }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;<span class="preprocessor">#pragma warning(push)</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;<span class="preprocessor">#pragma warning(disable : 4127) // conditional expression is constant</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="comment"> /*! Construct, performing any reencoding or memory copying required.</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;<span class="comment"> \param view The path component view to use as source.</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</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="l00556"></a><span class="lineno"> 556</span>&#160;<span class="comment"> \param allocate A callable with prototype `value_type *(size_t length)` which</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</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="l00558"></a><span class="lineno"> 558</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="l00559"></a><span class="lineno"> 559</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</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="l00561"></a><span class="lineno"> 561</span>&#160;<span class="comment"> `system_error(errc::illegal_byte_sequence)` is thrown.</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</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="l00563"></a><span class="lineno"> 563</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="l00564"></a><span class="lineno"> 564</span>&#160;<span class="comment"> on most filesystems), use native narrow or wide encoded source, or binary.</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</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="l00567"></a><span class="lineno"> 567</span>&#160; {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">if</span>(0 == view._length)</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; _buffer[0] = 0;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; buffer = _buffer;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = 0;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">return</span>;</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; <span class="keywordflow">if</span>(std::is_same&lt;T, byte&gt;::value || view._passthrough)</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; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = view._length;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; buffer = (<span class="keyword">const</span> value_type *) view._bytestr;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">return</span>;</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; <span class="keywordflow">if</span>(std::is_same&lt;T, char&gt;::value &amp;&amp; view._char)</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; {</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._charstr);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">return</span>;</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; <span class="keywordflow">if</span>(std::is_same&lt;T, wchar_t&gt;::value &amp;&amp; view._wchar)</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._wcharstr);</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">return</span>;</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; <span class="keywordflow">if</span>(std::is_same&lt;T, char8_t&gt;::value &amp;&amp; view._utf8)</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; {</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._char8str);</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordflow">return</span>;</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; <span class="keywordflow">if</span>(std::is_same&lt;T, char16_t&gt;::value &amp;&amp; view._utf16)</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; {</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._char16str);</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">return</span>;</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;<span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="comment">// On Windows, consider char16_t input equivalent to wchar_t</span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</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="l00604"></a><span class="lineno"> 604</span>&#160; {</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._wcharstr);</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">return</span>;</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;<span class="preprocessor">#else</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">// On POSIX, consider char8_t input equivalent to char</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</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="l00611"></a><span class="lineno"> 611</span>&#160; {</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; _make_passthrough(view, no_zero_terminate, allocate, view._charstr);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; }</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="comment">// A reencode is required. We keep this out of header because reencoding</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="comment">// requires dragging in lots of system header files.</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordtype">size_t</span> required_length = 0;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; value_type *end = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">if</span>(view._passthrough)</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._bytestr, 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._char)</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._charstr, 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._wchar)</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._wcharstr, 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._utf8)</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._char8str, 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> <span class="keywordflow">if</span>(view._utf16)</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; end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._char16str, view._length);</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</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="l00643"></a><span class="lineno"> 643</span>&#160; abort();</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="keywordflow">if</span>(0 == required_length)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="comment">// The internal buffer was sufficient.</span></div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; buffer = _buffer;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = end - _buffer;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">return</span>;</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; <span class="comment">// The internal buffer is too small. Fall back to dynamic allocation. This may throw.</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keyword">auto</span> *allocated_buffer = allocate(required_length);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">nullptr</span> == allocated_buffer)</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; {</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = 0;</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; _call_deleter = <span class="keyword">true</span>;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; memcpy(allocated_buffer, _buffer, end - _buffer);</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; required_length -= (end - _buffer);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; end = allocated_buffer + (end - _buffer);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">if</span>(view._passthrough)</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._bytestr, 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._char)</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._charstr, 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._wchar)</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._wcharstr, 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._utf8)</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._char8str, 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> <span class="keywordflow">if</span>(view._utf16)</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; 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="l00682"></a><span class="lineno"> 682</span>&#160; }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; {</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</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="l00686"></a><span class="lineno"> 686</span>&#160; abort();</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; buffer = allocated_buffer;</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = end - buffer;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; }</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;<span class="preprocessor">#pragma warning(pop)</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;<span class="comment"> //! \overload</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</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="l00696"></a><span class="lineno"> 696</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="l00697"></a><span class="lineno"> 697</span>&#160; {</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; }</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; ~c_str() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; c_str(<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(c_str &amp;&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</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="l00703"></a><span class="lineno"> 703</span>&#160; c_str &amp;operator=(c_str &amp;&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordtype">bool</span> _call_deleter{<span class="keyword">false</span>};</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; Deleter _deleter;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</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="l00709"></a><span class="lineno"> 709</span>&#160; <span class="comment">// under optimisation if it can prove it is never used.</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; value_type _buffer[internal_buffer_size]{};</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</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>