From 227af796b4ede6258f9b1ff8b69cd1f03d32f662 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Tue, 26 Aug 2025 12:36:06 +0200 Subject: [PATCH] Move MessageInfos into the run context Together with the previous change, this means that `ScopedMessage` only needs to keep around a single unsigned int. --- src/catch2/catch_message.cpp | 15 +++++++-------- src/catch2/catch_message.hpp | 2 +- .../interfaces/catch_interfaces_capture.hpp | 2 +- src/catch2/internal/catch_run_context.cpp | 4 ++-- src/catch2/internal/catch_run_context.hpp | 2 +- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/catch2/catch_message.cpp b/src/catch2/catch_message.cpp index 675e85f6..adb9b476 100644 --- a/src/catch2/catch_message.cpp +++ b/src/catch2/catch_message.cpp @@ -19,20 +19,19 @@ namespace Catch { ScopedMessage::ScopedMessage( MessageBuilder&& builder ): - m_info( CATCH_MOVE(builder.m_info) ) { - m_info.message = builder.m_stream.str(); - getResultCapture().pushScopedMessage( m_info ); + m_messageId( builder.m_info.sequence ) { + MessageInfo info( CATCH_MOVE( builder.m_info ) ); + info.message = builder.m_stream.str(); + getResultCapture().pushScopedMessage( CATCH_MOVE(info) ); } ScopedMessage::ScopedMessage( ScopedMessage&& old ) noexcept: - m_info( CATCH_MOVE( old.m_info ) ) { + m_messageId( old.m_messageId ) { old.m_moved = true; } ScopedMessage::~ScopedMessage() { - if ( !m_moved ){ - getResultCapture().popScopedMessage(m_info.sequence); - } + if ( !m_moved ) { getResultCapture().popScopedMessage( m_messageId ); } } @@ -109,7 +108,7 @@ namespace Catch { void Capturer::captureValue( size_t index, std::string const& value ) { assert( index < m_messages.size() ); m_messages[index].message += value; - m_resultCapture.pushScopedMessage( m_messages[index] ); + m_resultCapture.pushScopedMessage( CATCH_MOVE(m_messages[index]) ); m_captured++; } diff --git a/src/catch2/catch_message.hpp b/src/catch2/catch_message.hpp index 0a738341..db3d682a 100644 --- a/src/catch2/catch_message.hpp +++ b/src/catch2/catch_message.hpp @@ -57,7 +57,7 @@ namespace Catch { ScopedMessage( ScopedMessage&& old ) noexcept; ~ScopedMessage(); - MessageInfo m_info; + unsigned int m_messageId; bool m_moved = false; }; diff --git a/src/catch2/interfaces/catch_interfaces_capture.hpp b/src/catch2/interfaces/catch_interfaces_capture.hpp index 64f906a5..b4fee6cd 100644 --- a/src/catch2/interfaces/catch_interfaces_capture.hpp +++ b/src/catch2/interfaces/catch_interfaces_capture.hpp @@ -62,7 +62,7 @@ namespace Catch { virtual void benchmarkEnded( BenchmarkStats<> const& stats ) = 0; virtual void benchmarkFailed( StringRef error ) = 0; - virtual void pushScopedMessage( MessageInfo const& message ) = 0; + virtual void pushScopedMessage( MessageInfo&& message ) = 0; virtual void popScopedMessage( unsigned int messageId ) = 0; virtual void emplaceUnscopedMessage( MessageBuilder&& builder ) = 0; diff --git a/src/catch2/internal/catch_run_context.cpp b/src/catch2/internal/catch_run_context.cpp index b6edddb3..3ca15fd0 100644 --- a/src/catch2/internal/catch_run_context.cpp +++ b/src/catch2/internal/catch_run_context.cpp @@ -483,8 +483,8 @@ namespace Catch { m_reporter->benchmarkFailed( error ); } - void RunContext::pushScopedMessage( MessageInfo const& message ) { - Detail::g_messages.push_back( message ); + void RunContext::pushScopedMessage( MessageInfo&& message ) { + Detail::g_messages.push_back( CATCH_MOVE(message) ); } void RunContext::popScopedMessage( unsigned int messageId ) { diff --git a/src/catch2/internal/catch_run_context.hpp b/src/catch2/internal/catch_run_context.hpp index 892926a0..1ff9caf6 100644 --- a/src/catch2/internal/catch_run_context.hpp +++ b/src/catch2/internal/catch_run_context.hpp @@ -94,7 +94,7 @@ namespace Catch { void benchmarkEnded( BenchmarkStats<> const& stats ) override; void benchmarkFailed( StringRef error ) override; - void pushScopedMessage( MessageInfo const& message ) override; + void pushScopedMessage( MessageInfo&& message ) override; void popScopedMessage( unsigned int messageId ) override; void emplaceUnscopedMessage( MessageBuilder&& builder ) override;