simple thread
message.hpp
1 //SPDX-License-Identifier: LicenseRef-Apache-License-2.0
2 //Author: Blayne Dennis
3 
4 #ifndef __SIMPLE_THREADING_MESSAGE__
5 #define __SIMPLE_THREADING_MESSAGE__
6 
7 #include "data.hpp"
8 #include "context.hpp"
9 
10 namespace st { // simple thread
11 namespace detail {
12 namespace message {
13 
14 struct context {
15  context(const std::size_t c) : m_id(c) { }
16 
17  context(const std::size_t c, st::data&& d) :
18  m_id(c),
19  m_data(std::move(d))
20  { }
21 
22  virtual ~context() { }
23 
24  std::size_t m_id;
25  st::data m_data;
26 };
27 
28 }
29 }
30 
36 struct message : public st::shared_context<message, detail::message::context> {
37  virtual ~message() { }
38 
44  static inline message make(message msg) {
45  return std::move(msg);
46  }
47 
55  static inline message make(std::size_t id, st::data&& d) {
56  message msg;
57  msg.ctx(std::make_shared<detail::message::context>(id, std::move(d)));
58  return msg;
59  }
60 
68  template <typename T>
69  static message make(std::size_t id, T&& t) {
70  return st::message::make(id, st::data::make<T>(std::forward<T>(t)));
71  }
72 
79  static inline message make(std::size_t id) {
80  message msg;
81  msg.ctx(std::make_shared<detail::message::context>(id));
82  return msg;
83  }
84 
90  static inline message make() {
91  return message::make(0);
92  }
93 
100  const std::size_t id() const {
101  return ctx()->m_id;
102  }
103 
107  inline st::data& data() {
108  return ctx()->m_data;
109  }
110 };
111 
112 }
113 
114 #endif
type erased data container
Definition: data.hpp:24
interthread type erased message container
Definition: message.hpp:36
static message make()
construct a message
Definition: message.hpp:90
static message make(std::size_t id)
construct a message
Definition: message.hpp:79
static message make(std::size_t id, st::data &&d)
construct a message
Definition: message.hpp:55
const std::size_t id() const
an unsigned integer representing message's intended operation
Definition: message.hpp:100
static message make(message msg)
convenience function for templating
Definition: message.hpp:44
st::data & data()
optional type erased payload data
Definition: message.hpp:107
static message make(std::size_t id, T &&t)
construct a message
Definition: message.hpp:69
CRTP-templated interface to provide shared context api.
Definition: context.hpp:43
std::shared_ptr< detail::message::context > & ctx() const
Definition: context.hpp:50