Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/src/catch2
diff options
context:
space:
mode:
authorMartin Hořeňovský2023-01-28 22:01:34 +0100
committerMartin Hořeňovský2023-01-28 22:14:37 +0100
commit906552f8c831d0dd1917484b53dd080537f19acd (patch)
tree924f76f3f75e9532b7b5fdabd482c6df11ce946f /src/catch2
parent356dfc14391183aef80af7f23fe2297485311ae4 (diff)
downloadcatch3-906552f8c831d0dd1917484b53dd080537f19acd.tar.gz
Clean up extraneous copies in Messages
This removes 109 allocations from running `tests/SelfTest` (437057 -> 436948).
Diffstat (limited to 'src/catch2')
-rw-r--r--src/catch2/catch_message.cpp4
-rw-r--r--src/catch2/catch_message.hpp7
-rw-r--r--src/catch2/interfaces/catch_interfaces_capture.hpp2
-rw-r--r--src/catch2/interfaces/catch_interfaces_reporter.cpp5
-rw-r--r--src/catch2/internal/catch_run_context.cpp4
-rw-r--r--src/catch2/internal/catch_run_context.hpp2
6 files changed, 11 insertions, 13 deletions
diff --git a/src/catch2/catch_message.cpp b/src/catch2/catch_message.cpp
index 4ab6ecf5..d4723e94 100644
--- a/src/catch2/catch_message.cpp
+++ b/src/catch2/catch_message.cpp
@@ -19,8 +19,8 @@ namespace Catch {
////////////////////////////////////////////////////////////////////////////
- ScopedMessage::ScopedMessage( MessageBuilder const& builder ):
- m_info( builder.m_info ) {
+ ScopedMessage::ScopedMessage( MessageBuilder&& builder ):
+ m_info( CATCH_MOVE(builder.m_info) ) {
m_info.message = builder.m_stream.str();
getResultCapture().pushScopedMessage( m_info );
}
diff --git a/src/catch2/catch_message.hpp b/src/catch2/catch_message.hpp
index 4f71f227..33169ddf 100644
--- a/src/catch2/catch_message.hpp
+++ b/src/catch2/catch_message.hpp
@@ -39,11 +39,10 @@ namespace Catch {
ResultWas::OfType type ):
m_info(macroName, lineInfo, type) {}
-
template<typename T>
- MessageBuilder& operator << ( T const& value ) {
+ MessageBuilder&& operator << ( T const& value ) && {
m_stream << value;
- return *this;
+ return CATCH_MOVE(*this);
}
MessageInfo m_info;
@@ -51,7 +50,7 @@ namespace Catch {
class ScopedMessage {
public:
- explicit ScopedMessage( MessageBuilder const& builder );
+ explicit ScopedMessage( MessageBuilder&& builder );
ScopedMessage( ScopedMessage& duplicate ) = delete;
ScopedMessage( ScopedMessage&& old ) noexcept;
~ScopedMessage();
diff --git a/src/catch2/interfaces/catch_interfaces_capture.hpp b/src/catch2/interfaces/catch_interfaces_capture.hpp
index 4c820724..a6f83fa5 100644
--- a/src/catch2/interfaces/catch_interfaces_capture.hpp
+++ b/src/catch2/interfaces/catch_interfaces_capture.hpp
@@ -65,7 +65,7 @@ namespace Catch {
virtual void pushScopedMessage( MessageInfo const& message ) = 0;
virtual void popScopedMessage( MessageInfo const& message ) = 0;
- virtual void emplaceUnscopedMessage( MessageBuilder const& builder ) = 0;
+ virtual void emplaceUnscopedMessage( MessageBuilder&& builder ) = 0;
virtual void handleFatalErrorCondition( StringRef message ) = 0;
diff --git a/src/catch2/interfaces/catch_interfaces_reporter.cpp b/src/catch2/interfaces/catch_interfaces_reporter.cpp
index 8c8bac54..e9aff69c 100644
--- a/src/catch2/interfaces/catch_interfaces_reporter.cpp
+++ b/src/catch2/interfaces/catch_interfaces_reporter.cpp
@@ -60,10 +60,9 @@ namespace Catch {
// Copy message into messages list.
// !TBD This should have been done earlier, somewhere
MessageBuilder builder( assertionResult.getTestMacroName(), assertionResult.getSourceInfo(), assertionResult.getResultType() );
- builder << assertionResult.getMessage();
- builder.m_info.message = builder.m_stream.str();
+ builder.m_info.message = static_cast<std::string>(assertionResult.getMessage());
- infoMessages.push_back( builder.m_info );
+ infoMessages.push_back( CATCH_MOVE(builder.m_info) );
}
}
diff --git a/src/catch2/internal/catch_run_context.cpp b/src/catch2/internal/catch_run_context.cpp
index 76e41982..506dc5c9 100644
--- a/src/catch2/internal/catch_run_context.cpp
+++ b/src/catch2/internal/catch_run_context.cpp
@@ -402,8 +402,8 @@ namespace Catch {
m_messages.erase(std::remove(m_messages.begin(), m_messages.end(), message), m_messages.end());
}
- void RunContext::emplaceUnscopedMessage( MessageBuilder const& builder ) {
- m_messageScopes.emplace_back( builder );
+ void RunContext::emplaceUnscopedMessage( MessageBuilder&& builder ) {
+ m_messageScopes.emplace_back( CATCH_MOVE(builder) );
}
std::string RunContext::getCurrentTestName() const {
diff --git a/src/catch2/internal/catch_run_context.hpp b/src/catch2/internal/catch_run_context.hpp
index 87d637d8..2a6c6ae0 100644
--- a/src/catch2/internal/catch_run_context.hpp
+++ b/src/catch2/internal/catch_run_context.hpp
@@ -90,7 +90,7 @@ namespace Catch {
void pushScopedMessage( MessageInfo const& message ) override;
void popScopedMessage( MessageInfo const& message ) override;
- void emplaceUnscopedMessage( MessageBuilder const& builder ) override;
+ void emplaceUnscopedMessage( MessageBuilder&& builder ) override;
std::string getCurrentTestName() const override;