hmbdc
simplify-high-performance-messaging-programming
Messages.hpp
1 #include "hmbdc/Copyright.hpp"
2 #pragma once
3 
4 #include "hmbdc/app/Message.hpp"
5 
6 namespace hmbdc { namespace tips { namespace udpcast {
7 
9  uint16_t& messagePayloadLen() {
10  return *reinterpret_cast<uint16_t*>(payload());
11  }
12 
13  uint16_t const& messagePayloadLen() const {
14  return *reinterpret_cast<uint16_t const*>(payload());
15  }
16 
17  void const* payload() const {
18  return reinterpret_cast<const char*>(this)
19  + sizeof(TransportMessageHeader);
20  }
21 
22  void * payload() {
23  return reinterpret_cast<char*>(this)
24  + sizeof(TransportMessageHeader);
25  }
26 
27  uint16_t typeTag() const {
28  auto h = static_cast<app::MessageHead const*>(payload());
29  return h->typeTag;
30  }
31 
32  template <typename Message>
33  Message& wrapped() {
34  auto wrap = static_cast<app::MessageWrap<Message>*>(payload());
35  return wrap->payload;
36  }
37 
38  template <typename Message>
39  Message const& wrapped() const {
40  auto wrap = static_cast<app::MessageWrap<Message> const *>(payload());
41  return wrap->payload;
42  }
43 
44  size_t wireSize() const {
45  return sizeof(TransportMessageHeader) + messagePayloadLen();
46  }
47 } __attribute__((packed));
48 
49 }}}
Definition: Message.hpp:212
Definition: Message.hpp:263
Definition: Base.hpp:12