[FarGroup/FarManager] master: Refactoring (d61a9b7a9)

0 views
Skip to first unread message

farg...@farmanager.com

unread,
May 14, 2026, 7:46:08 PM (13 days ago) May 14
to farco...@googlegroups.com
Repository : https://github.com/FarGroup/FarManager
On branch : master
Link : https://github.com/FarGroup/FarManager/commit/d61a9b7a983862aaf8b97bfd5b9dd28796157a4d

>---------------------------------------------------------------

commit d61a9b7a983862aaf8b97bfd5b9dd28796157a4d
Author: Alex Alabuzhev <alab...@gmail.com>
Date: Fri May 15 00:42:04 2026 +0100

Refactoring


>---------------------------------------------------------------

d61a9b7a983862aaf8b97bfd5b9dd28796157a4d
far/config.cpp | 2 +-
far/editcontrol.cpp | 2 +-
far/execute.cpp | 2 +-
far/filefilter.cpp | 4 ++--
far/plugapi.cpp | 13 ++-----------
far/plugins.cpp | 11 +----------
far/sqlitedb.cpp | 4 ++--
far/string_sort.cpp | 10 +++++-----
far/string_sort.hpp | 25 +++++++++++--------------
far/treelist.cpp | 2 +-
10 files changed, 27 insertions(+), 48 deletions(-)

diff --git a/far/config.cpp b/far/config.cpp
index 949cc3882..a1a852b0a 100644
--- a/far/config.cpp
+++ b/far/config.cpp
@@ -1902,7 +1902,7 @@ Options::Options():
const auto Enum = enum_tokens(Value, L";"sv);
// TODO: assign_range
Exec.ExcludeCmds.assign(ALL_RANGE(Enum));
- std::ranges::sort(Exec.ExcludeCmds, string_sort::less_icase);
+ std::ranges::sort(Exec.ExcludeCmds, string_sort::ordinal::less_icase);
}));

