12template<concepts::Encoding Enc>
15template<
typename Self, concepts::Encoding Enc>
24 constexpr auto self() -> Self& {
return static_cast<Self&
>(*this); }
25 constexpr auto self()
const -> Self
const& {
return static_cast<Self const&
>(*this); }
27 constexpr auto data()
const -> View {
return self().data(); }
30 constexpr auto empty() const ->
bool {
return data().empty(); }
32 constexpr auto view() const& -> PathView {
return PathView(data()); }
33 constexpr operator PathView() const& {
return view(); }
40 constexpr auto back()
const {
46 constexpr auto begin()
const {
return PathIterator(data(), { data().begin(), m_first_component_end }); }
47 constexpr auto end()
const {
return PathIterator(data(), { data().end(), data().end() }); }
49 constexpr auto is_absolute() const ->
bool {
return data().starts_with(CodePoint(
'/')); }
54 auto trailing_slash = data().rfind(CodePoint(
'/'));
55 if (!trailing_slash) {
58 return data().substr(trailing_slash.end());
67 auto split = split_filename(*
filename);
76 auto split = split_filename(*
filename);
82 auto result = PathView(strip_filename(data()));
100 if (b != prefix.end()) {
103 return PathView(View(a.current_data(), this->end().current_data()));
120 Iterator last) -> PathView {
121 return PathView(util::move(first), util::move(last));
125 auto last_dot_view =
filename.rfind(CodePoint(
'.'));
126 if (!last_dot_view || last_dot_view.begin() ==
filename.begin()) {
132 constexpr static auto strip_filename(View
view) -> View {
133 while (
view.ends_with(CodePoint(
'/'))) {
136 while (!
view.empty() && !
view.ends_with(CodePoint(
'/'))) {
139 while (
view.size() > 2 &&
view.ends_with(CodePoint(
'/'))) {
145 ViewIter m_first_component_end {};
Definition constant_path_interface.h:16
constexpr auto starts_with(PathView prefix) const -> bool
Definition constant_path_interface.h:89
constexpr auto filename_ends_with(View suffix) const -> bool
Definition constant_path_interface.h:92
constexpr auto front() const
Definition constant_path_interface.h:35
constexpr auto filename() const -> Optional< View >
Definition constant_path_interface.h:52
constexpr auto extension() const -> Optional< View >
Definition constant_path_interface.h:62
constexpr auto is_absolute() const -> bool
Definition constant_path_interface.h:49
constexpr auto begin() const
Definition constant_path_interface.h:46
constexpr auto back() const
Definition constant_path_interface.h:40
constexpr auto view() const &-> PathView
Definition constant_path_interface.h:32
constexpr auto stem() const -> Optional< View >
Definition constant_path_interface.h:71
constexpr void compute_first_component_end()
Definition constant_path_interface.h:107
constexpr auto is_relative() const -> bool
Definition constant_path_interface.h:50
constexpr auto ends_with(PathView suffix) const -> bool
Definition constant_path_interface.h:90
constexpr friend auto operator<=>(Self const &a, Self const &b)
Definition constant_path_interface.h:117
constexpr auto strip_prefix(PathView prefix) -> Optional< PathView >
Definition constant_path_interface.h:98
constexpr auto empty() const -> bool
Definition constant_path_interface.h:30
constexpr auto parent_path() const -> Optional< PathView >
Definition constant_path_interface.h:80
constexpr auto end() const
Definition constant_path_interface.h:47
constexpr friend auto operator==(Self const &a, Self const &b) -> bool
Definition constant_path_interface.h:116
constexpr friend auto tag_invoke(types::Tag< container::reconstruct >, InPlaceType< Self >, Iterator first, Iterator last) -> PathView
Definition constant_path_interface.h:119
Definition path_iterator.h:17
Definition path_view_impl.h:22
Definition string_view_impl.h:19
Definition optional_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
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
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
Definition in_place_type.h:5