1 #include "hmbdc/Copyright.hpp" 4 #include "hmbdc/time/Time.hpp" 11 namespace hmbdc {
namespace app {
20 template <u
int16_t tag>
31 template <
typename Message> Message&
get();
32 template <
typename Message> Message
const&
get()
const;
33 template <
typename Message>
void setPayload(Message
const&);
34 template <
typename Message,
typename ...Args>
void setPayloadInPlace(Args&& ... args);
40 std::ostream& operator << (std::ostream& os,
MessageHead const & h) {
41 return os << h.reserved <<
' ' << h.typeTag;
43 } __attribute__((packed));
45 template <
typename Message>
47 template <
typename ...Args>
50 , payload(std::forward<Args>(args)...) {
51 static_assert(std::is_class<Message>::value,
"wrong type to wrap");
56 std::ostream& operator << (std::ostream& os, MessageWrap<Message>
const & w) {
57 return os << static_cast<MessageHead const&>(w) <<
' ' << w.payload;
61 template <
typename Message>
67 template <
typename Message>
69 MessageHead::get()
const{
73 template <
typename Message>
76 setPayload(Message
const& m) {
77 new (&get<Message>()) Message(m);
78 typeTag = Message::typeTag;
81 template <
typename Message,
typename ...Args>
84 setPayloadInPlace(Args&& ... args) {
85 new (&get<Message>()) Message(std::forward<Args>(args)...);
86 typeTag = Message::typeTag;
93 template <
size_t MaxStreamableSize>
96 char payload[MaxStreamableSize];
97 } __attribute__((__may_alias__, packed));
113 ts[0] = (time::SysTime::now());
118 std::ostream& operator << (std::ostream& os,
Trace const & t) {
119 for (
auto i = 0u; i < t.tsIndex; ++i) os << t.ts[i] <<
' ';
126 MessageWrap(uint16_t tag,
void const* bytes,
size_t len)
128 memcpy(&payload, bytes, len);
133 std::ostream& operator << (std::ostream& os, MessageWrap<JustBytes>
const & w) {
134 return os << static_cast<MessageHead const&>(w) <<
" *";
Definition: Message.hpp:125
Definition: Message.hpp:21
Definition: Message.hpp:94
Definition: Message.hpp:89
Definition: Message.hpp:25
A special type of message.
Definition: Message.hpp:105
Definition: Message.hpp:110
Definition: Message.hpp:46
Definition: Client.hpp:11