LLFIO v2.00
Loading...
Searching...
No Matches
llfio_v2_xxx::path_view_component Class Reference

An iterated part of a path_view. More...

#include "path_view.hpp"

Inheritance diagram for llfio_v2_xxx::path_view_component:
llfio_v2_xxx::path_view

Classes

class  rendered_path
 

Public Types

enum  format : uint8_t {
  unknown , native_format , generic_format , auto_format ,
  binary_format
}
 How to interpret separators. More...
 
enum  termination { zero_terminated , not_zero_terminated }
 The zero termination to use. More...
 
using size_type = filesystem::path::string_type::size_type
 The size type.
 
using byte = llfio_v2_xxx ::byte
 Character type for passthrough input.
 
using char16_t = detail::char16_t
 
template<class T >
using default_rendered_path_deleter = std::default_delete< T >
 The default deleter to use.
 
template<class T = typename filesystem::path::value_type, class AllocatorOrDeleter = default_rendered_path_deleter<T[]>, size_t _internal_buffer_size = default_internal_buffer_size>
using zero_terminated_rendered_path = rendered_path< termination::zero_terminated, T, AllocatorOrDeleter, _internal_buffer_size >
 Convenience type alias.
 
template<class T = typename filesystem::path::value_type, class AllocatorOrDeleter = default_rendered_path_deleter<T[]>, size_t _internal_buffer_size = default_internal_buffer_size>
using not_zero_terminated_rendered_path = rendered_path< termination::not_zero_terminated, T, AllocatorOrDeleter, _internal_buffer_size >
 Convenience type alias.
 

Public Member Functions

constexpr path_view_component () noexcept
 Constructs an empty path view component (DEVIATES from P1030, is not trivial due to C++ 14 compatibility)
 
constexpr path_view_component (path_view_component p, format fmt) noexcept
 Constructs a path view component identical to the input, except with different format interpretation.
 
 path_view_component (const filesystem::path &v, format fmt=auto_format) noexcept
 
template<class Char , typename std::enable_if<(is_source_chartype_acceptable< Char >), bool >::type = true>
constexpr path_view_component (const std::basic_string< Char > &v, format fmt=binary_format) noexcept
 
constexpr path_view_component (const char *b, size_t l, enum termination zt, format fmt=binary_format) noexcept
 
constexpr path_view_component (const wchar_t *b, size_t l, enum termination zt, format fmt=binary_format) noexcept
 
constexpr path_view_component (const char8_t *b, size_t l, enum termination zt, format fmt=binary_format) noexcept
 
constexpr path_view_component (const char16_t *b, size_t l, enum termination zt, format fmt=binary_format) noexcept
 
constexpr path_view_component (const byte *b, size_t l, enum termination zt) noexcept
 
template<class Char , typename std::enable_if<(is_source_chartype_acceptable< Char >), bool >::type = true>
constexpr path_view_component (const Char *s, format fmt=binary_format) noexcept
 
constexpr path_view_component (const byte *s) noexcept
 
template<class Char , typename std::enable_if<(is_source_chartype_acceptable< Char >), bool >::type = true>
constexpr path_view_component (basic_string_view< Char > v, enum termination zt, format fmt=binary_format) noexcept
 
constexpr path_view_component (span< const byte > v, enum termination zt) noexcept
 
template<class It , class End , typename std::enable_if<(is_source_chartype_acceptable< typename It::value_type >), bool >::type = true, typename std::enable_if<(is_source_chartype_acceptable< typename End::value_type >), bool >::type = true>
constexpr path_view_component (It b, End e, enum termination zt, format fmt=binary_format) noexcept
 
template<class It , class End , typename std::enable_if<(is_source_chartype_acceptable< std::decay_t< It > >), bool >::type = true, typename std::enable_if<(is_source_chartype_acceptable< std::decay_t< End > >), bool >::type = true>
constexpr path_view_component (It *b, End *e, enum termination zt, format fmt=binary_format) noexcept
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<class It , class End , typename std::enable_if<(std::is_same< typename It::value_type, byte >::value), bool >::type = true, typename std::enable_if<(std::is_same< typename End::value_type, byte >::value), bool >::type = true>
constexpr path_view_component (It b, End e, enum termination zt) noexcept
 
