rad 6.2.0
Loading...
Searching...
No Matches
anyEvent.hpp
Go to the documentation of this file.
1
9#ifndef RAD_ANYEVENT_HPP
10#define RAD_ANYEVENT_HPP
11
12#include <memory>
13#include <stdexcept>
14#include <type_traits>
15#include <typeindex>
16
17namespace rad {
18
19struct IncorrectEventType : public std::runtime_error {
20 using std::runtime_error::runtime_error;
21};
22
26struct EventInfo {
27 enum class Context { any, statemachine };
28
32 std::string id;
33
37 std::type_index payload;
38
41};
42
43class AnyEvent;
44using SharedEvent = std::shared_ptr<const AnyEvent>;
45using UniqueEvent = std::unique_ptr<AnyEvent>;
46
52class AnyEvent {
53 public:
54 virtual ~AnyEvent();
55
60 inline char const* GetId() const { return m_id; }
61
65 virtual AnyEvent* Clone() const = 0;
66
67 protected:
68 AnyEvent(char const* id);
70
71 AnyEvent(AnyEvent const& e) = default;
72 AnyEvent(AnyEvent&& e) = default;
73 AnyEvent& operator=(AnyEvent const& e) = default;
75
76 private:
77 // needs to point to a static area in memory
78 char const* m_id;
79};
80
92template <typename EventTrait>
93class EventT final : public ::rad::AnyEvent {
94 public:
95 static constexpr char const* ID = EventTrait::ID;
96 using payload_t = typename EventTrait::payload_t;
97
98 template <typename... Args, typename = typename std::enable_if<
99 std::is_constructible<payload_t, Args...>::value>::type>
100 explicit EventT(Args&&... args) : AnyEvent(EventT::ID), m_payload(std::forward<Args>(args)...) {}
101
102 EventT(EventT const&) = default;
103 EventT(EventT&&) = default;
104 EventT& operator=(EventT const& e) = default;
105
106 payload_t const& GetPayload() const { return m_payload; }
107
108 payload_t& GetPayload() { return m_payload; }
109
110 AnyEvent* Clone() const override { return new EventT(*this); }
111
112 private:
113 payload_t m_payload;
114};
115
116} // namespace rad
117
118#endif // RAD_ANYEVENT_HPP
Definition anyEvent.hpp:52
AnyEvent(AnyEvent &&e)=default
char const * GetId() const
Definition anyEvent.hpp:60
AnyEvent & operator=(AnyEvent const &e)=default
AnyEvent(AnyEvent const &e)=default
virtual ~AnyEvent()
Definition anyEvent.cpp:15
virtual AnyEvent * Clone() const =0
AnyEvent(char const *id)
Definition anyEvent.cpp:13
Definition anyEvent.hpp:93
EventT(EventT const &)=default
static constexpr char const * ID
Definition anyEvent.hpp:95
payload_t const & GetPayload() const
Definition anyEvent.hpp:106
AnyEvent * Clone() const override
Definition anyEvent.hpp:110
EventT(Args &&... args)
Definition anyEvent.hpp:100
payload_t & GetPayload()
Definition anyEvent.hpp:108
EventT(EventT &&)=default
EventT & operator=(EventT const &e)=default
typename EventTrait::payload_t payload_t
Definition anyEvent.hpp:96
Definition actionsApp.cpp:23
std::unique_ptr< AnyEvent > UniqueEvent
Definition anyEvent.hpp:45
std::shared_ptr< const AnyEvent > SharedEvent
Definition anyEvent.hpp:44
Definition errors.hpp:58
Definition testCoroActivity.cpp:16
Definition anyEvent.hpp:26
std::string id
Definition anyEvent.hpp:32
std::type_index payload
Definition anyEvent.hpp:37
Context context
Definition anyEvent.hpp:40
Definition anyEvent.hpp:19