9 #ifndef FAIRMQTRANSPORTFACTORY_H_ 10 #define FAIRMQTRANSPORTFACTORY_H_ 12 #include <FairMQLogger.h> 13 #include <FairMQMessage.h> 14 #include <FairMQPoller.h> 15 #include <FairMQSocket.h> 16 #include <FairMQUnmanagedRegion.h> 17 #include <fairmq/MemoryResources.h> 18 #include <fairmq/Transports.h> 23 #include <unordered_map> 32 const std::string fkId;
42 auto GetId()
const ->
const std::string {
return fkId; };
54 virtual FairMQMessagePtr
CreateMessage(
const size_t size) = 0;
61 virtual FairMQMessagePtr
CreateMessage(
void* data,
const size_t size, fairmq_free_fn* ffn,
void* hint =
nullptr) = 0;
63 virtual FairMQMessagePtr
CreateMessage(FairMQUnmanagedRegionPtr& unmanagedRegion,
void* data,
const size_t size,
void* hint = 0) = 0;
66 virtual FairMQSocketPtr
CreateSocket(
const std::string& type,
const std::string& name) = 0;
69 virtual FairMQPollerPtr
CreatePoller(
const std::vector<FairMQChannel>& channels)
const = 0;
71 virtual FairMQPollerPtr
CreatePoller(
const std::vector<FairMQChannel*>& channels)
const = 0;
73 virtual FairMQPollerPtr
CreatePoller(
const std::unordered_map<std::string, std::vector<FairMQChannel>>& channelsMap,
const std::vector<std::string>& channelList)
const = 0;
75 virtual FairMQUnmanagedRegionPtr CreateUnmanagedRegion(
const size_t size, FairMQRegionCallback callback =
nullptr)
const = 0;
78 virtual fair::mq::Transport
GetType()
const = 0;
80 virtual void Interrupt() = 0;
81 virtual void Resume() = 0;
82 virtual void Reset() = 0;
86 static auto CreateTransportFactory(
const std::string& type,
const std::string&
id =
"",
const FairMQProgOptions* config =
nullptr) -> std::shared_ptr<FairMQTransportFactory>;
88 static void FairMQNoCleanup(
void* ,
void* )
93 static void FairMQSimpleMsgCleanup(
void* ,
void* obj)
95 delete static_cast<T*
>(obj);
99 FairMQMessagePtr NewSimpleMessage(
const T& data)
103 T* dataCopy =
new T(data);
104 return CreateMessage(dataCopy,
sizeof(T), FairMQSimpleMsgCleanup<T>, dataCopy);
107 template<std::
size_t N>
108 FairMQMessagePtr NewSimpleMessage(
const char(&data)[N])
110 std::string* msgStr =
new std::string(data);
111 return CreateMessage(const_cast<char*>(msgStr->c_str()), msgStr->length(), FairMQSimpleMsgCleanup<std::string>, msgStr);
114 FairMQMessagePtr NewSimpleMessage(
const std::string& str)
117 std::string* msgStr =
new std::string(str);
118 return CreateMessage(const_cast<char*>(msgStr->c_str()), msgStr->length(), FairMQSimpleMsgCleanup<std::string>, msgStr);
122 FairMQMessagePtr NewStaticMessage(
const T& data)
124 return CreateMessage(data,
sizeof(T), FairMQNoCleanup,
nullptr);
127 FairMQMessagePtr NewStaticMessage(
const std::string& str)
129 return CreateMessage(const_cast<char*>(str.c_str()), str.length(), FairMQNoCleanup,
nullptr);
virtual FairMQMessagePtr CreateMessage()=0
Create empty FairMQMessage.
Definition: FairMQTransportFactory.h:138
Definition: FairMQTransportFactory.h:28
virtual FairMQSocketPtr CreateSocket(const std::string &type, const std::string &name)=0
Create a socket.
Definition: FairMQChannel.h:27
FairMQTransportFactory(const std::string &id)
Definition: FairMQTransportFactory.cxx:25
Definition: FairMQProgOptions.h:37
virtual FairMQPollerPtr CreatePoller(const std::vector< FairMQChannel > &channels) const =0
Create a poller for a single channel (all subchannels)
fair::mq::ChannelResource * GetMemoryResource()
Get a pointer to the associated polymorphic memory resource.
Definition: FairMQTransportFactory.h:45
Definition: MemoryResources.h:60
Tools for interfacing containers to the transport via polymorphic allocators.
Definition: DeviceRunner.h:23
virtual fair::mq::Transport GetType() const =0
Get transport type.