7#include "coroutine.hpp"
8#include "type_traits.hpp"
16namespace tt::ranges::views {
24 std::ranges::range Haystack,
25 std::ranges::range Needle,
26 typename SubHaystack = std::conditional_t<
27 is_character_v<std::ranges::range_value_t<Haystack>>,
28 make_string_view_t<std::ranges::range_value_t<Haystack>>,
29 std::ranges::subrange<std::ranges::iterator_t<Haystack>, std::ranges::iterator_t<Haystack>>>>
30[[nodiscard]] generator<SubHaystack> split(Haystack &haystack, Needle needle)
noexcept
35 auto needle_first = std::ranges::begin(needle);
36 auto needle_last = std::ranges::end(needle);
37 auto needle_length =
std::distance(needle_first, needle_last);
40 auto sep_start =
std::search(it, last, needle_first, needle_last);
41 if (sep_start != last) {
42 co_yield SubHaystack{it, sep_start};
43 it = sep_start + needle_length;
56[[nodiscard]]
inline generator<std::string_view> split(std::string_view haystack,
char const *needle =
" ") noexcept
61[[nodiscard]]
inline generator<std::string_view> split(
std::string &haystack,
char const *needle =
" ") noexcept
66[[nodiscard]]
inline generator<std::wstring_view> split(std::wstring_view haystack,
wchar_t const *needle = L
" ")
noexcept
71[[nodiscard]]
inline generator<std::wstring_view> split(
std::wstring &haystack,
wchar_t const *needle = L
" ")
noexcept
76[[nodiscard]]
inline generator<std::u8string_view> split(std::u8string_view haystack,
char8_t const *needle = u8
" ")
noexcept
78 return split(haystack, std::u8string{needle});
81[[nodiscard]]
inline generator<std::u8string_view> split(std::u8string &haystack,
char8_t const *needle = u8
" ")
noexcept
83 return split(haystack, std::u8string{needle});
86[[nodiscard]]
inline generator<std::u16string_view> split(std::u16string_view haystack,
char16_t const *needle = u
" ")
noexcept
91[[nodiscard]]
inline generator<std::u16string_view> split(
std::u16string &haystack,
char16_t const *needle = u
" ")
noexcept
96[[nodiscard]]
inline generator<std::u32string_view> split(std::u32string_view haystack,
char32_t const *needle = U
" ")
noexcept
101[[nodiscard]]
inline generator<std::u32string_view> split(
std::u32string &haystack,
char32_t const *needle = U
" ")
noexcept
110namespace views = tt::ranges::views;
115template<
typename View>
126template<
typename View>
T back_inserter(T... args)