diff --git a/source/mijin/util/string.hpp b/source/mijin/util/string.hpp index 5dab3cf..8a3704b 100644 --- a/source/mijin/util/string.hpp +++ b/source/mijin/util/string.hpp @@ -387,13 +387,36 @@ constexpr bool isHexadecimalChar(TChar chr) noexcept || (chr >= TChar('a') && chr <= TChar('f')); } +template +bool compareIgnoreCase(TChar left, TChar right) MIJIN_NOEXCEPT +{ + return std::tolower(left) == std::tolower(right); +} + [[nodiscard]] inline auto findIgnoreCase(std::string_view haystack, std::string_view needle) { - return std::ranges::search(haystack, needle, [](char left, char right) + return std::ranges::search(haystack, needle, &compareIgnoreCase); +} + +[[nodiscard]] +inline bool startsWithIgnoreCase(std::string_view string, std::string_view part) +{ + if (part.size() > part.size()) { - return std::tolower(left) == std::tolower(right); - }); + return false; + } + return std::ranges::equal(string.substr(0, part.size()), part, &compareIgnoreCase); +} + +[[nodiscard]] +inline bool endsWithIgnoreCase(std::string_view string, std::string_view part) +{ + if (part.size() > part.size()) + { + return false; + } + return std::ranges::equal(string.substr(string.size() - part.size()), part, &compareIgnoreCase); } namespace pipe