rad
3.0.0
INTROOT
include
rad
event.hpp
Go to the documentation of this file.
1
9
#ifndef RAD_EVENT_HPP
10
#define RAD_EVENT_HPP
11
12
#include <memory>
13
#include "rad/anyEvent.hpp"
14
#include "rad/detail/Holder.hpp"
15
16
namespace
rad
{
17
21
template
<
typename
EVENT,
typename
=
void
>
22
class
Event
{
23
public
:
24
char
const
*
GetId
()
const
{
return
EVENT::id; }
25
};
26
31
template
<
typename
EVENT>
32
class
Event
<EVENT, typename
std
::enable_if<!std::is_void<typename EVENT::payload_t>::value>::type> {
33
using
payload_t =
typename
EVENT::payload_t;
34
35
public
:
37
38
Event
(
Event
const
& e) =
default
;
39
Event
(
Event
& e) =
default
;
40
Event
(
Event
&& e) =
default
;
41
Event
&
operator=
(
Event
const
& e) =
default
;
43
47
template
<
class
... Args>
48
// typename std::enable_if<!std::is_same<Event<EVENT>, Args...>::value>::type>
49
Event
(Args&&...
args
) : m_ptr{
new
detail::HolderTImpl<EVENT>{std::forward<Args>(
args
)...}} {}
50
51
char
const
*
GetId
()
const
{
return
EVENT::id; }
52
53
payload_t&
GetPayload
() {
54
return
static_cast<
detail::HolderTImpl<EVENT>*
>
(m_ptr.get())->m_payload;
55
}
56
57
payload_t
const
&
GetPayload
()
const
{
return
const_cast<
Event<EVENT>
*
>
(
this
)->getPayload(); }
58
59
AnyEvent
MakeAny
() {
60
// @todo: Move to a free function make_any(Event<EVENT>);
61
return
AnyEvent
(m_ptr);
62
}
63
64
private
:
65
// Use Holder to allow easy conversion to AnyEvent and vice-versa
66
std::shared_ptr<detail::Holder> m_ptr;
67
};
68
69
}
// namespace rad
70
71
#endif // EVENT_EVENT_HPP
rad::Event< EVENT, typename std::enable_if<!std::is_void< typename EVENT::payload_t >::value >::type >::GetPayload
payload_t const & GetPayload() const
Definition:
event.hpp:57
rad::Event< EVENT, typename std::enable_if<!std::is_void< typename EVENT::payload_t >::value >::type >::GetId
char const * GetId() const
Definition:
event.hpp:51
rad::Event< EVENT, typename std::enable_if<!std::is_void< typename EVENT::payload_t >::value >::type >::operator=
Event & operator=(Event const &e)=default
rad::Event::GetId
char const * GetId() const
Definition:
event.hpp:24
rad::Event< EVENT, typename std::enable_if<!std::is_void< typename EVENT::payload_t >::value >::type >::Event
Event(Event &e)=default
rad::Event< EVENT, typename std::enable_if<!std::is_void< typename EVENT::payload_t >::value >::type >::Event
Event(Event const &e)=default
rad
Definition:
actionCallback.hpp:21
rad::AnyEvent
Definition:
anyEvent.hpp:52
rad::Event< EVENT, typename std::enable_if<!std::is_void< typename EVENT::payload_t >::value >::type >::MakeAny
AnyEvent MakeAny()
Definition:
event.hpp:59
rad::Event< EVENT, typename std::enable_if<!std::is_void< typename EVENT::payload_t >::value >::type >::Event
Event(Event &&e)=default
rad::Event< EVENT, typename std::enable_if<!std::is_void< typename EVENT::payload_t >::value >::type >::Event
Event(Args &&... args)
Definition:
event.hpp:49
hellorad.args
args
Definition:
hellorad.py:185
rad::Event< EVENT, typename std::enable_if<!std::is_void< typename EVENT::payload_t >::value >::type >::GetPayload
payload_t & GetPayload()
Definition:
event.hpp:53
std
Definition:
errors.hpp:58
rad::Event
Definition:
event.hpp:22
Generated by
1.8.20