From: Mark Abraham Date: Tue, 2 Nov 2021 12:41:46 +0000 (+0100) Subject: Improve MessageStringCollector X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?p=alexxy%2Fgromacs.git;a=commitdiff_plain;h=fc28b17d5c008ff0b49f2b1e9a3a2f835fe2a166 Improve MessageStringCollector Now we can e.g. return one from a function so that more complex use cases can be handled. --- diff --git a/src/gromacs/utility/message_string_collector.cpp b/src/gromacs/utility/message_string_collector.cpp index a956bd9048..0276d6e3ff 100644 --- a/src/gromacs/utility/message_string_collector.cpp +++ b/src/gromacs/utility/message_string_collector.cpp @@ -62,7 +62,9 @@ public: MessageStringCollector::MessageStringCollector() : impl_(new Impl) {} -MessageStringCollector::~MessageStringCollector() {} +MessageStringCollector::~MessageStringCollector() = default; +MessageStringCollector::MessageStringCollector(MessageStringCollector&&) noexcept = default; +MessageStringCollector& MessageStringCollector::operator=(MessageStringCollector&&) noexcept = default; void MessageStringCollector::startContext(const char* name) { diff --git a/src/gromacs/utility/message_string_collector.h b/src/gromacs/utility/message_string_collector.h index a75851d7aa..d652faccfd 100644 --- a/src/gromacs/utility/message_string_collector.h +++ b/src/gromacs/utility/message_string_collector.h @@ -65,6 +65,8 @@ class MessageStringCollector public: MessageStringCollector(); ~MessageStringCollector(); + MessageStringCollector(MessageStringCollector&& /*unused*/) noexcept; + MessageStringCollector& operator=(MessageStringCollector&& /*unused*/) noexcept; /*! \brief * Starts a context for messages. diff --git a/src/gromacs/utility/tests/message_string_collector.cpp b/src/gromacs/utility/tests/message_string_collector.cpp index fd7acefec7..2041b96e96 100644 --- a/src/gromacs/utility/tests/message_string_collector.cpp +++ b/src/gromacs/utility/tests/message_string_collector.cpp @@ -175,6 +175,35 @@ TEST(MessageStringCollectorTest, CanAddStringMessagesConditionally) EXPECT_EQ(messagesDirect.toString(), messagesConditional.toString()); } +TEST(MessageStringCollectorTest, CanMoveConstruct) +{ + MessageStringCollector first; + EXPECT_TRUE(first.isEmpty()); + std::string message = "Message1"; + first.append(message); + EXPECT_FALSE(first.isEmpty()); + MessageStringCollector second(std::move(first)); + // Now the only valid thing to do with first is to call the + // destructor. + EXPECT_FALSE(second.isEmpty()); + EXPECT_EQ(second.toString(), message + "\n"); +} + +TEST(MessageStringCollectorTest, CanMoveAssign) +{ + MessageStringCollector first, second; + EXPECT_TRUE(first.isEmpty()); + EXPECT_TRUE(second.isEmpty()); + std::string message = "Message1"; + first.append(message); + EXPECT_FALSE(first.isEmpty()); + second = std::move(first); + // Now the only valid thing to do with first is to call the + // destructor. + EXPECT_FALSE(second.isEmpty()); + EXPECT_EQ(second.toString(), message + "\n"); +} + } // namespace } // namespace gmx