strNoAutoDetectCP.SetCallback(option::notifier([&](string_view const Value)
diff --git a/far/editcontrol.cpp b/far/editcontrol.cpp
index 7197796a7..1f079aa9b 100644
--- a/far/editcontrol.cpp
+++ b/far/editcontrol.cpp
@@ -298,7 +298,7 @@ static bool EnumModules(VMenu2& Menu, const string_view strStart, const string_v

std::set<string, string_sort::less_t> ResultStrings;

- if (const auto Range = std::ranges::equal_range(Global->Opt->Exec.ExcludeCmds, Token, string_sort::less_icase, std::views::take(Token.size())); !Range.empty())
+ if (const auto Range = std::ranges::equal_range(Global->Opt->Exec.ExcludeCmds, Token, string_sort::ordinal::less_icase, std::views::take(Token.size())); !Range.empty())
{
// TODO: insert_range
ResultStrings.insert(ALL_CONST_RANGE(Range));
diff --git a/far/execute.cpp b/far/execute.cpp
index 00ab22ad4..9ae53eeb7 100644
--- a/far/execute.cpp
+++ b/far/execute.cpp
@@ -342,7 +342,7 @@ static bool PartCmdLine(string_view const FullCommand, string& Command, string&
}

string_view const Cmd{ Begin, CmdEnd };
- if (std::ranges::binary_search(exclude_cmds(), Cmd, string_sort::less_icase))
+ if (std::ranges::binary_search(exclude_cmds(), Cmd, string_sort::ordinal::less_icase))
return false;

Command = Cmd;
diff --git a/far/filefilter.cpp b/far/filefilter.cpp
index 93c458813..119060973 100644
--- a/far/filefilter.cpp
+++ b/far/filefilter.cpp
@@ -169,7 +169,7 @@ multifilter::multifilter(Panel *HostPanel, FAR_FILE_FILTER_TYPE FilterType):
UpdateCurrentTime();
}

-static void ParseAndAddMasks(std::map<string, int, string_sort::less_icase_t>& Extensions, string_view const FileName, os::fs::attributes const FileAttr, int const Check)
+static void ParseAndAddMasks(std::map<string, int, string_sort::ordinal::less_icase_t>& Extensions, string_view const FileName, os::fs::attributes const FileAttr, int const Check)
{
if ((FileAttr & FILE_ATTRIBUTE_DIRECTORY) || IsParentDirectory(FileName))
return;
@@ -220,7 +220,7 @@ void filters::EditFilters(filter_area const Area, Panel* const HostPanel)

if (Area != filter_area::custom)
{
- std::map<string, int, string_sort::less_icase_t> Extensions;
+ std::map<string, int, string_sort::ordinal::less_icase_t> Extensions;

{
for (const auto& [Key, CurFilterData]: TempFilterData())
diff --git a/far/plugapi.cpp b/far/plugapi.cpp
index c743fee9f..651e4f6c3 100644
--- a/far/plugapi.cpp
+++ b/far/plugapi.cpp
@@ -162,15 +162,6 @@ namespace cfunctions
}
}

-class pluginapi_sort_accessor
-{
-public:
- static auto compare_ordinal_icase(string_view const Str1, string_view const Str2)
- {
- return string_sort::ordering_as_int(string_sort::keyhole::compare_ordinal_icase(Str1, Str2));
- }
-};
-
namespace pluginapi
{
static int WINAPIV apiSprintf(wchar_t* Dest, const wchar_t* Format, ...) noexcept //?deprecated
@@ -2070,7 +2061,7 @@ static int WINAPI apiStrCmpNI(const wchar_t* Str1, const wchar_t* Str2, intptr_t
return cpp_try(
[&]
{
- return pluginapi_sort_accessor::compare_ordinal_icase(string_view(Str1).substr(0, MaxSize), string_view(Str2).substr(0, MaxSize));
+ return string_sort::ordering_as_int(string_sort::ordinal::compare_icase(string_view(Str1).substr(0, MaxSize), string_view(Str2).substr(0, MaxSize)));
});
}

@@ -2079,7 +2070,7 @@ static int WINAPI apiStrCmpI(const wchar_t* Str1, const wchar_t* Str2) noexcept
return cpp_try(
[&]
{
- return pluginapi_sort_accessor::compare_ordinal_icase(Str1, Str2);
+ return string_sort::ordering_as_int(string_sort::ordinal::compare_icase(Str1, Str2));
});
}

diff --git a/far/plugins.cpp b/far/plugins.cpp
index 9bcafc506..698773233 100644
--- a/far/plugins.cpp
+++ b/far/plugins.cpp
@@ -142,18 +142,9 @@ static wchar_t GetPluginHotKey(const Plugin* pPlugin, const UUID& Uuid, hotkey_t
return strHotKey.empty()? L'\0' : strHotKey.front();
}

-class plugins_sort_accessor
-{
-public:
- static auto compare_ordinal_icase(string_view const Str1, string_view const Str2)
- {
- return string_sort::keyhole::compare_ordinal_icase(Str1, Str2);
- }
-};
-
bool PluginManager::plugin_less::operator()(const Plugin* a, const Plugin* b) const
{
- return std::is_lt(plugins_sort_accessor::compare_ordinal_icase(PointToName(a->ModuleName()), PointToName(b->ModuleName())));
+ return std::is_lt(string_sort::ordinal::compare_icase(PointToName(a->ModuleName()), PointToName(b->ModuleName())));
}

static void EnsureLuaCpuCompatibility()
diff --git a/far/sqlitedb.cpp b/far/sqlitedb.cpp
index 89bb5c8a7..7ccbd03e6 100644
--- a/far/sqlitedb.cpp
+++ b/far/sqlitedb.cpp
@@ -769,10 +769,10 @@ static void create_combined_collation(sqlite::sqlite3* const Db, const char* con

void SQLiteDb::add_nocase_collation() const
{
- create_combined_collation(m_Db.get(), "nocase", &string_sort::keyhole::compare_ordinal_icase);
+ create_combined_collation(m_Db.get(), "nocase", &string_sort::ordinal::compare_icase);
}

void SQLiteDb::add_numeric_collation() const
{
- create_combined_collation(m_Db.get(), "numeric", &string_sort::keyhole::compare_ordinal_numeric);
+ create_combined_collation(m_Db.get(), "numeric", &string_sort::ordinal::compare_numeric);
}
diff --git a/far/string_sort.cpp b/far/string_sort.cpp
index 30492d3db..8db3574e0 100644
--- a/far/string_sort.cpp
+++ b/far/string_sort.cpp
@@ -383,19 +383,19 @@ void string_sort::adjust_comparer(size_t const Collation, bool const CaseSensiti
DefaultComparer = Comparers[CollationIndex][DigitsAsNumbers][CaseSensitive];
}

-bool string_sort::less_icase_t::operator()(string_view Str1, string_view Str2) const
+bool string_sort::ordinal::less_icase_t::operator()(string_view Str1, string_view Str2) const
{
return std::is_lt(compare_ordinal_icase(Str1, Str2));
}

-std::strong_ordering string_sort::keyhole::compare_ordinal_icase(string_view const Str1, string_view const Str2)
+std::strong_ordering string_sort::ordinal::compare_icase(string_view const Str1, string_view const Str2)
{
- return ::compare_ordinal_icase(Str1, Str2);
+ return compare_ordinal_icase(Str1, Str2);
}

-std::strong_ordering string_sort::keyhole::compare_ordinal_numeric(string_view const Str1, string_view const Str2)
+std::strong_ordering string_sort::ordinal::compare_numeric(string_view const Str1, string_view const Str2)
{
- return ::compare_ordinal_numeric(Str1, Str2);
+ return compare_ordinal_numeric(Str1, Str2);
}

#ifdef ENABLE_TESTS
diff --git a/far/string_sort.hpp b/far/string_sort.hpp
index d5ea797ea..b0c432ffd 100644
--- a/far/string_sort.hpp
+++ b/far/string_sort.hpp
@@ -68,23 +68,20 @@ namespace string_sort
}
less;

- constexpr inline struct less_icase_t
+ namespace ordinal
{
- using is_transparent = void;
+ constexpr inline struct less_icase_t
+ {
+ using is_transparent = void;

- [[nodiscard]]
- bool operator()(string_view Str1, string_view Str2) const;
- }
- less_icase;
+ [[nodiscard]]
+ bool operator()(string_view Str1, string_view Str2) const;
+ }
+ less_icase;

- class keyhole
- {
- friend SQLiteDb;
- friend plugins_sort_accessor;
- friend pluginapi_sort_accessor;
- static std::strong_ordering compare_ordinal_icase(string_view Str1, string_view Str2);
- static std::strong_ordering compare_ordinal_numeric(string_view Str1, string_view Str2);
- };
+ std::strong_ordering compare_icase(string_view Str1, string_view Str2);
+ std::strong_ordering compare_numeric(string_view Str1, string_view Str2);
+ }

namespace detail
{
diff --git a/far/treelist.cpp b/far/treelist.cpp
index 296926a96..436f566df 100644
--- a/far/treelist.cpp
+++ b/far/treelist.cpp
@@ -363,7 +363,7 @@ public:
void SetTreeName(string_view const Name) { m_TreeName = Name; }

private:
- using cache_set = std::set<string, string_sort::less_icase_t>;
+ using cache_set = std::set<string, string_sort::ordinal::less_icase_t>;

public:
using const_iterator = cache_set::const_iterator;


Reply all
Reply to author
Forward
0 new messages