FairMQ  1.4.14
C++ Message Queuing Library and Framework
TransportFactory.h
1 /********************************************************************************
2  * Copyright (C) 2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
3  * *
4  * This software is distributed under the terms of the *
5  * GNU Lesser General Public Licence (LGPL) version 3, *
6  * copied verbatim in the file "LICENSE" *
7  ********************************************************************************/
8 
9 #ifndef FAIR_MQ_OFI_TRANSPORTFACTORY_H
10 #define FAIR_MQ_OFI_TRANSPORTFACTORY_H
11 
12 #include <FairMQTransportFactory.h>
13 #include <fairmq/ProgOptions.h>
14 #include <fairmq/ofi/Context.h>
15 
16 #include <asiofi.hpp>
17 
18 namespace fair
19 {
20 namespace mq
21 {
22 namespace ofi
23 {
24 
32 {
33  public:
34  TransportFactory(const std::string& id = "", const fair::mq::ProgOptions* config = nullptr);
35  TransportFactory(const TransportFactory&) = delete;
36  TransportFactory operator=(const TransportFactory&) = delete;
37 
38  auto CreateMessage() -> MessagePtr override;
39  auto CreateMessage(const std::size_t size) -> MessagePtr override;
40  auto CreateMessage(void* data, const std::size_t size, fairmq_free_fn* ffn, void* hint = nullptr) -> MessagePtr override;
41  auto CreateMessage(UnmanagedRegionPtr& region, void* data, const std::size_t size, void* hint = nullptr) -> MessagePtr override;
42 
43  auto CreateSocket(const std::string& type, const std::string& name) -> SocketPtr override;
44 
45  auto CreatePoller(const std::vector<FairMQChannel>& channels) const -> PollerPtr override;
46  auto CreatePoller(const std::vector<FairMQChannel*>& channels) const -> PollerPtr override;
47  auto CreatePoller(const std::unordered_map<std::string, std::vector<FairMQChannel>>& channelsMap, const std::vector<std::string>& channelList) const -> PollerPtr override;
48 
49  auto CreateUnmanagedRegion(const size_t size, RegionCallback callback = nullptr, const std::string& path = "", int flags = 0) const -> UnmanagedRegionPtr override;
50  auto CreateUnmanagedRegion(const size_t size, int64_t userFlags, RegionCallback callback = nullptr, const std::string& path = "", int flags = 0) const -> UnmanagedRegionPtr override;
51 
52  void SubscribeToRegionEvents(RegionEventCallback /* callback */) override { LOG(error) << "SubscribeToRegionEvents not yet implemented for OFI"; }
53  void UnsubscribeFromRegionEvents() override { LOG(error) << "UnsubscribeFromRegionEvents not yet implemented for OFI"; }
54  std::vector<FairMQRegionInfo> GetRegionInfo() override { LOG(error) << "GetRegionInfo not yet implemented for OFI, returning empty vector"; return std::vector<FairMQRegionInfo>(); }
55 
56  auto GetType() const -> Transport override;
57 
58  void Interrupt() override { fContext.Interrupt(); }
59  void Resume() override { fContext.Resume(); }
60  void Reset() override { fContext.Reset(); }
61 
62  private:
63  mutable Context fContext;
64  asiofi::allocated_pool_resource fMemoryResource;
65 }; /* class TransportFactory */
66 
67 } /* namespace ofi */
68 } /* namespace mq */
69 } /* namespace fair */
70 
71 #endif /* FAIR_MQ_OFI_TRANSPORTFACTORY_H */
Transport-wide context.
Definition: Context.h:56
auto CreateSocket(const std::string &type, const std::string &name) -> SocketPtr override
Create a socket.
auto CreateMessage() -> MessagePtr override
Create empty FairMQMessage.
Definition: TransportFactory.cxx:39
void SubscribeToRegionEvents(RegionEventCallback) override
Subscribe to region events (creation, destruction, ...)
Definition: TransportFactory.h:52
Definition: FairMQTransportFactory.h:30
auto GetType() const -> Transport override
Get transport type.
Definition: TransportFactory.cxx:98
Definition: ProgOptions.h:36
FairMQ transport factory for the ofi transport.
Definition: TransportFactory.h:31
auto CreatePoller(const std::vector< FairMQChannel > &channels) const -> PollerPtr override
Create a poller for a single channel (all subchannels)
void UnsubscribeFromRegionEvents() override
Unsubscribe from region events.
Definition: TransportFactory.h:53
auto CreateUnmanagedRegion(const size_t size, RegionCallback callback=nullptr, const std::string &path="", int flags=0) const -> UnmanagedRegionPtr override
Create new UnmanagedRegion.
Definition: TransportFactory.cxx:88
Tools for interfacing containers to the transport via polymorphic allocators.
Definition: DeviceRunner.h:23

privacy