diff options
| author | JMC47 <JMC4789@gmail.com> | 2024-09-26 18:24:36 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-26 18:24:36 -0400 |
| commit | b1cd4a6690241f2372fc7ef1471e4e23f1366ac1 (patch) | |
| tree | 239ac4e42d0cd99c6d0344ded7bb7decc55ac69b /Source/Core | |
| parent | d4d3acb79637b683fcd2ce52f420200fb70b87c9 (diff) | |
| parent | 508ccc2054590a9efa89054e742b74521f272063 (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.cpp | 4 | ||||
| -rw-r--r-- | Source/Core/Common/IniFile.h | 25 | ||||
| -rw-r--r-- | Source/Core/Common/StringUtil.cpp | 12 | ||||
| -rw-r--r-- | Source/Core/Common/StringUtil.h | 8 |
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 § } @@ -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 § } 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 |
