1 #pragma once 2 3 #include <cstdint> 4 #include <functional> 5 #include <sdeventplus/internal/sdevent.hpp> 6 #include <sdeventplus/internal/sdref.hpp> 7 #include <systemd/sd-bus.h> 8 #include <type_traits> 9 10 namespace sdeventplus 11 { 12 namespace source 13 { 14 15 class Base 16 { 17 public: 18 using Callback = std::function<void(Base& source)>; 19 20 virtual ~Base(); 21 22 // We don't want to allow any kind of slicing. 23 Base(const Base& source) = delete; 24 Base& operator=(const Base& source) = delete; 25 Base(Base&& source) = delete; 26 Base& operator=(Base&& source) = delete; 27 28 int prepareCallback(); 29 30 const char* get_description(); 31 void set_description(const char* description); 32 void set_prepare(Callback&& callback); 33 int get_pending(); 34 int64_t get_priority(); 35 void set_priority(int64_t priority); 36 int get_enabled(); 37 void set_enabled(int enabled); 38 39 protected: 40 const internal::SdEvent* const sdevent; 41 const internal::SdRef<sd_event_source> source; 42 43 // Base sources cannot be directly constructed. 44 Base(sd_event_source* source, 45 internal::SdEvent* sdevent = &internal::sdevent_impl); 46 Base(sd_event_source* source, std::false_type, 47 internal::SdEvent* sdevent = &internal::sdevent_impl); 48 49 private: 50 Callback prepare; 51 }; 52 53 } // namespace source 54 } // namespace sdeventplus 55