mirror of
https://github.com/FairRootGroup/FairMQ.git
synced 2025-10-16 18:11:49 +00:00
FairMQRegion and examples/advanced/Region
This commit is contained in:
committed by
Mohammad Al-Turany
parent
65f1b96dc3
commit
221d2567f0
@@ -29,6 +29,7 @@ FairMQMessageNN::FairMQMessageNN()
|
||||
: fMessage(nullptr)
|
||||
, fSize(0)
|
||||
, fReceiving(false)
|
||||
, fRegion(false)
|
||||
{
|
||||
fMessage = nn_allocmsg(0, 0);
|
||||
if (!fMessage)
|
||||
@@ -41,6 +42,7 @@ FairMQMessageNN::FairMQMessageNN(const size_t size)
|
||||
: fMessage(nullptr)
|
||||
, fSize(0)
|
||||
, fReceiving(false)
|
||||
, fRegion(false)
|
||||
{
|
||||
fMessage = nn_allocmsg(size, 0);
|
||||
if (!fMessage)
|
||||
@@ -60,6 +62,7 @@ FairMQMessageNN::FairMQMessageNN(void* data, const size_t size, fairmq_free_fn*
|
||||
: fMessage(nullptr)
|
||||
, fSize(0)
|
||||
, fReceiving(false)
|
||||
, fRegion(false)
|
||||
{
|
||||
fMessage = nn_allocmsg(size, 0);
|
||||
if (!fMessage)
|
||||
@@ -81,6 +84,15 @@ FairMQMessageNN::FairMQMessageNN(void* data, const size_t size, fairmq_free_fn*
|
||||
}
|
||||
}
|
||||
|
||||
FairMQMessageNN::FairMQMessageNN(FairMQRegionPtr& region, void* data, const size_t size)
|
||||
: fMessage(data)
|
||||
, fSize(size)
|
||||
, fReceiving(false)
|
||||
, fRegion(true)
|
||||
{
|
||||
// currently nanomsg will copy the buffer (data) inside nn_sendmsg()
|
||||
}
|
||||
|
||||
void FairMQMessageNN::Rebuild()
|
||||
{
|
||||
Clear();
|
||||
|
@@ -19,6 +19,7 @@
|
||||
#include <string>
|
||||
|
||||
#include "FairMQMessage.h"
|
||||
#include "FairMQRegion.h"
|
||||
|
||||
class FairMQMessageNN : public FairMQMessage
|
||||
{
|
||||
@@ -26,6 +27,8 @@ class FairMQMessageNN : public FairMQMessage
|
||||
FairMQMessageNN();
|
||||
FairMQMessageNN(const size_t size);
|
||||
FairMQMessageNN(void* data, const size_t size, fairmq_free_fn* ffn, void* hint = nullptr);
|
||||
FairMQMessageNN(FairMQRegionPtr& region, void* data, const size_t size);
|
||||
|
||||
FairMQMessageNN(const FairMQMessageNN&) = delete;
|
||||
FairMQMessageNN operator=(const FairMQMessageNN&) = delete;
|
||||
|
||||
@@ -53,6 +56,7 @@ class FairMQMessageNN : public FairMQMessage
|
||||
void* fMessage;
|
||||
size_t fSize;
|
||||
bool fReceiving;
|
||||
bool fRegion;
|
||||
static std::string fDeviceID;
|
||||
static FairMQ::Transport fTransportType;
|
||||
|
||||
|
34
fairmq/nanomsg/FairMQRegionNN.cxx
Normal file
34
fairmq/nanomsg/FairMQRegionNN.cxx
Normal file
@@ -0,0 +1,34 @@
|
||||
/********************************************************************************
|
||||
* Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
|
||||
* *
|
||||
* This software is distributed under the terms of the *
|
||||
* GNU Lesser General Public Licence version 3 (LGPL) version 3, *
|
||||
* copied verbatim in the file "LICENSE" *
|
||||
********************************************************************************/
|
||||
|
||||
#include "FairMQRegionNN.h"
|
||||
#include "FairMQLogger.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
FairMQRegionNN::FairMQRegionNN(const size_t size)
|
||||
: fBuffer(malloc(size))
|
||||
, fSize(size)
|
||||
{
|
||||
}
|
||||
|
||||
void* FairMQRegionNN::GetData() const
|
||||
{
|
||||
return fBuffer;
|
||||
}
|
||||
|
||||
size_t FairMQRegionNN::GetSize() const
|
||||
{
|
||||
return fSize;
|
||||
}
|
||||
|
||||
FairMQRegionNN::~FairMQRegionNN()
|
||||
{
|
||||
LOG(DEBUG) << "destroying region";
|
||||
free(fBuffer);
|
||||
}
|
35
fairmq/nanomsg/FairMQRegionNN.h
Normal file
35
fairmq/nanomsg/FairMQRegionNN.h
Normal file
@@ -0,0 +1,35 @@
|
||||
/********************************************************************************
|
||||
* Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
|
||||
* *
|
||||
* This software is distributed under the terms of the *
|
||||
* GNU Lesser General Public Licence version 3 (LGPL) version 3, *
|
||||
* copied verbatim in the file "LICENSE" *
|
||||
********************************************************************************/
|
||||
|
||||
#ifndef FAIRMQREGIONNN_H_
|
||||
#define FAIRMQREGIONNN_H_
|
||||
|
||||
#include "FairMQRegion.h"
|
||||
|
||||
#include <cstddef> // size_t
|
||||
|
||||
class FairMQRegionNN : public FairMQRegion
|
||||
{
|
||||
friend class FairMQSocketNN;
|
||||
|
||||
public:
|
||||
FairMQRegionNN(const size_t size);
|
||||
FairMQRegionNN(const FairMQRegionNN&) = delete;
|
||||
FairMQRegionNN operator=(const FairMQRegionNN&) = delete;
|
||||
|
||||
virtual void* GetData() const override;
|
||||
virtual size_t GetSize() const override;
|
||||
|
||||
virtual ~FairMQRegionNN();
|
||||
|
||||
private:
|
||||
void* fBuffer;
|
||||
size_t fSize;
|
||||
};
|
||||
|
||||
#endif /* FAIRMQREGIONNN_H_ */
|
@@ -127,7 +127,14 @@ int FairMQSocketNN::Send(FairMQMessagePtr& msg, const int flags)
|
||||
while (true)
|
||||
{
|
||||
void* ptr = msg->GetMessage();
|
||||
nbytes = nn_send(fSocket, &ptr, NN_MSG, flags);
|
||||
if (static_cast<FairMQMessageNN*>(msg.get())->fRegion == false)
|
||||
{
|
||||
nbytes = nn_send(fSocket, &ptr, NN_MSG, flags);
|
||||
}
|
||||
else
|
||||
{
|
||||
nbytes = nn_send(fSocket, ptr, msg->GetSize(), flags);
|
||||
}
|
||||
if (nbytes >= 0)
|
||||
{
|
||||
fBytesTx += nbytes;
|
||||
|
@@ -35,6 +35,11 @@ FairMQMessagePtr FairMQTransportFactoryNN::CreateMessage(void* data, const size_
|
||||
return unique_ptr<FairMQMessage>(new FairMQMessageNN(data, size, ffn, hint));
|
||||
}
|
||||
|
||||
FairMQMessagePtr FairMQTransportFactoryNN::CreateMessage(FairMQRegionPtr& region, void* data, const size_t size) const
|
||||
{
|
||||
return unique_ptr<FairMQMessage>(new FairMQMessageNN(region, data, size));
|
||||
}
|
||||
|
||||
FairMQSocketPtr FairMQTransportFactoryNN::CreateSocket(const string& type, const string& name) const
|
||||
{
|
||||
return unique_ptr<FairMQSocket>(new FairMQSocketNN(type, name, GetId()));
|
||||
@@ -60,6 +65,11 @@ FairMQPollerPtr FairMQTransportFactoryNN::CreatePoller(const FairMQSocket& cmdSo
|
||||
return unique_ptr<FairMQPoller>(new FairMQPollerNN(cmdSocket, dataSocket));
|
||||
}
|
||||
|
||||
FairMQRegionPtr FairMQTransportFactoryNN::CreateRegion(const size_t size) const
|
||||
{
|
||||
return unique_ptr<FairMQRegion>(new FairMQRegionNN(size));
|
||||
}
|
||||
|
||||
FairMQ::Transport FairMQTransportFactoryNN::GetType() const
|
||||
{
|
||||
return fTransportType;
|
||||
|
@@ -13,6 +13,7 @@
|
||||
#include "FairMQMessageNN.h"
|
||||
#include "FairMQSocketNN.h"
|
||||
#include "FairMQPollerNN.h"
|
||||
#include "FairMQRegionNN.h"
|
||||
#include <options/FairMQProgOptions.h>
|
||||
|
||||
#include <vector>
|
||||
@@ -27,6 +28,7 @@ class FairMQTransportFactoryNN : public FairMQTransportFactory
|
||||
FairMQMessagePtr CreateMessage() const override;
|
||||
FairMQMessagePtr CreateMessage(const size_t size) const override;
|
||||
FairMQMessagePtr CreateMessage(void* data, const size_t size, fairmq_free_fn* ffn, void* hint = nullptr) const override;
|
||||
FairMQMessagePtr CreateMessage(FairMQRegionPtr& region, void* data, const size_t size) const override;
|
||||
|
||||
FairMQSocketPtr CreateSocket(const std::string& type, const std::string& name) const override;
|
||||
|
||||
@@ -35,6 +37,8 @@ class FairMQTransportFactoryNN : public FairMQTransportFactory
|
||||
FairMQPollerPtr CreatePoller(const std::unordered_map<std::string, std::vector<FairMQChannel>>& channelsMap, const std::vector<std::string>& channelList) const override;
|
||||
FairMQPollerPtr CreatePoller(const FairMQSocket& cmdSocket, const FairMQSocket& dataSocket) const override;
|
||||
|
||||
FairMQRegionPtr CreateRegion(const size_t size) const override;
|
||||
|
||||
FairMQ::Transport GetType() const override;
|
||||
|
||||
private:
|
||||
|
Reference in New Issue
Block a user