template<class It , class End , typename std::enable_if<(std::is_same< std::decay_t< It >, byte >::value), bool >::type = true, typename std::enable_if<(std::is_same< std::decay_t< End >, byte >::value), bool >::type = true>
constexpr path_view_component (It *b, End *e, enum termination zt) noexcept
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
 path_view_component (const path_view_component &)=default
 
 path_view_component (path_view_component &&)=default
 
path_view_componentoperator= (const path_view_component &)=default
 
path_view_componentoperator= (path_view_component &&)=default
 
const byte_raw_data () const noexcept
 
constexpr void swap (path_view_component &o) noexcept
 Swap the view with another.
 
constexpr bool empty () const noexcept
 True if empty.
 
constexpr size_t native_size () const noexcept
 Returns the size of the view in characters.
 
constexpr format formatting () const noexcept
 How path separators shall be interpreted.
 
constexpr bool has_null_termination () const noexcept
 True if input is declared to be null terminated.
 
constexpr enum termination termination () const noexcept
 The zero termination during construction.
 
constexpr bool has_stem () const noexcept
 True if stem() returns a non-empty path.
 
constexpr bool has_extension () const noexcept
 True if extension() returns a non-empty path.
 
constexpr bool contains_glob () const noexcept
 True if the view contains any of the characters *, ?, (POSIX only: [ or ]).
 
constexpr path_view_component stem () const noexcept
 Returns a view of the filename without any file extension.
 
constexpr path_view_component extension () const noexcept
 Returns a view of the file extension part of this view.
 
filesystem::path path () const
 Return the path view as a path. Allocates and copies memory!
 
template<class T = typename filesystem::path::value_type, class Deleter = default_rendered_path_deleter<T[]>, size_t _internal_buffer_size = default_internal_buffer_size, typename std::enable_if<(is_source_acceptable< T >), bool >::type = true>
constexpr int compare (path_view_component p, const std::locale &loc) const
 
template<class T = typename filesystem::path::value_type, class Deleter = default_rendered_path_deleter<T[]>, size_t _internal_buffer_size = default_internal_buffer_size, typename std::enable_if<(is_source_acceptable< T >), bool >::type = true>
constexpr int compare (path_view_component p) const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<enum path_view_component::termination ZeroTermination, class T = typename filesystem::path::value_type, class AllocatorOrDeleter = default_rendered_path_deleter<T[]>, size_t _internal_buffer_size = default_internal_buffer_size, class... Args, typename std::enable_if<(is_source_acceptable< T >), bool >::type = true, typename = decltype( std::is_constructible<rendered_path<ZeroTermination, T, AllocatorOrDeleter, _internal_buffer_size>, path_view_component, Args...>::value )>
rendered_path< ZeroTermination, T, AllocatorOrDeleter, _internal_buffer_size > render (path_view_component view, Args &&...args) const
 Convenience function.
 
template<class T = typename filesystem::path::value_type, class AllocatorOrDeleter = default_rendered_path_deleter<T[]>, size_t _internal_buffer_size = default_internal_buffer_size, class... Args, typename std::enable_if<(is_source_acceptable< T >), bool >::type = true, typename = decltype( std::is_constructible<rendered_path<termination::zero_terminated, T, AllocatorOrDeleter, _internal_buffer_size>, path_view_component, Args...>::value )>
rendered_path< termination::zero_terminated, T, AllocatorOrDeleter, _internal_buffer_size > render_null_terminated (Args &&...args) const
 Convenience function.
 
template<class T = typename filesystem::path::value_type, class AllocatorOrDeleter = default_rendered_path_deleter<T[]>, size_t _internal_buffer_size = default_internal_buffer_size, class... Args, typename std::enable_if<(is_source_acceptable< T >), bool >::type = true, typename = decltype( std::is_constructible<rendered_path<termination::zero_terminated, T, AllocatorOrDeleter, _internal_buffer_size>, path_view_component, Args...>::value )>
rendered_path< termination::not_zero_terminated, T, AllocatorOrDeleter, _internal_buffer_size > render_unterminated (Args &&...args) const
 Convenience function.
 

