libfilezilla
Loading...
Searching...
No Matches
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
13namespace fz {
14
22class FZ_PUBLIC_SYMBOL event_base
23{
24public:
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
54size_t FZ_PUBLIC_SYMBOL get_unique_type_id(std::type_info const& id);
55
65
66template<typename UniqueType, typename...Values>
67class simple_event final : public event_base
68{
69public:
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
103template<typename T>
104bool same_type(event_base const& ev)
105{
106 return ev.derived_type() == T::type();
107}
108
109typedef unsigned long long timer_id;
110
112struct timer_event_type{};
113
119
120}
121
122#endif
Common base class for all events.
Definition event.hpp:23
virtual size_t derived_type() const =0
This is the recommended event class.
Definition event.hpp:68
tuple_type v_
The event value, gets built from the arguments passed in the constructor.
Definition event.hpp:98
virtual size_t derived_type() const override
Simply returns type()
Definition event.hpp:90
static size_t type()
Returns a unique id for the type such that can be used directly in derived_type.
Definition event.hpp:82
Sets some global macros and further includes string.hpp.
The namespace used by libfilezilla.
Definition apply.hpp:17
simple_event< timer_event_type, timer_id > timer_event
All timer events have this type.
Definition event.hpp:118
size_t get_unique_type_id(std::type_info const &id)
bool same_type(event_base const &ev)
Definition event.hpp:104