1*0a816c5dSWilliam A. Kennington III #pragma once
2*0a816c5dSWilliam A. Kennington III 
3*0a816c5dSWilliam A. Kennington III #include <sdeventplus/internal/sdevent.hpp>
4*0a816c5dSWilliam A. Kennington III #include <sdeventplus/internal/sdref.hpp>
5*0a816c5dSWilliam A. Kennington III #include <systemd/sd-bus.h>
6*0a816c5dSWilliam A. Kennington III #include <type_traits>
7*0a816c5dSWilliam A. Kennington III 
8*0a816c5dSWilliam A. Kennington III namespace sdeventplus
9*0a816c5dSWilliam A. Kennington III {
10*0a816c5dSWilliam A. Kennington III namespace source
11*0a816c5dSWilliam A. Kennington III {
12*0a816c5dSWilliam A. Kennington III 
13*0a816c5dSWilliam A. Kennington III class Base
14*0a816c5dSWilliam A. Kennington III {
15*0a816c5dSWilliam A. Kennington III   public:
16*0a816c5dSWilliam A. Kennington III     // We don't want to allow any kind of slicing.
17*0a816c5dSWilliam A. Kennington III     Base(const Base& source) = delete;
18*0a816c5dSWilliam A. Kennington III     Base& operator=(const Base& source) = delete;
19*0a816c5dSWilliam A. Kennington III     Base(Base&& source) = delete;
20*0a816c5dSWilliam A. Kennington III     Base& operator=(Base&& source) = delete;
21*0a816c5dSWilliam A. Kennington III 
22*0a816c5dSWilliam A. Kennington III   protected:
23*0a816c5dSWilliam A. Kennington III     internal::SdEvent* sdevent;
24*0a816c5dSWilliam A. Kennington III     internal::SdRef<sd_event_source> source;
25*0a816c5dSWilliam A. Kennington III 
26*0a816c5dSWilliam A. Kennington III     // Base sources cannot be directly constructed.
27*0a816c5dSWilliam A. Kennington III     Base(sd_event_source* source,
28*0a816c5dSWilliam A. Kennington III          internal::SdEvent* sdevent = &internal::sdevent_impl);
29*0a816c5dSWilliam A. Kennington III     Base(sd_event_source* source, std::false_type,
30*0a816c5dSWilliam A. Kennington III          internal::SdEvent* sdevent = &internal::sdevent_impl);
31*0a816c5dSWilliam A. Kennington III };
32*0a816c5dSWilliam A. Kennington III 
33*0a816c5dSWilliam A. Kennington III } // namespace source
34*0a816c5dSWilliam A. Kennington III } // namespace sdeventplus
35