37 template<
typename U,
typename R = U[1]>
38 constexpr inline R empty_null_terminated_array = { U(0) };
41template<
typename Self, concepts::Encoding Enc>
49 constexpr auto self() -> Self& {
return static_cast<Self&
>(*this); }
50 constexpr auto self()
const -> Self
const& {
return static_cast<Self const&
>(*this); }
56 auto result = Self(di::forward<Args>(args)...);
67 return util::move(result);
76 auto result = Self(di::forward<Args>(args)...);
88 return util::move(result);
97 return Unexpected(BasicError::InvalidArgument);
101 return util::move(result);
110 auto result = Self(di::forward<Args>(args)...);
114 return util::move(result);
132 return self()[index];
137 requires(
encoding::NullTerminated<Enc>)
139 if (self().
empty()) {
140 return detail::empty_null_terminated_array<CodeUnit>;
149 constexpr auto erase(Iterator first) {
153 constexpr auto erase(Iterator first, Iterator last) -> Iterator {
174 auto last = [&] -> Iterator {
180 if (!first.has_value()) {
183 return erase(*first, last);
186 template<concepts::ContainerOf<CodePo
int> Con>
195 template<concepts::ContainerOf<CodePo
int> Con>
201 return this->
back() % [&](
auto value) {
216 template<concepts::ContainerOf<CodePo
int> Con>
227 auto [first, last] = result;
237 auto [first, last] = result;
251 }) % [&](
auto result) {
252 auto [first, last] = result;
261 template<concepts::ContainerOf<CodePo
int> Con>
269 constexpr auto replace(Iterator first, Iterator last, CodePoint code_point) {
278 template<concepts::ContainerOf<CodePo
int> Con>
280 auto it = this->
erase(first, last);
284 template<concepts::ContainerOf<CodePo
int> Con>
288 auto last = [&] -> Iterator {
299 template<
typename F, SameAs<Tag<erase_if>> T = Tag<erase_if>>
302 auto last = self.end();
310 while (fast != last) {
317 slow =
copy(fast_start, fast_end, slow).out;
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition constant_string_interface.h:33
constexpr auto size() const -> usize requires(encoding::Contiguous< Enc >)
Definition constant_string_interface.h:42
constexpr auto iterator_at_offset(usize index) const
Definition constant_string_interface.h:170
constexpr auto back() const
Definition constant_string_interface.h:73
constexpr auto view() const
Definition constant_string_interface.h:168
constexpr auto end() const
Definition constant_string_interface.h:70
constexpr auto empty() const -> bool
Definition constant_string_interface.h:65
Definition mutable_string_interface.h:42
constexpr auto pop_back()
Definition mutable_string_interface.h:200
constexpr auto push_back(CodePoint code_point)
Definition mutable_string_interface.h:147
constexpr friend auto tag_invoke(T, Self &self, F &&function)
Definition mutable_string_interface.h:301
constexpr auto at(usize index)
Definition mutable_string_interface.h:130
constexpr auto replace(Iterator first, Iterator last, Con &&container)
Definition mutable_string_interface.h:279
constexpr auto insert(Iterator it, Con &&container)
Definition mutable_string_interface.h:217
constexpr friend auto tag_invoke(types::Tag< util::create_in_place >, InPlaceType< Self >, Con &&container, Args &&... args)
Definition mutable_string_interface.h:74
constexpr friend auto tag_invoke(types::Tag< util::create_in_place >, InPlaceType< Self >, Con &&container, Args &&... args)
Definition mutable_string_interface.h:108
constexpr auto erase(usize offset, Optional< usize > count={})
Definition mutable_string_interface.h:170
constexpr auto replace(usize offset, usize length, CodePoint code_point)
Definition mutable_string_interface.h:272
constexpr auto insert(usize offset, CodePoint code_point)
Definition mutable_string_interface.h:208
constexpr auto replace(usize offset, usize length, Con &&container)
Definition mutable_string_interface.h:286
constexpr auto insert(usize offset, Con &&container)
Definition mutable_string_interface.h:263
constexpr friend auto tag_invoke(types::Tag< util::create_in_place >, InPlaceType< Self >, Con &&container, encoding::AssumeValid, Args &&... args)
Definition mutable_string_interface.h:54
constexpr void clear()
Definition mutable_string_interface.h:121
constexpr auto c_str() const
Definition mutable_string_interface.h:136
constexpr auto operator[](usize index) -> CodePoint &requires(encoding::Contiguous< Enc >)
Definition mutable_string_interface.h:123
constexpr auto insert(Iterator it, CodePoint code_point)
Definition mutable_string_interface.h:207
constexpr auto erase(Iterator first)
Definition mutable_string_interface.h:149
constexpr auto operator+=(Con &&container) -> decltype(auto)
Definition mutable_string_interface.h:196
constexpr auto append(Con &&container) -> decltype(auto)
Definition mutable_string_interface.h:187
constexpr auto clone() const
Definition mutable_string_interface.h:119
constexpr auto replace(Iterator first, Iterator last, CodePoint code_point)
Definition mutable_string_interface.h:269
constexpr auto erase(Iterator first, Iterator last) -> Iterator
Definition mutable_string_interface.h:153
Definition expected_forward_declaration.h:8
Definition optional_forward_declaration.h:5
Definition unexpected.h:14
Definition operations.h:11
Definition container_of.h:9
constexpr auto validate
Definition encoding.h:135
constexpr auto convert_to_code_units
Definition encoding.h:139
constexpr auto make_iterator
Definition encoding.h:137
Definition constant_string_interface.h:31
constexpr auto data(concepts::detail::ConstantString auto const &string)
Definition string_data.h:6
constexpr auto append(Str &string, Con &&container)
Definition string_append.h:13
constexpr auto push_back(Str &string, P code_point)
Definition string_push_back.h:11
constexpr auto string_to_vector_iterator(Str &string, It it)
Definition string_to_vector_iterator.h:9
constexpr void clear(Str &string)
Definition string_clear.h:8
constexpr auto append_container(Vec &vector, Con &&container) -> R
Definition vector_append_container.h:21
constexpr auto pop_back(concepts::detail::MutableVector auto &vector)
Definition vector_pop_back.h:11
constexpr auto size(concepts::detail::ConstantVector auto const &vector) -> size_t
Definition vector_size.h:7
constexpr auto erase(Vec &vector, CIter cstart, CIter cend) -> Iter
Definition vector_erase.h:14
constexpr auto emplace_back(Vec &vector, Args &&... args) -> decltype(auto)
Definition vector_emplace_back.h:17
constexpr auto insert_container(Vec &vector, Cit it, Con &&container) -> R
Definition vector_append_container.h:31
constexpr auto begin(concepts::detail::ConstantVector auto &vector)
Definition vector_begin.h:7
constexpr auto data(concepts::detail::ConstantVector auto &vector)
Definition vector_data.h:6
constexpr auto join
Definition join.h:30
constexpr auto transform
Definition transform.h:28
constexpr auto single
Definition single.h:23
constexpr auto concat
Definition concat.h:35
constexpr auto all
Definition all.h:35
constexpr auto prev
Definition prev.h:28
constexpr auto next
Definition next.h:35
constexpr auto replace
Definition replace.h:36
constexpr auto erase
Definition erase.h:76
constexpr auto count
Definition count.h:37
constexpr auto copy
Definition copy.h:30
constexpr auto bind_front(F &&f, Args &&... args)
Definition bind_front.h:68
size_t usize
Definition integers.h:33
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto invoke_as_fallible
Definition invoke_as_fallible.h:37
constexpr auto ref
Definition reference_wrapper.h:98
constexpr auto invoke
Definition invoke.h:100
constexpr auto as_fallible
Definition as_fallible.h:26
constexpr auto try_infallible
Definition try_infallible.h:31
constexpr auto find_if
Definition find_if.h:31
constexpr auto lift_bool
Definition lift_bool.h:13
constexpr auto create(Args &&... args)
Definition create.h:21
Definition encoding.h:234
Definition in_place_type.h:5