1 #pragma once
2 
3 #include <systemd/sd-event.h>
4 
5 namespace sdeventplus
6 {
7 namespace internal
8 {
9 
10 class SdEvent
11 {
12   public:
13     virtual ~SdEvent() = default;
14 
15     virtual int sd_event_default(sd_event** event) const = 0;
16     virtual int sd_event_new(sd_event** event) const = 0;
17     virtual sd_event* sd_event_ref(sd_event* event) const = 0;
18     virtual sd_event* sd_event_unref(sd_event* event) const = 0;
19 
20     virtual int sd_event_prepare(sd_event* event) const = 0;
21     virtual int sd_event_wait(sd_event* event, uint64_t usec) const = 0;
22     virtual int sd_event_dispatch(sd_event* event) const = 0;
23     virtual int sd_event_run(sd_event* event, uint64_t usec) const = 0;
24     virtual int sd_event_loop(sd_event* event) const = 0;
25     virtual int sd_event_exit(sd_event* event, int code) const = 0;
26 
27     virtual int sd_event_now(sd_event* event, clockid_t clock,
28                              uint64_t* usec) const = 0;
29 
30     virtual int sd_event_get_exit_code(sd_event* event, int* code) const = 0;
31     virtual int sd_event_get_watchdog(sd_event* event) const = 0;
32     virtual int sd_event_set_watchdog(sd_event* event, int b) const = 0;
33 
34     virtual sd_event_source*
35         sd_event_source_ref(sd_event_source* source) const = 0;
36     virtual sd_event_source*
37         sd_event_source_unref(sd_event_source* source) const = 0;
38 
39     virtual void* sd_event_source_set_userdata(sd_event_source* source,
40                                                void* userdata) const = 0;
41 
42     virtual int
43         sd_event_source_get_description(sd_event_source* source,
44                                         const char** description) const = 0;
45     virtual int
46         sd_event_source_set_description(sd_event_source* source,
47                                         const char* description) const = 0;
48     virtual int
49         sd_event_source_set_prepare(sd_event_source* source,
50                                     sd_event_handler_t callback) const = 0;
51     virtual int sd_event_source_get_pending(sd_event_source* source) const = 0;
52     virtual int sd_event_source_get_priority(sd_event_source* source,
53                                              int64_t* priority) const = 0;
54     virtual int sd_event_source_set_priority(sd_event_source* source,
55                                              int64_t priority) const = 0;
56     virtual int sd_event_source_get_enabled(sd_event_source* source,
57                                             int* enabled) const = 0;
58     virtual int sd_event_source_set_enabled(sd_event_source* source,
59                                             int enabled) const = 0;
60 };
61 
62 class SdEventImpl : public SdEvent
63 {
64   public:
65     int sd_event_default(sd_event** event) const override
66     {
67         return ::sd_event_default(event);
68     }
69 
70     int sd_event_new(sd_event** event) const override
71     {
72         return ::sd_event_default(event);
73     }
74 
75     sd_event* sd_event_ref(sd_event* event) const override
76     {
77         return ::sd_event_ref(event);
78     }
79 
80     sd_event* sd_event_unref(sd_event* event) const override
81     {
82         return ::sd_event_unref(event);
83     }
84 
85     int sd_event_prepare(sd_event* event) const override
86     {
87         return ::sd_event_prepare(event);
88     }
89 
90     int sd_event_wait(sd_event* event, uint64_t usec) const override
91     {
92         return ::sd_event_wait(event, usec);
93     }
94 
95     int sd_event_dispatch(sd_event* event) const override
96     {
97         return ::sd_event_dispatch(event);
98     }
99 
100     int sd_event_run(sd_event* event, uint64_t usec) const override
101     {
102         return ::sd_event_run(event, usec);
103     }
104 
105     int sd_event_loop(sd_event* event) const override
106     {
107         return ::sd_event_loop(event);
108     }
109 
110     int sd_event_exit(sd_event* event, int code) const override
111     {
112         return ::sd_event_exit(event, code);
113     }
114 
115     int sd_event_now(sd_event* event, clockid_t clock,
116                      uint64_t* usec) const override
117     {
118         return ::sd_event_now(event, clock, usec);
119     }
120 
121     int sd_event_get_exit_code(sd_event* event, int* code) const override
122     {
123         return ::sd_event_get_exit_code(event, code);
124     }
125 
126     int sd_event_get_watchdog(sd_event* event) const override
127     {
128         return ::sd_event_get_watchdog(event);
129     }
130 
131     int sd_event_set_watchdog(sd_event* event, int b) const override
132     {
133         return ::sd_event_set_watchdog(event, b);
134     }
135 
136     sd_event_source* sd_event_source_ref(sd_event_source* source) const override
137     {
138         return ::sd_event_source_ref(source);
139     }
140 
141     sd_event_source*
142         sd_event_source_unref(sd_event_source* source) const override
143     {
144         return ::sd_event_source_unref(source);
145     }
146 
147     void* sd_event_source_set_userdata(sd_event_source* source,
148                                        void* userdata) const override
149     {
150         return ::sd_event_source_set_userdata(source, userdata);
151     }
152 
153     int sd_event_source_get_description(sd_event_source* source,
154                                         const char** description) const override
155     {
156         return ::sd_event_source_get_description(source, description);
157     }
158 
159     int sd_event_source_set_description(sd_event_source* source,
160                                         const char* description) const override
161     {
162         return ::sd_event_source_set_description(source, description);
163     }
164 
165     int sd_event_source_set_prepare(sd_event_source* source,
166                                     sd_event_handler_t callback) const override
167     {
168         return ::sd_event_source_set_prepare(source, callback);
169     }
170 
171     int sd_event_source_get_pending(sd_event_source* source) const override
172     {
173         return ::sd_event_source_get_pending(source);
174     }
175 
176     int sd_event_source_get_priority(sd_event_source* source,
177                                      int64_t* priority) const override
178     {
179         return ::sd_event_source_get_priority(source, priority);
180     }
181 
182     int sd_event_source_set_priority(sd_event_source* source,
183                                      int64_t priority) const override
184     {
185         return ::sd_event_source_set_priority(source, priority);
186     }
187 
188     int sd_event_source_get_enabled(sd_event_source* source,
189                                     int* enabled) const override
190     {
191         return ::sd_event_source_get_enabled(source, enabled);
192     }
193 
194     int sd_event_source_set_enabled(sd_event_source* source,
195                                     int enabled) const override
196     {
197         return ::sd_event_source_set_enabled(source, enabled);
198     }
199 };
200 
201 extern SdEventImpl sdevent_impl;
202 
203 } // namespace internal
204 } // namespace sdeventplus
205