Nui
Loading...
Searching...
No Matches
event.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <functional>
4#include <memory>
5#include <vector>
6
7namespace Nui
8{
9 struct EventImpl
10 {
11 virtual bool call(std::size_t eventId) = 0;
12 virtual bool valid() const = 0;
13
14 virtual ~EventImpl() = default;
15 EventImpl() = default;
16 EventImpl(EventImpl const&) = default;
17 EventImpl(EventImpl&&) = default;
18 EventImpl& operator=(EventImpl const&) = default;
20 };
21
23 {
24 TwoFunctorEventImpl(std::function<bool(std::size_t eventId)> action, std::function<bool()> valid)
25 : action_{std::move(action)}
26 , valid_{std::move(valid)}
27 {}
28
29 bool call(std::size_t eventId) override
30 {
31 auto result = action_(eventId);
32 return result;
33 }
34
35 bool valid() const override
36 {
37 return valid_();
38 }
39
40 private:
41 std::function<bool(std::size_t eventId)> action_;
42 std::function<bool()> valid_;
43 };
44
45 class Event
46 {
47 public:
48 explicit Event(
49 std::function<bool(std::size_t eventId)> action,
50 std::function<bool()> valid =
51 [] {
52 return true;
53 })
54 : impl_{std::make_unique<TwoFunctorEventImpl>(std::move(action), std::move(valid))}
55 {}
56 Event(Event const&) = delete;
57 Event(Event&&) = default;
58 Event& operator=(Event const&) = delete;
59 Event& operator=(Event&&) = default;
60 ~Event() = default;
61
62 explicit operator bool() const
63 {
64 return impl_->valid();
65 }
66 bool operator()(std::size_t eventId) const
67 {
68 return impl_->call(eventId);
69 }
70
71 private:
72 std::unique_ptr<EventImpl> impl_;
73 };
74}
Definition event.hpp:46
~Event()=default
Event(Event &&)=default
Event(Event const &)=delete
bool operator()(std::size_t eventId) const
Definition event.hpp:66
Event & operator=(Event const &)=delete
Event & operator=(Event &&)=default
Event(std::function< bool(std::size_t eventId)> action, std::function< bool()> valid=[] { return true;})
Definition event.hpp:48
Definition file_dialog.hpp:6
Definition event.hpp:10
EventImpl & operator=(EventImpl const &)=default
virtual ~EventImpl()=default
EventImpl & operator=(EventImpl &&)=default
EventImpl(EventImpl &&)=default
virtual bool valid() const =0
EventImpl(EventImpl const &)=default
virtual bool call(std::size_t eventId)=0
EventImpl()=default
Definition event.hpp:23
bool valid() const override
Definition event.hpp:35
bool call(std::size_t eventId) override
Definition event.hpp:29
TwoFunctorEventImpl(std::function< bool(std::size_t eventId)> action, std::function< bool()> valid)
Definition event.hpp:24