37 template<
typename U,
typename R = U[1]>
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);
128 return self()[index];
133 requires(
encoding::NullTerminated<Enc>)
135 if (self().
empty()) {
145 constexpr auto erase(Iterator first) {
149 constexpr auto erase(Iterator first, Iterator last) -> Iterator {
170 auto last = [&] -> Iterator {
176 if (!first.has_value()) {
179 return erase(*first, last);
182 template<concepts::ContainerOf<CodePo
int> Con>
191 template<concepts::ContainerOf<CodePo
int> Con>
197 return this->
back() % [&](
auto value) {
212 template<concepts::ContainerOf<CodePo
int> Con>
223 auto [first, last] = result;
233 auto [first, last] = result;
247 }) % [&](
auto result) {
248 auto [first, last] = result;
257 template<concepts::ContainerOf<CodePo
int> Con>
265 constexpr auto replace(Iterator first, Iterator last, CodePoint code_point) {
274 template<concepts::ContainerOf<CodePo
int> Con>
276 auto it = this->
erase(first, last);
280 template<concepts::ContainerOf<CodePo
int> Con>
284 auto last = [&] -> Iterator {
295 template<
typename F, SameAs<Tag<erase_if>> T = Tag<erase_if>>
298 auto last = self.end();
306 while (fast != last) {
313 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:196
constexpr auto push_back(CodePoint code_point)
Definition mutable_string_interface.h:143
constexpr friend auto tag_invoke(T, Self &self, F &&function)
Definition mutable_string_interface.h:297
constexpr auto at(usize index)
Definition mutable_string_interface.h:126
constexpr auto replace(Iterator first, Iterator last, Con &&container)
Definition mutable_string_interface.h:275
constexpr auto insert(Iterator it, Con &&container)
Definition mutable_string_interface.h:213
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:166
constexpr auto replace(usize offset, usize length, CodePoint code_point)
Definition mutable_string_interface.h:268
constexpr auto insert(usize offset, CodePoint code_point)
Definition mutable_string_interface.h:204
constexpr auto replace(usize offset, usize length, Con &&container)
Definition mutable_string_interface.h:282
constexpr auto insert(usize offset, Con &&container)
Definition mutable_string_interface.h:259
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:119
constexpr auto c_str() const
Definition mutable_string_interface.h:132
constexpr auto operator[](usize index) -> CodePoint &requires(encoding::Contiguous< Enc >)
Definition mutable_string_interface.h:121
constexpr auto insert(Iterator it, CodePoint code_point)
Definition mutable_string_interface.h:203
constexpr auto erase(Iterator first)
Definition mutable_string_interface.h:145
constexpr auto operator+=(Con &&container) -> decltype(auto)
Definition mutable_string_interface.h:192
constexpr auto append(Con &&container) -> decltype(auto)
Definition mutable_string_interface.h:183
constexpr auto replace(Iterator first, Iterator last, CodePoint code_point)
Definition mutable_string_interface.h:265
constexpr auto erase(Iterator first, Iterator last) -> Iterator
Definition mutable_string_interface.h:149
Definition expected_forward_declaration.h:8
Definition optional_forward_declaration.h:5
Definition tuple_forward_declaration.h:5
Definition unexpected.h:14
Definition operations.h:11
Definition container_of.h:9
Definition mutable_string_interface.h:35
constexpr R empty_null_terminated_array
Definition mutable_string_interface.h:38
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
Definition encoding.h:234
Definition in_place_type.h:5