Move MessageInfos into the run context

Together with the previous change, this means that `ScopedMessage`
only needs to keep around a single unsigned int.
This commit is contained in:
Martin Hořeňovský
2025-08-26 12:36:06 +02:00
parent 33adb4c779
commit 227af796b4
5 changed files with 12 additions and 13 deletions

View File

@@ -19,20 +19,19 @@ namespace Catch {
ScopedMessage::ScopedMessage( MessageBuilder&& builder ): ScopedMessage::ScopedMessage( MessageBuilder&& builder ):
m_info( CATCH_MOVE(builder.m_info) ) { m_messageId( builder.m_info.sequence ) {
m_info.message = builder.m_stream.str(); MessageInfo info( CATCH_MOVE( builder.m_info ) );
getResultCapture().pushScopedMessage( m_info ); info.message = builder.m_stream.str();
getResultCapture().pushScopedMessage( CATCH_MOVE(info) );
} }
ScopedMessage::ScopedMessage( ScopedMessage&& old ) noexcept: ScopedMessage::ScopedMessage( ScopedMessage&& old ) noexcept:
m_info( CATCH_MOVE( old.m_info ) ) { m_messageId( old.m_messageId ) {
old.m_moved = true; old.m_moved = true;
} }
ScopedMessage::~ScopedMessage() { ScopedMessage::~ScopedMessage() {
if ( !m_moved ){ if ( !m_moved ) { getResultCapture().popScopedMessage( m_messageId ); }
getResultCapture().popScopedMessage(m_info.sequence);
}
} }
@@ -109,7 +108,7 @@ namespace Catch {
void Capturer::captureValue( size_t index, std::string const& value ) { void Capturer::captureValue( size_t index, std::string const& value ) {
assert( index < m_messages.size() ); assert( index < m_messages.size() );
m_messages[index].message += value; m_messages[index].message += value;
m_resultCapture.pushScopedMessage( m_messages[index] ); m_resultCapture.pushScopedMessage( CATCH_MOVE(m_messages[index]) );
m_captured++; m_captured++;
} }

View File

@@ -57,7 +57,7 @@ namespace Catch {
ScopedMessage( ScopedMessage&& old ) noexcept; ScopedMessage( ScopedMessage&& old ) noexcept;
~ScopedMessage(); ~ScopedMessage();
MessageInfo m_info; unsigned int m_messageId;
bool m_moved = false; bool m_moved = false;
}; };

View File

@@ -62,7 +62,7 @@ namespace Catch {
virtual void benchmarkEnded( BenchmarkStats<> const& stats ) = 0; virtual void benchmarkEnded( BenchmarkStats<> const& stats ) = 0;
virtual void benchmarkFailed( StringRef error ) = 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 popScopedMessage( unsigned int messageId ) = 0;
virtual void emplaceUnscopedMessage( MessageBuilder&& builder ) = 0; virtual void emplaceUnscopedMessage( MessageBuilder&& builder ) = 0;

View File

@@ -483,8 +483,8 @@ namespace Catch {
m_reporter->benchmarkFailed( error ); m_reporter->benchmarkFailed( error );
} }
void RunContext::pushScopedMessage( MessageInfo const& message ) { void RunContext::pushScopedMessage( MessageInfo&& message ) {
Detail::g_messages.push_back( message ); Detail::g_messages.push_back( CATCH_MOVE(message) );
} }
void RunContext::popScopedMessage( unsigned int messageId ) { void RunContext::popScopedMessage( unsigned int messageId ) {

View File

@@ -94,7 +94,7 @@ namespace Catch {
void benchmarkEnded( BenchmarkStats<> const& stats ) override; void benchmarkEnded( BenchmarkStats<> const& stats ) override;
void benchmarkFailed( StringRef error ) override; void benchmarkFailed( StringRef error ) override;
void pushScopedMessage( MessageInfo const& message ) override; void pushScopedMessage( MessageInfo&& message ) override;
void popScopedMessage( unsigned int messageId ) override; void popScopedMessage( unsigned int messageId ) override;
void emplaceUnscopedMessage( MessageBuilder&& builder ) override; void emplaceUnscopedMessage( MessageBuilder&& builder ) override;