20[[nodiscard]]
constexpr bool pattern_match(std::string_view needle, std::string_view haystack)
noexcept
22 auto needle_index = 0_uz;
23 auto haystack_index = 0_uz;
25 while (needle_index != needle.size()) {
27 hilet i = needle.find(Wildcard, needle_index);
28 hilet pattern = needle.substr(needle_index, i);
29 needle_index = i != needle.npos ? i + 1 : needle.size();
32 if (not pattern.empty()) {
33 haystack_index = haystack.find(pattern, haystack_index);
34 if (haystack_index == haystack.npos) {
37 haystack_index += pattern.size();
41 if (needle.empty() or needle.back() != Wildcard) {
42 return haystack_index == haystack.size();