diff options
-rw-r--r-- | classllfio__v2__xxx_1_1path__view.html | 10 | ||||
-rw-r--r-- | classllfio__v2__xxx_1_1path__view__component.html | 8 |
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 ff29372d..bff3150b 100644 --- a/classllfio__v2__xxx_1_1path__view.html +++ b/classllfio__v2__xxx_1_1path__view.html @@ -393,7 +393,7 @@ std::ostream & </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="l01040"></a><span class="lineno"> 1040</span>  : _state(v, len, is_zero_terminated)</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  {</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  : _state(v, len, is_zero_terminated)</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  {</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  }</div></div><!-- fragment --> </div> </div> <a id="a0d5e676b565090269032a91908a8c0bf"></a> @@ -420,7 +420,7 @@ std::ostream & </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="l01049"></a><span class="lineno"> 1049</span>  : <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>  {</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  }</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 class="fragment"><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  : <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="l01053"></a><span class="lineno"> 1053</span>  {</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  }</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:1001</div></div> </div><!-- fragment --> </div> </div> @@ -448,7 +448,7 @@ std::ostream & </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="l01058"></a><span class="lineno"> 1058</span>  : <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>  {</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  }</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 class="fragment"><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  : <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="l01062"></a><span class="lineno"> 1062</span>  {</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  }</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:1001</div></div> </div><!-- fragment --> </div> </div> @@ -502,7 +502,7 @@ std::ostream & </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<T, Delete, _internal_buffer_size></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="l01323"></a><span class="lineno"> 1323</span>  { <span class="keywordflow">return</span> compare<T, Deleter, _internal_buffer_size>(path_view_component(s)); }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>  { <span class="keywordflow">return</span> compare<T, Deleter, _internal_buffer_size>(path_view_component(s)); }</div></div><!-- fragment --> </div> </div> <a id="a1080207b46f1b48f0ee656995a506646"></a> @@ -549,7 +549,7 @@ std::ostream & </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="l01329"></a><span class="lineno"> 1329</span>  : <span class="keyword">public</span> path_view_component::c_str<T, Deleter, _internal_buffer_size></div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  {<span class="comment"></span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> <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> <span class="comment"></span> <span class="keyword">using</span> _base = path_view_component::c_str<T, Deleter, _internal_buffer_size>;<span class="comment"></span></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <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> <span class="comment"> */</span></div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  <span class="keyword">template</span> <<span class="keyword">class</span> U></div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</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, U &&allocate)</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  : _base(view._state, no_zero_terminate, static_cast<U &&>(allocate))</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  {</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  }<span class="comment"></span></div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="comment"> //! \overload</span></div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <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>  : _base(view._state, no_zero_terminate)</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  {</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>  }</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  };</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 class="fragment"><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  : <span class="keyword">public</span> path_view_component::c_str<T, Deleter, _internal_buffer_size></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>  {<span class="comment"></span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> <span class="comment"> //! Number of characters, excluding zero terminating char, at buffer</span></div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="comment"></span> <span class="keyword">using</span> _base = path_view_component::c_str<T, Deleter, _internal_buffer_size>;<span class="comment"></span></div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="comment"> /*! See constructor for `path_view_component::c_str`.</span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> <span class="comment"> */</span></div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  <span class="keyword">template</span> <<span class="keyword">class</span> U></div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</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, U &&allocate)</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  : _base(view._state, no_zero_terminate, static_cast<U &&>(allocate))</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  {</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>  }<span class="comment"></span></div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="comment"> //! \overload</span></div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <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="l01345"></a><span class="lineno"> 1345</span>  : _base(view._state, no_zero_terminate)</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  {</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  }</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  };</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:1001</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 33fed4ce..3d39b4d4 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 & </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<T, Delete, _internal_buffer_size></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="l00450"></a><span class="lineno"> 450</span>  {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">return</span> _invoke([&p](<span class="keyword">const</span> <span class="keyword">auto</span> &<span class="keyword">self</span>) { <span class="keywordflow">return</span> p._invoke([&<span class="keyword">self</span>](<span class="keyword">const</span> <span class="keyword">auto</span> &other) { <span class="keywordflow">return</span> _compare<T, Deleter, _internal_buffer_size>(<span class="keyword">self</span>, other); }); });</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  {</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keywordflow">return</span> _invoke([&p](<span class="keyword">const</span> <span class="keyword">auto</span> &<span class="keyword">self</span>) { <span class="keywordflow">return</span> p._invoke([&<span class="keyword">self</span>](<span class="keyword">const</span> <span class="keyword">auto</span> &other) { <span class="keywordflow">return</span> _compare<T, Deleter, _internal_buffer_size>(<span class="keyword">self</span>, other); }); });</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  }</div></div><!-- fragment --> </div> </div> <a id="a5f6999a46c792e260428497a722fc8ff"></a> @@ -290,7 +290,7 @@ std::ostream & </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>  { <span class="keywordflow">return</span> compare<T, Deleter, _internal_buffer_size>(path_view_component(s, detail::constexpr_strlen(s), <span class="keyword">true</span>)); }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  { <span class="keywordflow">return</span> compare<T, Deleter, _internal_buffer_size>(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 & </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="l00460"></a><span class="lineno"> 460</span>  { <span class="keywordflow">return</span> compare<T, Deleter, _internal_buffer_size>(path_view_component(s)); }</div></div><!-- fragment --> +<div class="fragment"><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  { <span class="keywordflow">return</span> compare<T, Deleter, _internal_buffer_size>(path_view_component(s)); }</div></div><!-- fragment --> </div> </div> <a id="ac114eb6e2ed74625c8dc89c6499c05a1"></a> @@ -407,7 +407,7 @@ std::ostream & </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="l00486"></a><span class="lineno"> 486</span>  {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  static_assert(is_source_acceptable<T>, <span class="stringliteral">"path_view_component::c_str<T> does not have a T which is one of byte, char, wchar_t, char8_t nor char16_t"</span>);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="comment"></span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="comment"> //! Type of the value type</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <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> <span class="comment"> //! Type of the deleter</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <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> <span class="comment"> //! The size of the internal temporary buffer</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <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> <span class="comment"></span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <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> <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> <span class="comment"> //! Pointer to the possibly-converted path</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <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> </div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keyword">template</span> <<span class="keyword">class</span> U, <span class="keyword">class</span> source_type> <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 & <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>  <span class="keyword">template</span> <<span class="keyword">class</span> U> <span class="keywordtype">void</span> _make_passthrough(path_view_component view, <span class="keywordtype">bool</span> no_zero_terminate, U &allocate, <span class="keyword">const</span> value_type *source)</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <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>  <span class="keywordflow">if</span>(no_zero_terminate || view._zero_terminated)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  buffer = source;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <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>  <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>  <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>  <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> <span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <span class="keywordflow">if</span>(required_bytes > 65535)</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  {</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  LLFIO_LOG_FATAL(<span class="keyword">nullptr</span>, <span class="stringliteral">"Paths exceeding 64Kb are impossible on Microsoft Windows"</span>);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  abort();</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="keywordflow">if</span>(required_bytes <= _buffer_bytes)</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="comment">// Use the internal buffer</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  memcpy(_buffer, source, required_bytes);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  _buffer[required_length] = 0;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  buffer = _buffer;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keyword">auto</span> *buffer_ = allocate(required_length);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">if</span>(<span class="keyword">nullptr</span> == buffer_)</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  {</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <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>  }</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  {</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  _call_deleter = <span class="keyword">true</span>;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  memcpy(buffer_, source, required_bytes);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  buffer_[required_length] = 0;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  buffer = buffer_;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  }</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="preprocessor">#pragma warning(push)</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <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> <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> <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> <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> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <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> <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> <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> <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> <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> <span class="comment"> */</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keyword">template</span> <<span class="keyword">class</span> U> c_str(path_view_component view, <span class="keywordtype">bool</span> no_zero_terminate, U &&allocate)</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">if</span>(0 == view._length)</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  _buffer[0] = 0;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  buffer = _buffer;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <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>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordflow">if</span>(std::is_same<T, byte>::value || view._passthrough)</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  {</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <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>  buffer = (<span class="keyword">const</span> value_type *) view._bytestr;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  }</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <span class="keywordflow">if</span>(std::is_same<T, char>::value && view._char)</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  {</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  _make_passthrough(view, no_zero_terminate, allocate, view._charstr);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">if</span>(std::is_same<T, wchar_t>::value && view._wchar)</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  _make_passthrough(view, no_zero_terminate, allocate, view._wcharstr);</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  }</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">if</span>(std::is_same<T, char8_t>::value && view._utf8)</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  {</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  _make_passthrough(view, no_zero_terminate, allocate, view._char8str);</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="keywordflow">if</span>(std::is_same<T, char16_t>::value && view._utf16)</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  {</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  _make_passthrough(view, no_zero_terminate, allocate, view._char16str);</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  }</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <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>  <span class="keywordflow">if</span>(std::is_same<T, wchar_t>::value && view._utf16)</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  {</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  _make_passthrough(view, no_zero_terminate, allocate, view._wcharstr);</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  }</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <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>  <span class="keywordflow">if</span>(std::is_same<T, char>::value && view._utf8)</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  {</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  _make_passthrough(view, no_zero_terminate, allocate, view._charstr);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  }</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <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>  <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>  <span class="keywordtype">size_t</span> required_length = 0;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  value_type *end = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordflow">if</span>(view._passthrough)</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  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>  }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <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>  {</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  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>  }</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <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>  {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  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>  }</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <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>  {</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  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>  }</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <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>  {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  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>  }</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  LLFIO_LOG_FATAL(<span class="keyword">nullptr</span>, <span class="stringliteral">"path_view_component::cstr somehow sees no state!"</span>);</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  abort();</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  }</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">if</span>(0 == required_length)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <span class="comment">// The internal buffer was sufficient.</span></div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  buffer = _buffer;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <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>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  }</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <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>  <span class="keyword">auto</span> *allocated_buffer = allocate(required_length);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <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>  {</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <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>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  _call_deleter = <span class="keyword">true</span>;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  memcpy(allocated_buffer, _buffer, end - _buffer);</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  required_length -= (end - _buffer);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  end = allocated_buffer + (end - _buffer);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">if</span>(view._passthrough)</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  {</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  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>  }</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <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>  {</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  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>  }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <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>  {</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  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>  }</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <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>  {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  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>  }</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <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>  {</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  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>  }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  {</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  LLFIO_LOG_FATAL(<span class="keyword">nullptr</span>, <span class="stringliteral">"path_view_component::cstr somehow sees no state!"</span>);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  abort();</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  buffer = allocated_buffer;</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <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>  }</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="preprocessor">#pragma warning(pop)</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="comment"> //! \overload</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <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>  : 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>  {</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  }</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  ~c_str() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  c_str(<span class="keyword">const</span> c_str &) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  c_str(c_str &&) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  c_str &operator=(<span class="keyword">const</span> c_str &) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  c_str &operator=(c_str &&) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> </div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <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>  Deleter _deleter;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <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>  <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>  value_type _buffer[internal_buffer_size]{};</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  };</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< section_handle::extent_type > length(const section_handle &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:714</div></div> +<div class="fragment"><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  static_assert(is_source_acceptable<T>, <span class="stringliteral">"path_view_component::c_str<T> does not have a T which is one of byte, char, wchar_t, char8_t nor char16_t"</span>);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="comment"></span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="comment"> //! Type of the value type</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="comment"></span> <span class="keyword">using</span> value_type = T;<span class="comment"></span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="comment"> //! Type of the deleter</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="comment"></span> <span class="keyword">using</span> deleter_type = Deleter;<span class="comment"></span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="comment"> //! The size of the internal temporary buffer</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <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="l00497"></a><span class="lineno"> 497</span> <span class="comment"></span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="comment"> //! Number of characters, excluding zero terminating char, at buffer</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <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="l00500"></a><span class="lineno"> 500</span> <span class="comment"> //! Pointer to the possibly-converted path</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="comment"></span> <span class="keyword">const</span> value_type *buffer{<span class="keyword">nullptr</span>};</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keyword">template</span> <<span class="keyword">class</span> U, <span class="keyword">class</span> source_type> <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 & <span class="comment">/*unused*/</span>, <span class="keyword">const</span> source_type * <span class="comment">/*unused*/</span>) {}</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keyword">template</span> <<span class="keyword">class</span> U> <span class="keywordtype">void</span> _make_passthrough(path_view_component view, <span class="keywordtype">bool</span> no_zero_terminate, U &allocate, <span class="keyword">const</span> value_type *source)</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  {</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = view._length;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">if</span>(no_zero_terminate || view._zero_terminated)</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  buffer = source;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="comment">// Source must be not zero terminated, and zero terminated is required</span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> required_length = view._length + view._zero_terminated;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <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="l00517"></a><span class="lineno"> 517</span>  <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="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="keywordflow">if</span>(required_bytes > 65535)</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  LLFIO_LOG_FATAL(<span class="keyword">nullptr</span>, <span class="stringliteral">"Paths exceeding 64Kb are impossible on Microsoft Windows"</span>);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  abort();</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  }</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="keywordflow">if</span>(required_bytes <= _buffer_bytes)</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="comment">// Use the internal buffer</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  memcpy(_buffer, source, required_bytes);</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  _buffer[required_length] = 0;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  buffer = _buffer;</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  }</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keyword">auto</span> *buffer_ = allocate(required_length);</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">if</span>(<span class="keyword">nullptr</span> == buffer_)</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  {</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = 0;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  }</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  {</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  _call_deleter = <span class="keyword">true</span>;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  memcpy(buffer_, source, required_bytes);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  buffer_[required_length] = 0;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  buffer = buffer_;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  }</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  }</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor">#pragma warning(push)</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor">#pragma warning(disable : 4127) // conditional expression is constant</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="comment"> /*! Construct, performing any reencoding or memory copying required.</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="comment"> \param view The path component view to use as source.</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="comment"> \param no_zero_terminate Set to true if zero termination is not required.</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="comment"> \param allocate A callable with prototype `value_type *(size_t length)` which</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="comment"> is defaulted to `return new value_type[length];`. You can return `nullptr` if</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="comment"> you wish, the consumer of `c_str` will see a `buffer` set to `nullptr`.</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="comment"></span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <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="l00563"></a><span class="lineno"> 563</span> <span class="comment"> `system_error(errc::illegal_byte_sequence)` is thrown.</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <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="l00565"></a><span class="lineno"> 565</span> <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="l00566"></a><span class="lineno"> 566</span> <span class="comment"> on most filesystems), use native narrow or wide encoded source, or binary.</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="comment"> */</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keyword">template</span> <<span class="keyword">class</span> U> c_str(path_view_component view, <span class="keywordtype">bool</span> no_zero_terminate, U &&allocate)</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">if</span>(0 == view._length)</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  _buffer[0] = 0;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  buffer = _buffer;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = 0;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="keywordflow">if</span>(std::is_same<T, byte>::value || view._passthrough)</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = view._length;</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  buffer = (<span class="keyword">const</span> value_type *) view._bytestr;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  }</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="keywordflow">if</span>(std::is_same<T, char>::value && view._char)</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  _make_passthrough(view, no_zero_terminate, allocate, view._charstr);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">if</span>(std::is_same<T, wchar_t>::value && view._wchar)</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  {</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  _make_passthrough(view, no_zero_terminate, allocate, view._wcharstr);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  }</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">if</span>(std::is_same<T, char8_t>::value && view._utf8)</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  _make_passthrough(view, no_zero_terminate, allocate, view._char8str);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keywordflow">if</span>(std::is_same<T, char16_t>::value && view._utf16)</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  {</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  _make_passthrough(view, no_zero_terminate, allocate, view._char16str);</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  }</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="comment">// On Windows, consider char16_t input equivalent to wchar_t</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">if</span>(std::is_same<T, wchar_t>::value && view._utf16)</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  {</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  _make_passthrough(view, no_zero_terminate, allocate, view._wcharstr);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="comment">// On POSIX, consider char8_t input equivalent to char</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordflow">if</span>(std::is_same<T, char>::value && view._utf8)</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  {</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  _make_passthrough(view, no_zero_terminate, allocate, view._charstr);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  }</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="comment">// A reencode is required. We keep this out of header because reencoding</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="comment">// requires dragging in lots of system header files.</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordtype">size_t</span> required_length = 0;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  value_type *end = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keywordflow">if</span>(view._passthrough)</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  {</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._bytestr, view._length);</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._char)</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  {</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._charstr, view._length);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._wchar)</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  {</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._wcharstr, view._length);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._utf8)</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  {</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._char8str, view._length);</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  }</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._utf16)</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  end = detail::reencode_path_to(required_length, _buffer, _internal_buffer_size, view._char16str, view._length);</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  }</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  LLFIO_LOG_FATAL(<span class="keyword">nullptr</span>, <span class="stringliteral">"path_view_component::cstr somehow sees no state!"</span>);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  abort();</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  }</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <span class="keywordflow">if</span>(0 == required_length)</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  {</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="comment">// The internal buffer was sufficient.</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  buffer = _buffer;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = end - _buffer;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  }</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="comment">// The internal buffer is too small. Fall back to dynamic allocation. This may throw.</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keyword">auto</span> *allocated_buffer = allocate(required_length);</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keywordflow">if</span>(<span class="keyword">nullptr</span> == allocated_buffer)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = 0;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  }</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  _call_deleter = <span class="keyword">true</span>;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  memcpy(allocated_buffer, _buffer, end - _buffer);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  required_length -= (end - _buffer);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  end = allocated_buffer + (end - _buffer);</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="keywordflow">if</span>(view._passthrough)</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  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="l00668"></a><span class="lineno"> 668</span>  }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._char)</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  {</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  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="l00672"></a><span class="lineno"> 672</span>  }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._wchar)</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  {</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  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="l00676"></a><span class="lineno"> 676</span>  }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._utf8)</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  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="l00680"></a><span class="lineno"> 680</span>  }</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(view._utf16)</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  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="l00684"></a><span class="lineno"> 684</span>  }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  LLFIO_LOG_FATAL(<span class="keyword">nullptr</span>, <span class="stringliteral">"path_view_component::cstr somehow sees no state!"</span>);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  abort();</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  buffer = allocated_buffer;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <a class="code" href="namespacellfio__v2__xxx.html#aa3676f0dd69f4b54cf7e14e3f86d32b9">length</a> = end - buffer;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  }</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="preprocessor">#pragma warning(pop)</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="comment"> //! \overload</span></div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <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="l00698"></a><span class="lineno"> 698</span>  : 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="l00699"></a><span class="lineno"> 699</span>  {</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  ~c_str() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  c_str(<span class="keyword">const</span> c_str &) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  c_str(c_str &&) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  c_str &operator=(<span class="keyword">const</span> c_str &) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  c_str &operator=(c_str &&) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span> </div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="keywordtype">bool</span> _call_deleter{<span class="keyword">false</span>};</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  Deleter _deleter;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  <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="l00711"></a><span class="lineno"> 711</span>  <span class="comment">// under optimisation if it can prove it is never used.</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  value_type _buffer[internal_buffer_size]{};</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  };</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< section_handle::extent_type > length(const section_handle &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:714</div></div> </div><!-- fragment --> </div> </div> |