FairMQ: add FairMQMessage::Copy(const FairMQMessage& msg), deprecate the old one.

This commit is contained in:
Alexey Rybalchenko
2017-12-08 12:02:08 +01:00
committed by Mohammad Al-Turany
parent e340a52bf2
commit ba78964e29
10 changed files with 90 additions and 21 deletions

View File

@@ -202,7 +202,7 @@ zmq_msg_t* FairMQMessageSHM::GetMessage()
return &fMessage;
}
void* FairMQMessageSHM::GetData()
void* FairMQMessageSHM::GetData() const
{
if (fLocalPtr)
{
@@ -274,7 +274,30 @@ FairMQ::Transport FairMQMessageSHM::GetType() const
return fTransportType;
}
void FairMQMessageSHM::Copy(const unique_ptr<FairMQMessage>& msg)
void FairMQMessageSHM::Copy(const FairMQMessage& msg)
{
if (fHandle < 0)
{
bipc::managed_shared_memory::handle_t otherHandle = static_cast<const FairMQMessageSHM&>(msg).fHandle;
if (otherHandle)
{
if (InitializeChunk(msg.GetSize()))
{
memcpy(GetData(), msg.GetData(), msg.GetSize());
}
}
else
{
LOG(ERROR) << "FairMQMessageSHM::Copy() fail: source message not initialized!";
}
}
else
{
LOG(ERROR) << "FairMQMessageSHM::Copy() fail: target message already initialized!";
}
}
void FairMQMessageSHM::Copy(const FairMQMessagePtr& msg)
{
if (fHandle < 0)
{

View File

@@ -39,13 +39,14 @@ class FairMQMessageSHM : public FairMQMessage
void Rebuild(const size_t size) override;
void Rebuild(void* data, const size_t size, fairmq_free_fn* ffn, void* hint = nullptr) override;
void* GetData() override;
void* GetData() const override;
size_t GetSize() const override;
bool SetUsedSize(const size_t size) override;
FairMQ::Transport GetType() const override;
void Copy(const FairMQMessage& msg) override;
void Copy(const FairMQMessagePtr& msg) override;
~FairMQMessageSHM() override;
@@ -58,10 +59,10 @@ class FairMQMessageSHM : public FairMQMessage
static std::atomic<bool> fInterrupted;
static FairMQ::Transport fTransportType;
uint64_t fRegionId;
fair::mq::shmem::Region* fRegionPtr;
mutable fair::mq::shmem::Region* fRegionPtr;
boost::interprocess::managed_shared_memory::handle_t fHandle;
size_t fSize;
char* fLocalPtr;
mutable char* fLocalPtr;
bool InitializeChunk(const size_t size);
zmq_msg_t* GetMessage();