FairMQ  1.4.14
C++ Message Queuing Library and Framework
Message.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 #ifndef FAIR_MQ_SHMEM_MESSAGE_H_
9 #define FAIR_MQ_SHMEM_MESSAGE_H_
10 
11 #include "Common.h"
12 #include "Manager.h"
13 
14 #include <FairMQMessage.h>
15 #include <FairMQUnmanagedRegion.h>
16 
17 #include <boost/interprocess/mapped_region.hpp>
18 
19 #include <cstddef> // size_t
20 #include <atomic>
21 
22 namespace fair
23 {
24 namespace mq
25 {
26 namespace shmem
27 {
28 
29 class Socket;
30 
31 class Message final : public fair::mq::Message
32 {
33  friend class Socket;
34 
35  public:
36  Message(Manager& manager, FairMQTransportFactory* factory = nullptr);
37  Message(Manager& manager, const size_t size, FairMQTransportFactory* factory = nullptr);
38  Message(Manager& manager, void* data, const size_t size, fairmq_free_fn* ffn, void* hint = nullptr, FairMQTransportFactory* factory = nullptr);
39  Message(Manager& manager, UnmanagedRegionPtr& region, void* data, const size_t size, void* hint = 0, FairMQTransportFactory* factory = nullptr);
40 
41  Message(Manager& manager, MetaHeader& hdr, FairMQTransportFactory* factory = nullptr);
42 
43  Message(const Message&) = delete;
44  Message operator=(const Message&) = delete;
45 
46  void Rebuild() override;
47  void Rebuild(const size_t size) override;
48  void Rebuild(void* data, const size_t size, fairmq_free_fn* ffn, void* hint = nullptr) override;
49 
50  void* GetData() const override;
51  size_t GetSize() const override { return fMeta.fSize; }
52 
53  bool SetUsedSize(const size_t size) override;
54 
55  Transport GetType() const override { return fTransportType; }
56 
57  void Copy(const fair::mq::Message& msg) override;
58 
59  ~Message() override;
60 
61  private:
62  Manager& fManager;
63  bool fQueued;
64  MetaHeader fMeta;
65  mutable Region* fRegionPtr;
66  mutable char* fLocalPtr;
67 
68  static Transport fTransportType;
69 
70  bool InitializeChunk(const size_t size);
71  void CloseMessage();
72 };
73 
74 }
75 }
76 }
77 
78 #endif /* FAIR_MQ_SHMEM_MESSAGE_H_ */
Definition: Manager.h:46
Definition: Region.h:41
Definition: FairMQTransportFactory.h:30
Definition: Socket.h:28
Tools for interfacing containers to the transport via polymorphic allocators.
Definition: DeviceRunner.h:23
Definition: FairMQMessage.h:20
Definition: Message.h:31
Definition: Common.h:82

privacy