fix: make StringEqualsIgnoreCase constexpr (#1021)

* fix: make StringEqualsIgnoreCase constexpr

Move utils::StringEqualsIgnoreCase into the header as a constexpr function using an ASCII-only lowercase helper, so it can be used from constexpr contexts such as InfoString's comparators with newer MSVC toolsets.

* test: add StringEqualsIgnoreCase tests
This commit is contained in:
elliot authored and GitHub committed 2026-10-18 22:51:52 +02:00
1 parent bc0a786444
commit 28b14ea0ee
3 files changed
+38 -14

No files matched your search

-13
View File
@@ -4,14 +4,6 @@
#include <cctype>
#include <sstream>
namespace
{
bool ichar_equals(const char a, const char b)
{
return std::tolower(static_cast<unsigned char>(a)) == std::tolower(static_cast<unsigned char>(b));
}
} // namespace
namespace utils
{
std::string EscapeStringForQuotationMarks(const std::string_view& str)
@@ -123,11 +115,6 @@ namespace utils
c = static_cast<char>(toupper(static_cast<unsigned char>(c)));
}
bool StringEqualsIgnoreCase(std::string_view lhs, std::string_view rhs)
{
return std::ranges::equal(lhs, rhs, ichar_equals);
}
void StringTrimL(std::string& str)
{
str.erase(str.begin(),
+15 -1
View File
@@ -1,5 +1,6 @@
#pragma once
#include <algorithm>
#include <string>
#include <string_view>
#include <vector>
@@ -20,7 +21,20 @@ namespace utils
void MakeStringUpperCase(char* str);
void MakeStringUpperCase(std::string& str);
bool StringEqualsIgnoreCase(std::string_view lhs, std::string_view rhs);
constexpr char CharToLowerAscii(const char c)
{
return c >= 'A' && c <= 'Z' ? static_cast<char>(c - 'A' + 'a') : c;
}
constexpr bool StringEqualsIgnoreCase(const std::string_view lhs, const std::string_view rhs)
{
return std::ranges::equal(lhs,
rhs,
[](const char a, const char b)
{
return CharToLowerAscii(a) == CharToLowerAscii(b);
});
}
void StringTrimL(std::string& str);
void StringTrimR(std::string& str);