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_SHMEM_UNMANAGEDREGION_H_
10 #define FAIR_MQ_SHMEM_UNMANAGEDREGION_H_
11 
12 #include "Manager.h"
13 
14 #include <FairMQUnmanagedRegion.h>
15 #include <FairMQLogger.h>
16 
17 #include <boost/interprocess/shared_memory_object.hpp>
18 #include <boost/interprocess/mapped_region.hpp>
19 
20 #include <cstddef> // size_t
21 #include <string>
22 
23 namespace fair::mq::shmem
24 {
25 
26 class Message;
27 class Socket;
28 
29 class UnmanagedRegion final : public fair::mq::UnmanagedRegion
30 {
31  friend class Message;
32  friend class Socket;
33 
34  public:
36  const size_t size,
37  const int64_t userFlags,
38  RegionCallback callback,
39  RegionBulkCallback bulkCallback,
40  const std::string& path = "",
41  int flags = 0,
42  FairMQTransportFactory* factory = nullptr)
43  : FairMQUnmanagedRegion(factory)
44  , fManager(manager)
45  , fRegion(nullptr)
46  , fRegionId(0)
47  {
48  auto result = fManager.CreateRegion(size, userFlags, callback, bulkCallback, path, flags);
49  fRegion = result.first;
50  fRegionId = result.second;
51  }
52 
53  void* GetData() const override { return fRegion->get_address(); }
54  size_t GetSize() const override { return fRegion->get_size(); }
55  uint16_t GetId() const override { return fRegionId; }
56  void SetLinger(uint32_t linger) override { fManager.GetRegion(fRegionId)->SetLinger(linger); }
57  uint32_t GetLinger() const override { return fManager.GetRegion(fRegionId)->GetLinger(); }
58 
59  ~UnmanagedRegion() override { fManager.RemoveRegion(fRegionId); }
60 
61  private:
62  Manager& fManager;
63  boost::interprocess::mapped_region* fRegion;
64  uint16_t fRegionId;
65 };
66 
67 } // namespace fair::mq::shmem
68 
69 #endif /* FAIR_MQ_SHMEM_UNMANAGEDREGION_H_ */
fair::mq::shmem::Manager
Definition: Manager.h:61
FairMQUnmanagedRegion
Definition: FairMQUnmanagedRegion.h:71
fair::mq::shmem::UnmanagedRegion
Definition: UnmanagedRegion.h:36
fair::mq::shmem
Definition: Common.h:33
FairMQTransportFactory
Definition: FairMQTransportFactory.h:30

privacy