FairMQ  1.4.33
C++ Message Queuing Library and Framework
FairMQMessage.h
1 /********************************************************************************
2  * Copyright (C) 2014-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 FAIRMQMESSAGE_H_
10 #define FAIRMQMESSAGE_H_
11 
12 #include <cstddef> // for size_t
13 #include <memory> // unique_ptr
14 #include <stdexcept>
15 
16 #include <fairmq/Transports.h>
17 
18 using fairmq_free_fn = void(void* data, void* hint);
20 
21 namespace fair::mq
22 {
23 
24 struct Alignment
25 {
26  size_t alignment;
27  explicit operator size_t() const { return alignment; }
28 };
29 
30 } // namespace fair::mq
31 
33 {
34  public:
35  FairMQMessage() = default;
36  FairMQMessage(FairMQTransportFactory* factory) : fTransport(factory) {}
37 
38  virtual void Rebuild() = 0;
39  virtual void Rebuild(fair::mq::Alignment alignment) = 0;
40  virtual void Rebuild(const size_t size) = 0;
41  virtual void Rebuild(const size_t size, fair::mq::Alignment alignment) = 0;
42  virtual void Rebuild(void* data, const size_t size, fairmq_free_fn* ffn, void* hint = nullptr) = 0;
43 
44  virtual void* GetData() const = 0;
45  virtual size_t GetSize() const = 0;
46 
47  virtual bool SetUsedSize(const size_t size) = 0;
48 
49  virtual fair::mq::Transport GetType() const = 0;
50  FairMQTransportFactory* GetTransport() { return fTransport; }
51  void SetTransport(FairMQTransportFactory* transport) { fTransport = transport; }
52 
53  virtual void Copy(const FairMQMessage& msg) = 0;
54 
55  virtual ~FairMQMessage() {};
56 
57  private:
58  FairMQTransportFactory* fTransport{nullptr};
59 };
60 
61 using FairMQMessagePtr = std::unique_ptr<FairMQMessage>;
62 
63 namespace fair::mq
64 {
65 
66 using Message = FairMQMessage;
67 using MessagePtr = FairMQMessagePtr;
68 struct MessageError : std::runtime_error { using std::runtime_error::runtime_error; };
69 struct MessageBadAlloc : std::runtime_error { using std::runtime_error::runtime_error; };
70 
71 } // namespace fair::mq
72 
73 #endif /* FAIRMQMESSAGE_H_ */
fair::mq::Alignment
Definition: FairMQMessage.h:25
fair::mq::MessageError
Definition: FairMQMessage.h:68
fair::mq
Tools for interfacing containers to the transport via polymorphic allocators.
Definition: DeviceRunner.h:23
fair::mq::MessageBadAlloc
Definition: FairMQMessage.h:69
FairMQMessage
Definition: FairMQMessage.h:33
FairMQTransportFactory
Definition: FairMQTransportFactory.h:30

privacy