FairMQ  1.4.33
C++ Message Queuing Library and Framework
FairMQUnmanagedRegion.h
1 /********************************************************************************
2  * Copyright (C) 2014 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 FAIRMQUNMANAGEDREGION_H_
10 #define FAIRMQUNMANAGEDREGION_H_
11 
12 #include <cstddef> // size_t
13 #include <cstdint> // uint32_t
14 #include <memory> // std::unique_ptr
15 #include <functional> // std::function
16 #include <ostream> // std::ostream
17 #include <vector>
18 
20 
21 enum class FairMQRegionEvent : int
22 {
23  created,
24  destroyed,
25  local_only
26 };
27 
29 {
31  : managed(true)
32  , id(0)
33  , ptr(nullptr)
34  , size(0)
35  , flags(0)
36  , event(FairMQRegionEvent::created)
37  {}
38 
39  FairMQRegionInfo(bool _managed, uint64_t _id, void* _ptr, size_t _size, int64_t _flags, FairMQRegionEvent _event)
40  : managed(_managed)
41  , id(_id)
42  , ptr(_ptr)
43  , size(_size)
44  , flags(_flags)
45  , event(_event)
46  {}
47 
48  bool managed; // managed/unmanaged
49  uint64_t id; // id of the region
50  void* ptr; // pointer to the start of the region
51  size_t size; // region size
52  int64_t flags; // custom flags set by the creator
53  FairMQRegionEvent event;
54 };
55 
57  void* ptr;
58  size_t size;
59  void* hint;
60 
61  FairMQRegionBlock(void* p, size_t s, void* h)
62  : ptr(p), size(s), hint(h)
63  {}
64 };
65 
66 using FairMQRegionCallback = std::function<void(void*, size_t, void*)>;
67 using FairMQRegionBulkCallback = std::function<void(const std::vector<FairMQRegionBlock>&)>;
68 using FairMQRegionEventCallback = std::function<void(FairMQRegionInfo)>;
69 
71 {
72  public:
74  FairMQUnmanagedRegion(FairMQTransportFactory* factory) : fTransport(factory) {}
75 
76  virtual void* GetData() const = 0;
77  virtual size_t GetSize() const = 0;
78  virtual uint16_t GetId() const = 0;
79  virtual void SetLinger(uint32_t linger) = 0;
80  virtual uint32_t GetLinger() const = 0;
81 
82  FairMQTransportFactory* GetTransport() { return fTransport; }
83  void SetTransport(FairMQTransportFactory* transport) { fTransport = transport; }
84 
85  virtual ~FairMQUnmanagedRegion() {};
86 
87  private:
88  FairMQTransportFactory* fTransport{nullptr};
89 };
90 
91 using FairMQUnmanagedRegionPtr = std::unique_ptr<FairMQUnmanagedRegion>;
92 
93 inline std::ostream& operator<<(std::ostream& os, const FairMQRegionEvent& event)
94 {
95  switch (event) {
96  case FairMQRegionEvent::created:
97  return os << "created";
98  case FairMQRegionEvent::destroyed:
99  return os << "destroyed";
100  case FairMQRegionEvent::local_only:
101  return os << "local_only";
102  default:
103  return os << "unrecognized event";
104  }
105 }
106 
107 namespace fair::mq
108 {
109 
110 using RegionCallback = FairMQRegionCallback;
111 using RegionBulkCallback = FairMQRegionBulkCallback;
112 using RegionEventCallback = FairMQRegionEventCallback;
113 using RegionEvent = FairMQRegionEvent;
114 using RegionInfo = FairMQRegionInfo;
115 using RegionBlock = FairMQRegionBlock;
116 using UnmanagedRegion = FairMQUnmanagedRegion;
117 using UnmanagedRegionPtr = FairMQUnmanagedRegionPtr;
118 
119 } // namespace fair::mq
120 
121 #endif /* FAIRMQUNMANAGEDREGION_H_ */
FairMQRegionBlock
Definition: FairMQUnmanagedRegion.h:56
FairMQRegionInfo
Definition: FairMQUnmanagedRegion.h:29
fair::mq
Tools for interfacing containers to the transport via polymorphic allocators.
Definition: DeviceRunner.h:23
FairMQUnmanagedRegion
Definition: FairMQUnmanagedRegion.h:71
FairMQTransportFactory
Definition: FairMQTransportFactory.h:30

privacy