FairMQ  1.4.33
C++ Message Queuing Library and Framework
UnmanagedRegion.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 FAIR_MQ_ZMQ_UNMANAGEDREGION_H
10 #define FAIR_MQ_ZMQ_UNMANAGEDREGION_H
11 
12 #include <fairmq/zeromq/Context.h>
13 #include <FairMQUnmanagedRegion.h>
14 #include <FairMQLogger.h>
15 
16 #include <cstddef> // size_t
17 #include <string>
18 
19 namespace fair::mq::zmq
20 {
21 
22 class UnmanagedRegion final : public fair::mq::UnmanagedRegion
23 {
24  friend class Socket;
25  friend class Message;
26 
27  public:
29  size_t size,
30  int64_t userFlags,
31  RegionCallback callback,
32  RegionBulkCallback bulkCallback,
33  FairMQTransportFactory* factory = nullptr)
34  : fair::mq::UnmanagedRegion(factory)
35  , fCtx(ctx)
36  , fId(fCtx.RegionCount())
37  , fBuffer(malloc(size))
38  , fSize(size)
39  , fUserFlags(userFlags)
40  , fCallback(callback)
41  , fBulkCallback(bulkCallback)
42  {}
43 
44  UnmanagedRegion(const UnmanagedRegion&) = delete;
45  UnmanagedRegion operator=(const UnmanagedRegion&) = delete;
46 
47  virtual void* GetData() const override { return fBuffer; }
48  virtual size_t GetSize() const override { return fSize; }
49  uint16_t GetId() const override { return fId; }
50  int64_t GetUserFlags() const { return fUserFlags; }
51  void SetLinger(uint32_t /* linger */) override { LOG(debug) << "ZeroMQ UnmanagedRegion linger option not implemented. Acknowledgements are local."; }
52  uint32_t GetLinger() const override { LOG(debug) << "ZeroMQ UnmanagedRegion linger option not implemented. Acknowledgements are local."; return 0; }
53 
54  virtual ~UnmanagedRegion()
55  {
56  LOG(debug) << "destroying region " << fId;
57  fCtx.RemoveRegion(fId);
58  free(fBuffer);
59  }
60 
61  private:
62  Context& fCtx;
63  uint16_t fId;
64  void* fBuffer;
65  size_t fSize;
66  int64_t fUserFlags;
67  RegionCallback fCallback;
68  RegionBulkCallback fBulkCallback;
69 };
70 
71 } // namespace fair::mq::zmq
72 
73 #endif /* FAIR_MQ_ZMQ_UNMANAGEDREGION_H */
FairMQUnmanagedRegion
Definition: FairMQUnmanagedRegion.h:71
fair::mq::zmq::Context
Definition: Context.h:40
fair::mq::zmq::UnmanagedRegion
Definition: UnmanagedRegion.h:29
FairMQTransportFactory
Definition: FairMQTransportFactory.h:30

privacy