libfilezilla
Toggle main menu visibility
Loading...
Searching...
No Matches
lib
libfilezilla
event.hpp
Go to the documentation of this file.
1
#ifndef LIBFILEZILLA_EVENT_HEADER
2
#define LIBFILEZILLA_EVENT_HEADER
3
4
#include "
libfilezilla.hpp
"
5
6
#include <tuple>
7
#include <typeinfo>
8
12
13
namespace
fz
{
14
22
class
FZ_PUBLIC_SYMBOL event_base
23
{
24
public
:
25
event_base() =
default
;
26
virtual
~event_base() =
default
;
27
28
event_base(event_base
const
&) =
default
;
29
event_base& operator=(event_base
const
&) =
default
;
30
event_base(event_base &&) =
default
;
31
event_base& operator=(event_base &&) =
default
;
32
48
virtual
size_t
derived_type
()
const
= 0;
49
};
50
54
size_t
FZ_PUBLIC_SYMBOL
get_unique_type_id
(std::type_info
const
&
id
);
55
65
66
template
<
typename
UniqueType,
typename
...Values>
67
class
simple_event final :
public
event_base
68
{
69
public
:
70
typedef
UniqueType unique_type;
71
typedef
std::tuple<Values...> tuple_type;
72
73
using
event_base::event_base;
74
75
template
<
typename
First_Value,
typename
...Remaining_Values>
76
explicit
simple_event(First_Value&& value, Remaining_Values&& ...values)
77
:
v_
(std::forward<First_Value>(value), std::forward<Remaining_Values>(values)...)
78
{
79
}
80
82
inline
static
size_t
type
() {
83
// Exporting templates from DLLs is problematic to say the least. It breaks
84
// ODR, so we use this trick that goes over the type name.
85
static
size_t
const
v =
get_unique_type_id
(
typeid
(UniqueType*));
86
return
v;
87
}
88
90
virtual
size_t
derived_type
()
const override
{
91
return
type
();
92
}
93
98
mutable
tuple_type
v_
;
99
};
100
103
template
<
typename
T>
104
bool
same_type
(
event_base
const
& ev)
105
{
106
return
ev.
derived_type
() == T::type();
107
}
108
109
typedef
unsigned
long
long
timer_id;
110
112
struct
timer_event_type{};
113
118
typedef
simple_event<timer_event_type, timer_id>
timer_event
;
119
120
}
121
122
#endif
fz::event_base
Common base class for all events.
Definition
event.hpp:23
fz::event_base::derived_type
virtual size_t derived_type() const =0
fz::simple_event
This is the recommended event class.
Definition
event.hpp:68
fz::simple_event::v_
tuple_type v_
The event value, gets built from the arguments passed in the constructor.
Definition
event.hpp:98
fz::simple_event::derived_type
virtual size_t derived_type() const override
Simply returns type().
Definition
event.hpp:90
fz::simple_event::type
static size_t type()
Returns a unique id for the type such that can be used directly in derived_type.
Definition
event.hpp:82
libfilezilla.hpp
Sets some global macros and further includes string.hpp.
fz
The namespace used by libfilezilla.
Definition
apply.hpp:17
fz::timer_event
simple_event< timer_event_type, timer_id > timer_event
All timer events have this type.
Definition
event.hpp:118
fz::get_unique_type_id
size_t get_unique_type_id(std::type_info const &id)
fz::same_type
bool same_type(event_base const &ev)
Definition
event.hpp:104
Generated by
1.18.0