1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#include <sdeventplus/internal/sdevent.hpp>
#include <sdeventplus/source/event.hpp>
#include <utility>
namespace sdeventplus
{
namespace source
{
void EventBase::set_callback(Callback&& callback)
{
this->callback = std::move(callback);
}
EventBase::EventBase(const char* name, CreateFunc create, const Event& event,
Callback&& callback) :
Base(event, create_source(name, create, event), std::false_type()),
callback(std::move(callback))
{
}
const EventBase::Callback& EventBase::get_callback() const
{
return callback;
}
sd_event_source* EventBase::create_source(const char* name, CreateFunc create,
const Event& event)
{
sd_event_source* source;
int r = (event.getSdEvent()->*create)(event.get(), &source, eventCallback,
nullptr);
if (r < 0)
{
throw SdEventError(-r, name);
}
return source;
}
int EventBase::eventCallback(sd_event_source* source, void* userdata)
{
return sourceCallback<Callback, EventBase, &EventBase::get_callback>(
"eventCallback", source, userdata);
}
Defer::Defer(const Event& event, Callback&& callback) :
EventBase("sd_event_add_defer", &internal::SdEvent::sd_event_add_defer,
event, std::move(callback))
{
}
Post::Post(const Event& event, Callback&& callback) :
EventBase("sd_event_add_post", &internal::SdEvent::sd_event_add_post, event,
std::move(callback))
{
}
Exit::Exit(const Event& event, Callback&& callback) :
EventBase("sd_event_add_exit", &internal::SdEvent::sd_event_add_exit, event,
std::move(callback))
{
}
} // namespace source
} // namespace sdeventplus
|