Static Public Attributes

static constexpr auto preferred_separator = filesystem::path::preferred_separator
 The preferred separator type.
 
template<class Char >
static constexpr bool is_source_chartype_acceptable = detail::is_source_chartype_acceptable<Char>::value
 
template<class Char >
static constexpr bool is_source_acceptable = detail::is_source_acceptable<Char>::value
 
static constexpr size_t default_internal_buffer_size = 1024
 The default internal buffer size used by rendered_path.
 

Friends

class path_view
 
template<enum path_view_component::termination ZeroTermination, class T , class Deleter , size_t _internal_buffer_size, typename std::enable_if<(is_source_acceptable< T >), bool >::type >
class rendered_path
 
constexpr bool llfio_v2_xxx::operator== (path_view_component x, path_view_component y) noexcept
 
constexpr bool llfio_v2_xxx::operator!= (path_view_component x, path_view_component y) noexcept
 
constexpr bool llfio_v2_xxx ::operator< (path_view_component x, path_view_component y) noexcept
 
constexpr size_t hash_value (path_view_component x) noexcept
 Hashes a path_view_component.
 
template<class F >
constexpr auto llfio_v2_xxx::visit (path_view_component view, F &&f)
 
template<class F >
constexpr auto llfio_v2_xxx::visit (F &&f, path_view_component view)
 
std::ostream & llfio_v2_xxx ::operator<< (std::ostream &s, const path_view_component &v)
 

Detailed Description

An iterated part of a path_view.

Member Enumeration Documentation

◆ format

How to interpret separators.

Enumerator
native_format 

Separate at the native path separator only.

generic_format 

Separate at the generic path separator only.

auto_format 

Separate at both the native and generic path separators.

binary_format 

Do not separate at any path separator.

290 {
291 unknown,
292 native_format, //!< Separate at the native path separator only.
293 generic_format, //!< Separate at the generic path separator only.
294 auto_format, //!< Separate at both the native and generic path separators.
295 binary_format //!< Do not separate at any path separator.
296 };
@ generic_format
Separate at the generic path separator only.
Definition path_view.hpp:293
@ binary_format
Do not separate at any path separator.
Definition path_view.hpp:295
@ auto_format
Separate at both the native and generic path separators.
Definition path_view.hpp:294
@ native_format
Separate at the native path separator only.
Definition path_view.hpp:292

◆ termination

The zero termination to use.

Enumerator
zero_terminated 

The input is zero terminated, or requested output ought to be zero terminated.

not_zero_terminated 

The input is not zero terminated, or requested output ought to not be zero terminated.

300 {
301 zero_terminated, //!< The input is zero terminated, or requested output ought to be zero terminated.
302 not_zero_terminated, //!< The input is not zero terminated, or requested output ought to not be zero terminated.
303 };
@ not_zero_terminated
The input is not zero terminated, or requested output ought to not be zero terminated.
Definition path_view.hpp:302
@ zero_terminated
The input is zero terminated, or requested output ought to be zero terminated.
Definition path_view.hpp:301

Constructor & Destructor Documentation

◆ path_view_component() [1/17]

constexpr llfio_v2_xxx::path_view_component::path_view_component ( )
inlineconstexprnoexcept

Constructs an empty path view component (DEVIATES from P1030, is not trivial due to C++ 14 compatibility)

332 : _zero_terminated(false)
333 , _passthrough(false)
334 , _char(false)
335 , _wchar(false)
336 , _utf8(false)
337 , _utf16(false)
338 , _reserved1(0)
339 {
340 } // NOLINT

◆ path_view_component() [2/17]

constexpr llfio_v2_xxx::path_view_component::path_view_component ( path_view_component  p,
format  fmt 
)
inlineconstexprnoexcept

Constructs a path view component identical to the input, except with different format interpretation.

