From 14f304f9878c221af46325382a78151b1d7fffb8 Mon Sep 17 00:00:00 2001 From: Geir Henning Eikeland Date: Sat, 11 Sep 2021 22:20:30 +0200 Subject: [PATCH] Add == and != operators for multipart_t Closes #512 --- tests/multipart.cpp | 15 +++++++++++++++ zmq_addon.hpp | 16 +++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/tests/multipart.cpp b/tests/multipart.cpp index 0910bba..7d92b97 100644 --- a/tests/multipart.cpp +++ b/tests/multipart.cpp @@ -75,6 +75,21 @@ TEST_CASE("multipart legacy test", "[multipart]") assert(ok); assert(copy.equal(&multipart)); + // Test equality operators + assert(copy == multipart); + assert(multipart == copy); + + multipart.pop(); + + assert(copy != multipart); + assert(multipart != copy); + + multipart_t emptyMessage1 {}; + multipart_t emptyMessage2 {}; + + assert(emptyMessage1 == emptyMessage2); + assert(emptyMessage2 == emptyMessage1); + multipart.clear(); assert(multipart.empty()); diff --git a/zmq_addon.hpp b/zmq_addon.hpp index 4c36d6e..147abe1 100644 --- a/zmq_addon.hpp +++ b/zmq_addon.hpp @@ -612,16 +612,26 @@ class multipart_t } // Check if equal to other multipart - bool equal(const multipart_t *other) const + bool equal(const multipart_t *other) const ZMQ_NOTHROW { - if (size() != other->size()) + return *this == *other; + } + + bool operator==(const multipart_t &other) const ZMQ_NOTHROW + { + if (size() != other.size()) return false; for (size_t i = 0; i < size(); i++) - if (*peek(i) != *other->peek(i)) + if (at(i) != other.at(i)) return false; return true; } + bool operator!=(const multipart_t &other) const ZMQ_NOTHROW + { + return !(*this == other); + } + #ifdef ZMQ_CPP11 // Return single part message_t encoded from this multipart_t.