From f6776d233d0ab2e8648fd9a95b5d328fa2cff15f Mon Sep 17 00:00:00 2001
From: Patrick Wuttke
Date: Thu, 27 Mar 2025 12:18:52 +0100
Subject: [PATCH] Added startsWithIgnoreCase() and endsWithIgnoreCase()
functions.
---
source/mijin/util/string.hpp | 29 ++++++++++++++++++++++++++---
1 file changed, 26 insertions(+), 3 deletions(-)
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