343 : _charstr(p._charstr)
344 , _length(p._length)
345 , _zero_terminated(p._zero_terminated)
346 , _passthrough(p._passthrough)
347 , _char(p._char)
348 , _wchar(p._wchar)
349 , _utf8(p._utf8)
350 , _utf16(p._utf16)
351 , _reserved1(p._reserved1)
352 , _format(fmt)
353 {
354 }

◆ path_view_component() [3/17]

llfio_v2_xxx::path_view_component::path_view_component ( const filesystem::path &  v,
format  fmt = auto_format 
)
inlinenoexcept

Implicitly constructs a path view from a path. The input path MUST continue to exist for this view to be valid (DEVIATES from P1030 due to filesystem::path not exposing its path formatting).

359 : path_view_component(v.native().c_str(), v.native().size(), zero_terminated, fmt)
360 {
361 }
constexpr path_view_component() noexcept
Constructs an empty path view component (DEVIATES from P1030, is not trivial due to C++ 14 compatibil...
Definition path_view.hpp:331

◆ path_view_component() [4/17]

template<class Char , typename std::enable_if<(is_source_chartype_acceptable< Char >), bool >::type = true>
constexpr llfio_v2_xxx::path_view_component::path_view_component ( const std::basic_string< Char > &  v,
format  fmt = binary_format 
)
inlineconstexprnoexcept

Constructs from a basic string if the character type is one of char, wchar_t, char8_t or char16_t.

368 : path_view_component(v.data(), v.size(), zero_terminated, fmt)
369 {
370 }

◆ path_view_component() [5/17]

constexpr llfio_v2_xxx::path_view_component::path_view_component ( const char *  b,
size_t  l,
enum termination  zt,
format  fmt = binary_format 
)
inlineconstexprnoexcept

Constructs from a lengthed array of one of char, wchar_t, char8_t or char16_t. The input string MUST continue to exist for this view to be valid.

375 : _charstr((l == 0) ? nullptr : b)
376 , _length((l == 0) ? 0 : l)
377 , _zero_terminated((l == 0) ? false : (zt == zero_terminated))
378 , _passthrough(false)
379 , _char((l == 0) ? false : true)
380 , _wchar(false)
381 , _utf8(false)
382 , _utf16(false)
383 , _reserved1(0)
384 , _format(fmt)
385 {
386 }

◆ path_view_component() [6/17]

constexpr llfio_v2_xxx::path_view_component::path_view_component ( const wchar_t *  b,
size_t  l,
enum termination  zt,
format  fmt = binary_format 
)
inlineconstexprnoexcept

Constructs from a lengthed array of one of char, wchar_t, char8_t or char16_t. The input string MUST continue to exist for this view to be valid.

391 : _wcharstr((l == 0) ? nullptr : b)
392 , _length((l == 0) ? 0 : l)
393 , _zero_terminated((l == 0) ? false : (zt == zero_terminated))
394 , _passthrough(false)
395 , _char(false)
396 , _wchar((l == 0) ? false : true)
397 , _utf8(false)
398 , _utf16(false)
399 , _reserved1(0)
400 , _format(fmt)
401 {
402 }

◆ path_view_component() [7/17]

constexpr llfio_v2_xxx::path_view_component::path_view_component ( const char8_t *  b,
size_t  l,
enum termination  zt,
format  fmt = binary_format 
)
inlineconstexprnoexcept

Constructs from a lengthed array of one of char, wchar_t, char8_t or char16_t. The input string MUST continue to exist for this view to be valid.

407 : _char8str((l == 0) ? nullptr : b)
408 , _length((l == 0) ? 0 : l)
409 , _zero_terminated((l == 0) ? false : (zt == zero_terminated))
410 , _passthrough(false)
411 , _char(false)
412 , _wchar(false)
413 , _utf8((l == 0) ? false : true)
414 , _utf16(false)
415 , _reserved1(0)
416 , _format(fmt)
417 {
418 }

◆ path_view_component() [8/17]

constexpr llfio_v2_xxx::path_view_component::path_view_component ( const char16_t *  b,
size_t  l,
enum termination  zt,
format  fmt = binary_format 
)
inlineconstexprnoexcept

Constructs from a lengthed array of one of char, wchar_t, char8_t or char16_t. The input string MUST continue to exist for this view to be valid.

423 : _char16str((l == 0) ? nullptr : b)
424 , _length((l == 0) ? 0 : l)
425 , _zero_terminated((l == 0) ? false : (zt == zero_terminated))
426 , _passthrough(false)
427 , _char(false)
428 , _wchar(false)
429 , _utf8(false)
430 , _utf16((l == 0) ? false : true)
431 , _reserved1(0)
432 , _format(fmt)
433 {
434 }

◆ path_view_component() [9/17]

constexpr llfio_v2_xxx::path_view_component::path_view_component ( const byte b,
size_t  l,
enum termination  zt 
)
inlineconstexprnoexcept

Constructs from a lengthed array of byte. The input array MUST continue to exist for this view to be valid.

439 : _bytestr((l == 0) ? nullptr : b)
440 , _length((l == 0) ? 0 : l)
441 , _zero_terminated((l == 0) ? false : (zt == zero_terminated))
442 , _passthrough((l == 0) ? false : true)
443 , _char(false)
444 , _wchar(false)
445 , _utf8(false)
446 , _utf16(false)
447 , _reserved1(0)
448 , _format(binary_format)
449 {
450 }

◆ path_view_component() [10/17]

template<class Char , typename std::enable_if<(is_source_chartype_acceptable< Char >), bool >::type = true>
constexpr llfio_v2_xxx::path_view_component::path_view_component ( const Char *  s,
format  fmt = binary_format 
)
inlineconstexprnoexcept

Implicitly constructs a path view from a zero terminated pointer to a character array, which must be one of char, wchar_t, char8_t or char16_t. The input string MUST continue to exist for this view to be valid.

459 : path_view_component(s, detail::constexpr_strlen(s), zero_terminated, fmt)
460 {
461 }

◆ path_view_component() [11/17]

constexpr llfio_v2_xxx::path_view_component::path_view_component ( const byte s)
inlineconstexprnoexcept

Implicitly constructs a path view from a zero terminated pointer to byte array. The input array MUST continue to exist for this view to be valid.

466 : path_view_component(s, detail::constexpr_strlen(s), zero_terminated)
467 {
468 }

◆ path_view_component() [12/17]

template<class Char , typename std::enable_if<(is_source_chartype_acceptable< Char >), bool >::type = true>
constexpr llfio_v2_xxx::path_view_component::path_view_component ( basic_string_view< Char >  v,
enum termination  zt,
format  fmt = binary_format 
)
inlineconstexprnoexcept

Constructs from a basic string view if the character type is one of char, wchar_t, char8_t or char16_t.

476 : path_view_component(v.data(), v.size(), zt, fmt)
477 {
478 }

◆ path_view_component() [13/17]

constexpr llfio_v2_xxx::path_view_component::path_view_component ( span< const byte v,
enum termination  zt 
)
inlineconstexprnoexcept

Constructs from a span<const byte>.

482 : path_view_component(v.data(), v.size(), zt)
483 {
484 }

◆ path_view_component() [14/17]

template<class It , class End , typename std::enable_if<(is_source_chartype_acceptable< typename It::value_type >), bool >::type = true, typename std::enable_if<(is_source_chartype_acceptable< typename End::value_type >), bool >::type = true>
constexpr llfio_v2_xxx::path_view_component::path_view_component ( It  b,
End  e,
enum termination  zt,
format  fmt = binary_format 
)
inlineconstexprnoexcept

Constructs from an iterator sequence if the iterator is contiguous, if its value type is one of char, wchar_t, char8_t or char16_t.

(DEVIATES from P1030, cannot detect contiguous iterator in SFINAE in C++ 14)

494 : path_view_component(addressof(*b), e - b, zt, fmt)
495 {
496 }

◆ path_view_component() [15/17]

template<class It , class End , typename std::enable_if<(is_source_chartype_acceptable< std::decay_t< It > >), bool >::type = true, typename std::enable_if<(is_source_chartype_acceptable< std::decay_t< End > >), bool >::type = true>
constexpr llfio_v2_xxx::path_view_component::path_view_component ( It *  b,
End *  e,
enum termination  zt,
format  fmt = binary_format 
)
inlineconstexprnoexcept

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

501 : path_view_component(b, e - b, zt, fmt)
502 {
503 }

◆ path_view_component() [16/17]

template<class It , class End , typename std::enable_if<(std::is_same< typename It::value_type, byte >::value), bool >::type = true, typename std::enable_if<(std::is_same< typename End::value_type, byte >::value), bool >::type = true>
constexpr llfio_v2_xxx::path_view_component::path_view_component ( It  b,
End  e,
enum termination  zt 
)
inlineconstexprnoexcept

Constructs from an iterator sequence if the iterator is contiguous, if its value type is byte.

(DEVIATES from P1030, cannot detect contiguous iterator in SFINAE in C++ 14)

512 : path_view_component(addressof(*b), e - b, zt, binary_format)
513 {
514 }

◆ path_view_component() [17/17]

template<class It , class End , typename std::enable_if<(std::is_same< std::decay_t< It >, byte >::value), bool >::type = true, typename std::enable_if<(std::is_same< std::decay_t< End >, byte >::value), bool >::type = true>
constexpr llfio_v2_xxx::path_view_component::path_view_component ( It *  b,
End *  e,
enum termination  zt 
)
inlineconstexprnoexcept

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

519 : path_view_component(b, e - b, zt, binary_format)
520 {
521 }

Member Function Documentation

◆ _raw_data()

const byte * llfio_v2_xxx::path_view_component::_raw_data ( ) const
inlinenoexcept
640{ return _bytestr; }

◆ compare() [1/2]

template<class T = typename filesystem::path::value_type, class Deleter = default_rendered_path_deleter<T[]>, size_t _internal_buffer_size = default_internal_buffer_size, typename std::enable_if<(is_source_acceptable< T >), bool >::type = true>
constexpr int llfio_v2_xxx::path_view_component::compare ( path_view_component  p) const
inlineconstexpr

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

834 {
835 return _invoke(
836 [&](const auto &self) {
837 return p._invoke([&](const auto &other) { return _compare<T, Deleter, _internal_buffer_size>(self, termination(), other, p.termination(), nullptr); });
838 });
839 }
termination
The zero termination to use.
Definition path_view.hpp:300

◆ compare() [2/2]

template<class T = typename filesystem::path::value_type, class Deleter = default_rendered_path_deleter<T[]>, size_t _internal_buffer_size = default_internal_buffer_size, typename std::enable_if<(is_source_acceptable< T >), bool >::type = true>
constexpr int llfio_v2_xxx::path_view_component::compare ( path_view_component  p,
const std::locale &  loc 
) const
inlineconstexpr

Compares the two path views for equivalence or ordering using T as the destination encoding, if necessary.

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 rendered_path<T, Delete, _internal_buffer_size>, and then a lexicographical comparison is performed.

This can, for obvious reasons, be expensive. It can also throw exceptions, as rendered_path does.

If the destination encoding is byte, memcmp() is used, and rendered_path is never invoked as the two sources are byte compared directly.

824 {
825 return _invoke(
826 [&](const auto &self)
827 { return p._invoke([&](const auto &other) { return _compare<T, Deleter, _internal_buffer_size>(self, termination(), other, p.termination(), &loc); }); });
828 }

◆ contains_glob()

constexpr bool llfio_v2_xxx::path_view_component::contains_glob ( ) const
inlineconstexprnoexcept

True if the view contains any of the characters *, ?, (POSIX only: [ or ]).

674 {
675 return _invoke(
676 [](const auto &v)
677 {
678 using value_type = typename std::remove_reference<decltype(*v.data())>::type;
679#ifdef _WIN32
680 const value_type *tofind = (sizeof(value_type) > 1) ? (const value_type *) L"*?" : (const value_type *) "*?";
681#else
682 const value_type *tofind = (sizeof(value_type) > 1) ? (const value_type *) L"*?[]" : (const value_type *) "*?[]";
683#endif
684 return string_view::npos != v.find_first_of(tofind);
685 });
686 }

◆ empty()

constexpr bool llfio_v2_xxx::path_view_component::empty ( ) const
inlineconstexprnoexcept

True if empty.

651{ return _length == 0; }

◆ extension()

constexpr path_view_component llfio_v2_xxx::path_view_component::extension ( ) const
inlineconstexprnoexcept

Returns a view of the file extension part of this view.

705 {
706 auto self = _filename();
707 return self._invoke(
708 [this](const auto &v)
709 {
710 auto dot_idx = v.rfind('.');
711 if(_npos == dot_idx || dot_idx == 0 || (dot_idx == 1 && v[dot_idx - 1] == '.'))
712 {
713 return path_view_component();
714 }
715 return path_view_component(v.data() + dot_idx, v.size() - dot_idx, termination());
716 });
717 }

◆ formatting()

constexpr format llfio_v2_xxx::path_view_component::formatting ( ) const
inlineconstexprnoexcept

How path separators shall be interpreted.

660{ return _format; }

◆ has_extension()

constexpr bool llfio_v2_xxx::path_view_component::has_extension ( ) const
inlineconstexprnoexcept

True if extension() returns a non-empty path.

670{ return !extension().empty(); }
constexpr path_view_component extension() const noexcept
Returns a view of the file extension part of this view.
Definition path_view.hpp:704
constexpr bool empty() const noexcept
True if empty.
Definition path_view.hpp:651

◆ has_null_termination()

constexpr bool llfio_v2_xxx::path_view_component::has_null_termination ( ) const
inlineconstexprnoexcept

True if input is declared to be null terminated.

663{ return _zero_terminated; }

◆ has_stem()

constexpr bool llfio_v2_xxx::path_view_component::has_stem ( ) const
inlineconstexprnoexcept

True if stem() returns a non-empty path.

668{ return !stem().empty(); }
constexpr path_view_component stem() const noexcept
Returns a view of the filename without any file extension.
Definition path_view.hpp:689

◆ native_size()

constexpr size_t llfio_v2_xxx::path_view_component::native_size ( ) const
inlineconstexprnoexcept

Returns the size of the view in characters.

655 {
656 return _invoke([](const auto &v) { return v.size(); });
657 }

◆ path()

filesystem::path llfio_v2_xxx::path_view_component::path ( ) const
inline

Return the path view as a path. Allocates and copies memory!

784 {
785 return _invoke(
786 [&](const auto &v)
787 {
788 return _path_from_char_array(v,
789 [](format f) -> filesystem::path::format
790 {
791 switch(f)
792 {
794 return filesystem::path::format::generic_format;
796 return filesystem::path::format::native_format;
797 default:
798 return filesystem::path::format::auto_format;
799 }
800 }(formatting()));
801 });
802 }
format
How to interpret separators.
Definition path_view.hpp:290
constexpr format formatting() const noexcept
How path separators shall be interpreted.
Definition path_view.hpp:660

◆ render()

template<enum path_view_component::termination ZeroTermination, class T = typename filesystem::path::value_type, class AllocatorOrDeleter = default_rendered_path_deleter<T[]>, size_t _internal_buffer_size = default_internal_buffer_size, class... Args, typename std::enable_if<(is_source_acceptable< T >), bool >::type = true, typename = decltype( std::is_constructible<rendered_path<ZeroTermination, T, AllocatorOrDeleter, _internal_buffer_size>, path_view_component, Args...>::value )>
rendered_path< ZeroTermination, T, AllocatorOrDeleter, _internal_buffer_size > llfio_v2_xxx::path_view_component::render ( path_view_component  view,
Args &&...  args 
) const
inline

Convenience function.

1513 {
1514 return rendered_path<ZeroTermination, T, AllocatorOrDeleter, _internal_buffer_size>(view, std::forward<Args>(args)...);
1515 }

◆ render_null_terminated()

template<class T = typename filesystem::path::value_type, class AllocatorOrDeleter = default_rendered_path_deleter<T[]>, size_t _internal_buffer_size = default_internal_buffer_size, class... Args, typename std::enable_if<(is_source_acceptable< T >), bool >::type = true, typename = decltype( std::is_constructible<rendered_path<termination::zero_terminated, T, AllocatorOrDeleter, _internal_buffer_size>, path_view_component, Args...>::value )>
rendered_path< termination::zero_terminated, T, AllocatorOrDeleter, _internal_buffer_size > llfio_v2_xxx::path_view_component::render_null_terminated ( Args &&...  args) const
inline

Convenience function.

1523 {
1524 return rendered_path<termination::zero_terminated, T, AllocatorOrDeleter, _internal_buffer_size>(*this, std::forward<Args>(args)...);
1525 }

◆ render_unterminated()

template<class T = typename filesystem::path::value_type, class AllocatorOrDeleter = default_rendered_path_deleter<T[]>, size_t _internal_buffer_size = default_internal_buffer_size, class... Args, typename std::enable_if<(is_source_acceptable< T >), bool >::type = true, typename = decltype( std::is_constructible<rendered_path<termination::zero_terminated, T, AllocatorOrDeleter, _internal_buffer_size>, path_view_component, Args...>::value )>
rendered_path< termination::not_zero_terminated, T, AllocatorOrDeleter, _internal_buffer_size > llfio_v2_xxx::path_view_component::render_unterminated ( Args &&...  args) const
inline

Convenience function.

1533 {
1534 return rendered_path<termination::not_zero_terminated, T, AllocatorOrDeleter, _internal_buffer_size>(*this, std::forward<Args>(args)...);
1535 }

◆ stem()

constexpr path_view_component llfio_v2_xxx::path_view_component::stem ( ) const
inlineconstexprnoexcept

Returns a view of the filename without any file extension.

690 {
691 auto self = _filename();
692 return self._invoke(
693 [self](const auto &v)
694 {
695 auto dot_idx = v.rfind('.');
696 if(_npos == dot_idx || dot_idx == 0 || (dot_idx == 1 && v[dot_idx - 1] == '.'))
697 {
698 return self;
699 }
700 return path_view_component(v.data(), dot_idx, not_zero_terminated);
701 });
702 }

◆ swap()

constexpr void llfio_v2_xxx::path_view_component::swap ( path_view_component o)
inlineconstexprnoexcept

Swap the view with another.

644 {
645 path_view_component x = *this;
646 *this = o;
647 o = x;
648 }

◆ termination()

constexpr enum termination llfio_v2_xxx::path_view_component::termination ( ) const
inlineconstexprnoexcept

The zero termination during construction.

665{ return _zero_terminated ? zero_terminated : not_zero_terminated; }

Friends And Related Symbol Documentation

◆ hash_value

constexpr size_t hash_value ( path_view_component  x)
friend

Hashes a path_view_component.

1819{
1820 return view._invoke(
1821 [](auto sv) -> size_t
1822 {
1823 // std::hash isn't available for all kinds of string view on older compilers :(
1824 const auto hash = QUICKCPPLIB_NAMESPACE::algorithm::hash::fast_hash::hash((const char *) sv.data(), sv.size() * sizeof(*sv.data()));
1825 return *(size_t *) &hash;
1826 });
1827}

Member Data Documentation

◆ _bytestr

const byte* llfio_v2_xxx::path_view_component::_bytestr {nullptr}
312{nullptr};

◆ is_source_acceptable

template<class Char >
constexpr bool llfio_v2_xxx::path_view_component::is_source_acceptable = detail::is_source_acceptable<Char>::value
staticconstexpr

True if path views can be constructed from this source. i.e. is_source_chartype_acceptable, or is byte

◆ is_source_chartype_acceptable

template<class Char >
constexpr bool llfio_v2_xxx::path_view_component::is_source_chartype_acceptable = detail::is_source_chartype_acceptable<Char>::value
staticconstexpr

True if path views can be constructed from this character type. i.e. is one of char, wchar_t, char8_t, char16_t


The documentation for this class was generated from the following file: