summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2024-09-26 18:24:36 -0400
committerGitHub <noreply@github.com>2024-09-26 18:24:36 -0400
commitb1cd4a6690241f2372fc7ef1471e4e23f1366ac1 (patch)
tree239ac4e42d0cd99c6d0344ded7bb7decc55ac69b /Source/Core
parentd4d3acb79637b683fcd2ce52f420200fb70b87c9 (diff)
parent508ccc2054590a9efa89054e742b74521f272063 (diff)
Merge pull request #13068 from mitaclaw/redundant-case-insensitive
IniFile: Migrate `Common::CaseInsensitiveLess` to StringUtil
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Common/IniFile.cpp4
-rw-r--r--Source/Core/Common/IniFile.h25
-rw-r--r--Source/Core/Common/StringUtil.cpp12
-rw-r--r--Source/Core/Common/StringUtil.h8
4 files changed, 19 insertions, 30 deletions
diff --git a/Source/Core/Common/IniFile.cpp b/Source/Core/Common/IniFile.cpp
index ab20ff58fd..a7ce26976b 100644
--- a/Source/Core/Common/IniFile.cpp
+++ b/Source/Core/Common/IniFile.cpp
@@ -130,7 +130,7 @@ const IniFile::Section* IniFile::GetSection(std::string_view section_name) const
{
for (const Section& sect : sections)
{
- if (CaseInsensitiveStringCompare::IsEqual(sect.name, section_name))
+ if (CaseInsensitiveEquals(sect.name, section_name))
return &sect;
}
@@ -141,7 +141,7 @@ IniFile::Section* IniFile::GetSection(std::string_view section_name)
{
for (Section& sect : sections)
{
- if (CaseInsensitiveStringCompare::IsEqual(sect.name, section_name))
+ if (CaseInsensitiveEquals(sect.name, section_name))
return &sect;
}
diff --git a/Source/Core/Common/IniFile.h b/Source/Core/Common/IniFile.h
index c37be55f43..31a7ee0e6b 100644
--- a/Source/Core/Common/IniFile.h
+++ b/Source/Core/Common/IniFile.h
@@ -15,29 +15,6 @@
namespace Common
{
-struct CaseInsensitiveStringCompare
-{
- // Allow heterogenous lookup.
- using is_transparent = void;
-
- bool operator()(std::string_view a, std::string_view b) const
- {
- return std::lexicographical_compare(
- a.begin(), a.end(), b.begin(), b.end(),
- [](char lhs, char rhs) { return Common::ToLower(lhs) < Common::ToLower(rhs); });
- }
-
- static bool IsEqual(std::string_view a, std::string_view b)
- {
- if (a.size() != b.size())
- return false;
-
- return std::equal(a.begin(), a.end(), b.begin(), b.end(), [](char lhs, char rhs) {
- return Common::ToLower(lhs) == Common::ToLower(rhs);
- });
- }
-};
-
class IniFile
{
public:
@@ -86,7 +63,7 @@ public:
bool GetLines(std::vector<std::string>* lines, const bool remove_comments = true) const;
bool operator<(const Section& other) const { return name < other.name; }
- using SectionMap = std::map<std::string, std::string, CaseInsensitiveStringCompare>;
+ using SectionMap = std::map<std::string, std::string, CaseInsensitiveLess>;
const std::string& GetName() const { return name; }
const SectionMap& GetValues() const { return values; }
diff --git a/Source/Core/Common/StringUtil.cpp b/Source/Core/Common/StringUtil.cpp
index 7fc4af83b6..508ba8baf8 100644
--- a/Source/Core/Common/StringUtil.cpp
+++ b/Source/Core/Common/StringUtil.cpp
@@ -666,10 +666,14 @@ void ToUpper(std::string* str)
bool CaseInsensitiveEquals(std::string_view a, std::string_view b)
{
- if (a.size() != b.size())
- return false;
- return std::equal(a.begin(), a.end(), b.begin(),
- [](char ca, char cb) { return Common::ToLower(ca) == Common::ToLower(cb); });
+ return std::ranges::equal(
+ a, b, [](char ca, char cb) { return Common::ToLower(ca) == Common::ToLower(cb); });
+}
+
+bool CaseInsensitiveLess::operator()(std::string_view a, std::string_view b) const
+{
+ return std::ranges::lexicographical_compare(
+ a, b, [](char ca, char cb) { return Common::ToLower(ca) < Common::ToLower(cb); });
}
std::string BytesToHexString(std::span<const u8> bytes)
diff --git a/Source/Core/Common/StringUtil.h b/Source/Core/Common/StringUtil.h
index d29ff5a3c6..8aa5bd3f68 100644
--- a/Source/Core/Common/StringUtil.h
+++ b/Source/Core/Common/StringUtil.h
@@ -313,5 +313,13 @@ std::string GetEscapedHtml(std::string html);
void ToLower(std::string* str);
void ToUpper(std::string* str);
bool CaseInsensitiveEquals(std::string_view a, std::string_view b);
+
+// 'std::less'-like comparison function object type for case-insensitive strings.
+struct CaseInsensitiveLess
+{
+ using is_transparent = void; // Allow heterogenous lookup.
+ bool operator()(std::string_view a, std::string_view b) const;
+};
+
std::string BytesToHexString(std::span<const u8> bytes);
} // namespace Common