7#include "coroutine.hpp"
17namespace tt::ranges::views {
25 std::ranges::range Haystack,
26 std::ranges::range Needle,
27 typename SubHaystack = std::conditional_t<
28 is_character_v<std::ranges::range_value_t<Haystack>>,
29 make_string_view_t<std::ranges::range_value_t<Haystack>>,
30 std::ranges::subrange<std::ranges::iterator_t<Haystack>, std::ranges::iterator_t<Haystack>>>>
31[[nodiscard]] generator<SubHaystack> split(Haystack &haystack, Needle needle)
noexcept
36 auto needle_first = std::ranges::begin(needle);
37 auto needle_last = std::ranges::end(needle);
38 auto needle_length =
std::distance(needle_first, needle_last);
41 auto sep_start =
std::search(it, last, needle_first, needle_last);
42 if (sep_start != last) {
43 co_yield SubHaystack{it, sep_start};
44 it = sep_start + needle_length;
57[[nodiscard]]
inline generator<std::string_view> split(std::string_view haystack,
char const *needle =
" ") noexcept
62[[nodiscard]]
inline generator<std::string_view> split(
std::string &haystack,
char const *needle =
" ") noexcept
67[[nodiscard]]
inline generator<std::wstring_view> split(std::wstring_view haystack,
wchar_t const *needle = L
" ")
noexcept
72[[nodiscard]]
inline generator<std::wstring_view> split(
std::wstring &haystack,
wchar_t const *needle = L
" ")
noexcept
77[[nodiscard]]
inline generator<std::u8string_view> split(std::u8string_view haystack,
char8_t const *needle = u8
" ")
noexcept
79 return split(haystack, std::u8string{needle});
82[[nodiscard]]
inline generator<std::u8string_view> split(std::u8string &haystack,
char8_t const *needle = u8
" ")
noexcept
84 return split(haystack, std::u8string{needle});
87[[nodiscard]]
inline generator<std::u16string_view> split(std::u16string_view haystack,
char16_t const *needle = u
" ")
noexcept
92[[nodiscard]]
inline generator<std::u16string_view> split(
std::u16string &haystack,
char16_t const *needle = u
" ")
noexcept
97[[nodiscard]]
inline generator<std::u32string_view> split(std::u32string_view haystack,
char32_t const *needle = U
" ")
noexcept
102[[nodiscard]]
inline generator<std::u32string_view> split(
std::u32string &haystack,
char32_t const *needle = U
" ")
noexcept
111namespace views = tt::ranges::views;
116template<
typename View>
130template<
typename View>
T back_inserter(T... args)