Repository :
https://github.com/FarGroup/FarManager
On branch : master
Link :
https://github.com/FarGroup/FarManager/commit/3f077c1c7d40652b4a080f4a41562f535850f1ad
>---------------------------------------------------------------
commit 3f077c1c7d40652b4a080f4a41562f535850f1ad
Author: Alex Alabuzhev <
alab...@gmail.com>
Date: Mon Dec 1 20:54:28 2025 +0000
Refactoring
>---------------------------------------------------------------
3f077c1c7d40652b4a080f4a41562f535850f1ad
far/datetime.hpp | 23 +++++++++++++++--------
far/log.cpp | 16 ++++++++++++++++
far/memcheck.cpp | 4 ++++
3 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/far/datetime.hpp b/far/datetime.hpp
index fb49253a0..8f4968cdf 100644
--- a/far/datetime.hpp
+++ b/far/datetime.hpp
@@ -48,22 +48,29 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//----------------------------------------------------------------------------
-using time_component = unsigned int;
+using time_component = uint32_t;
constexpr inline struct
{
- constexpr operator uint8_t() const { return static_cast<uint8_t>(time_none); }
- constexpr operator uint16_t() const { return static_cast<uint16_t>(time_none); }
- constexpr operator uint32_t() const { return time_none; }
-
WARNING_PUSH()
WARNING_DISABLE_CLANG("-Wunused-template")
- constexpr bool operator==(std::integral auto const Component) const { return Component == static_cast<decltype(Component)>(time_none); }
+ template<std::unsigned_integral I> requires (sizeof(I) <= sizeof(time_component))
+ consteval operator I() const
+ {
+ return static_cast<I>(time_type::none);
+ }
+
+ constexpr bool operator==(std::unsigned_integral auto const Component) const
+ {
+ return Component == static_cast<decltype(Component)>(time_type::none);
+ }
WARNING_POP()
private:
- enum { time_none = std::numeric_limits<time_component>::max() };
-
+ enum class time_type: time_component
+ {
+ none = std::numeric_limits<time_component>::max()
+ };
}
time_none;
diff --git a/far/log.cpp b/far/log.cpp
index b17965903..788cb9fa8 100644
--- a/far/log.cpp
+++ b/far/log.cpp
@@ -1203,6 +1203,22 @@ namespace logging
{
engine::restore();
}
+
+#if 0
+ static const thread_local struct thread_monitor
+ {
+ thread_monitor()
+ {
+ LOGTRACE(L"Thread started"sv);
+ }
+
+ ~thread_monitor()
+ {
+ LOGTRACE(L"Thread ended"sv);
+ }
+ }
+ ThreadMonitor;
+#endif
}
NIFTY_DEFINE(logging::engine, log_engine);
diff --git a/far/memcheck.cpp b/far/memcheck.cpp
index 3e3c6221a..c7343e5c2 100644
--- a/far/memcheck.cpp
+++ b/far/memcheck.cpp
@@ -77,6 +77,7 @@ struct memory_block
// Initializers aren't really needed here, just to stop GCC from complaining about them.
void* Stack[10]{};
+ DWORD ThreadId{};
memory_block* prev{};
memory_block* next{};
@@ -371,6 +372,7 @@ private:
L"\nData: "sv, BlobToHexString(view_bytes(Data, std::min(Size, Width / 3)), L' '),
L"\nAnsi: "sv, printable_ansi_string(Data, std::min(Size, Width)),
L"\nWide: "sv, printable_wide_string(Data, std::min(Size, Width * sizeof(wchar_t))),
+ L"\nThread: "sv, str(i->ThreadId),
L"\nStack:\n"sv);
os::debug::stack_frame Stack[ARRAYSIZE(memory_block::Stack)];
@@ -425,6 +427,8 @@ static void* debug_allocator(size_t const size, std::align_val_t Alignment, allo
if (const auto Captured = RtlCaptureStackBackTrace(FramesToSkip, static_cast<DWORD>(std::size(Block->Stack)), Block->Stack, {}); Captured < std::size(Block->Stack))
Block->Stack[Captured] = {};
+ Block->ThreadId = GetCurrentThreadId();
+
Block->end_marker() = EndMarker;
const auto Data = Block->data();