Problem: message_t move and copy are mutating but take const

Solution: Deprecate old functions and add overloads taking non-const
references
This commit is contained in:
Gudmundur Adalsteinsson 2019-04-03 13:56:11 +00:00
parent e1fe5e5209
commit 72f0e1bcba
2 changed files with 32 additions and 1 deletions

View File

@ -150,7 +150,22 @@ TEST_CASE("message is shared", "[message]")
size_t msg_sz = 1024; // large enough to be a type_lmsg
zmq::message_t msg1(msg_sz);
zmq::message_t msg2;
msg2.copy(&msg1);
msg2.copy(msg1);
CHECK(msg1.get(ZMQ_SHARED) == 1);
CHECK(msg2.get(ZMQ_SHARED) == 1);
CHECK(msg1.size() == msg_sz);
CHECK(msg2.size() == msg_sz);
}
TEST_CASE("message move is not shared", "[message]")
{
size_t msg_sz = 1024; // large enough to be a type_lmsg
zmq::message_t msg1(msg_sz);
zmq::message_t msg2;
msg2.move(msg1);
CHECK(msg1.get(ZMQ_SHARED) == 0);
CHECK(msg2.get(ZMQ_SHARED) == 0);
CHECK(msg2.size() == msg_sz);
CHECK(msg1.size() == 0);
}
#endif

16
zmq.hpp
View File

@ -335,6 +335,7 @@ class message_t
throw error_t();
}
ZMQ_DEPRECATED("from 4.3.1, use move taking non-const reference instead")
void move(message_t const *msg_)
{
int rc = zmq_msg_move(&msg, const_cast<zmq_msg_t *>(&(msg_->msg)));
@ -342,6 +343,14 @@ class message_t
throw error_t();
}
void move(message_t &msg_)
{
int rc = zmq_msg_move(&msg, &msg_.msg);
if (rc != 0)
throw error_t();
}
ZMQ_DEPRECATED("from 4.3.1, use copy taking non-const reference instead")
void copy(message_t const *msg_)
{
int rc = zmq_msg_copy(&msg, const_cast<zmq_msg_t *>(&(msg_->msg)));
@ -349,6 +358,13 @@ class message_t
throw error_t();
}
void copy(message_t &msg_)
{
int rc = zmq_msg_copy(&msg, &msg_.msg);
if (rc != 0)
throw error_t();
}
bool more() const ZMQ_NOTHROW
{
int rc = zmq_msg_more(const_cast<zmq_msg_t *>(&msg));