#include #include "FairMQMessage.h" #include "FairMQLogger.h" FairMQMessage::FairMQMessage() : fSize(0), fMessage(NULL) { } FairMQMessage::FairMQMessage(size_t size) { fMessage = nn_allocmsg(size, 0); if(!fMessage){ std::stringstream logmsg; logmsg << "failed allocating message, reason: " << nn_strerror(errno); FairMQLogger::GetInstance()->Log(FairMQLogger::ERROR, logmsg.str()); } fSize = size; } FairMQMessage::FairMQMessage(void* data, size_t size) { fMessage = nn_allocmsg(size, 0); if(!fMessage){ std::stringstream logmsg; logmsg << "failed allocating message, reason: " << nn_strerror(errno); FairMQLogger::GetInstance()->Log(FairMQLogger::ERROR, logmsg.str()); } memcpy (fMessage, data, size); fSize = size; } FairMQMessage::~FairMQMessage() { } void* FairMQMessage::GetMessage() { return fMessage; } void FairMQMessage::Rebuild(size_t size) { Clear(); fMessage = nn_allocmsg(size, 0); if(!fMessage){ std::stringstream logmsg; logmsg << "failed allocating message, reason: " << nn_strerror(errno); FairMQLogger::GetInstance()->Log(FairMQLogger::ERROR, logmsg.str()); } fSize = size; } void FairMQMessage::SetMessage(void* data, size_t size) { fMessage = data; fSize = size; } size_t FairMQMessage::GetSize() { return fSize; } void FairMQMessage::Copy(FairMQMessage* msg) { if(fMessage){ int rc = nn_freemsg(fMessage); if( rc < 0 ){ std::stringstream logmsg; logmsg << "failed freeing message, reason: " << nn_strerror(errno); FairMQLogger::GetInstance()->Log(FairMQLogger::ERROR, logmsg.str()); } } size_t size = msg->GetSize(); fMessage = nn_allocmsg(size, 0); if(!fMessage){ std::stringstream logmsg; logmsg << "failed allocating message, reason: " << nn_strerror(errno); FairMQLogger::GetInstance()->Log(FairMQLogger::ERROR, logmsg.str()); } memcpy (fMessage, msg->GetMessage(), size); fSize = size; } void FairMQMessage::Clear() { int rc = nn_freemsg(fMessage); if (rc < 0) { std::stringstream logmsg; logmsg << "failed freeing message, reason: " << nn_strerror(errno); FairMQLogger::GetInstance()->Log(FairMQLogger::ERROR, logmsg.str()); } else { fMessage = NULL; fSize = 0; } }