12template<concepts::Encoding Enc>
15template<
typename Self, concepts::Encoding Enc>
23 constexpr auto self() -> Self& {
return static_cast<Self&
>(*this); }
24 constexpr auto self()
const -> Self
const& {
return static_cast<Self const&
>(*this); }
26 constexpr auto data()
const -> View {
return self().data(); }
29 constexpr auto empty() const ->
bool {
return data().empty(); }
31 constexpr auto view() const& -> PathView {
return PathView(data()); }
32 constexpr operator PathView() const& {
return view(); }
39 constexpr auto back()
const {
45 constexpr auto begin()
const {
return PathIterator(data(), { data().begin(), m_first_component_end }); }
46 constexpr auto end()
const {
return PathIterator(data(), { data().end(), data().end() }); }
48 constexpr auto is_absolute() const ->
bool {
return data().starts_with(CodePoint(
'/')); }
53 auto trailing_slash = data().rfind(CodePoint(
'/'));
54 if (!trailing_slash) {
57 return data().substr(trailing_slash.end());
66 auto split = split_filename(*
filename);
75 auto split = split_filename(*
filename);
81 auto result = PathView(strip_filename(data()));
99 if (b != prefix.end()) {
102 return PathView(View(a.current_data(), this->end().current_data()));
119 auto last_dot_view =
filename.rfind(CodePoint(
'.'));
120 if (!last_dot_view || last_dot_view.begin() ==
filename.begin()) {
126 constexpr static auto strip_filename(View
view) -> View {
127 while (
view.ends_with(CodePoint(
'/'))) {
130 while (!
view.empty() && !
view.ends_with(CodePoint(
'/'))) {
133 while (
view.size() > 2 &&
view.ends_with(CodePoint(
'/'))) {
139 ViewIter m_first_component_end {};
Definition constant_path_interface.h:16
constexpr auto starts_with(PathView prefix) const -> bool
Definition constant_path_interface.h:88
constexpr auto filename_ends_with(View suffix) const -> bool
Definition constant_path_interface.h:91
constexpr auto front() const
Definition constant_path_interface.h:34
constexpr auto filename() const -> Optional< View >
Definition constant_path_interface.h:51
constexpr auto extension() const -> Optional< View >
Definition constant_path_interface.h:61
constexpr auto is_absolute() const -> bool
Definition constant_path_interface.h:48
constexpr auto begin() const
Definition constant_path_interface.h:45
constexpr auto back() const
Definition constant_path_interface.h:39
constexpr auto view() const &-> PathView
Definition constant_path_interface.h:31
constexpr auto stem() const -> Optional< View >
Definition constant_path_interface.h:70
constexpr void compute_first_component_end()
Definition constant_path_interface.h:106
constexpr auto is_relative() const -> bool
Definition constant_path_interface.h:49
constexpr auto ends_with(PathView suffix) const -> bool
Definition constant_path_interface.h:89
constexpr friend auto operator<=>(Self const &a, Self const &b)
Definition constant_path_interface.h:116
constexpr auto strip_prefix(PathView prefix) -> Optional< PathView >
Definition constant_path_interface.h:97
constexpr auto empty() const -> bool
Definition constant_path_interface.h:29
constexpr auto parent_path() const -> Optional< PathView >
Definition constant_path_interface.h:79
constexpr auto end() const
Definition constant_path_interface.h:46
constexpr friend auto operator==(Self const &a, Self const &b) -> bool
Definition constant_path_interface.h:115
Definition path_iterator.h:17
Definition path_view_impl.h:22
Definition string_view_impl_forward_declaration.h:7
Definition optional_forward_declaration.h:5
Definition tuple_forward_declaration.h:5
constexpr auto prev
Definition prev.h:28
constexpr auto next
Definition next.h:35
constexpr auto find
Definition find.h:35
constexpr auto starts_with
Definition starts_with.h:30
constexpr auto ends_with
Definition ends_with.h:41
constexpr auto mismatch
Definition mismatch.h:40
constexpr auto equal
Definition equal.h:46
constexpr auto compare
Definition compare.h:40
constexpr auto all_of
Definition all_of.h:24
constexpr auto equal
Definition equal.h:23
constexpr auto get(T &&value) -> decltype(auto)
Definition get.h:8
constexpr auto nullopt
Definition nullopt.h:15
constexpr auto lift_bool
Definition lift_bool.h:13