Improve MessageStringCollector
authorMark Abraham <mark.j.abraham@gmail.com>
Tue, 2 Nov 2021 12:41:46 +0000 (13:41 +0100)
committerMark Abraham <mark.j.abraham@gmail.com>
Wed, 3 Nov 2021 07:12:03 +0000 (07:12 +0000)
Now we can e.g. return one from a function so that more complex use
cases can be handled.

src/gromacs/utility/message_string_collector.cpp
src/gromacs/utility/message_string_collector.h
src/gromacs/utility/tests/message_string_collector.cpp

index a956bd904889a58146b43aa480f2010ee51786c8..0276d6e3fff9bdf934caa74e36f78f7eeb701b4a 100644 (file)
@@ -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)
 {
index a75851d7aaac0f282cbf53cd94fa6755fea1138b..d652faccfd3bce1256a78e2b03beb97ac44df623 100644 (file)
@@ -65,6 +65,8 @@ class MessageStringCollector
 public:
     MessageStringCollector();
     ~MessageStringCollector();
+    MessageStringCollector(MessageStringCollector&& /*unused*/) noexcept;
+    MessageStringCollector& operator=(MessageStringCollector&& /*unused*/) noexcept;
 
     /*! \brief
      * Starts a context for messages.
index fd7acefec7999b2f4b3f253340f8953f423919e8..2041b96e96bbc525530033274f7a9d146ebf4035 100644 (file)
@@ -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