diff options
| author | William A. Kennington III <wak@google.com> | 2018-07-17 14:40:14 -0700 |
|---|---|---|
| committer | William A. Kennington III <wak@google.com> | 2018-07-17 14:40:14 -0700 |
| commit | 65db863e625b04e2094849702eca8a63958f6279 (patch) | |
| tree | 6bac606940ab9a126a3c19bb8196a5545e046590 /src | |
| parent | 321ed0114076aee9f556926362555fa285ab04f0 (diff) | |
| download | sdeventplus-65db863e625b04e2094849702eca8a63958f6279.tar.gz sdeventplus-65db863e625b04e2094849702eca8a63958f6279.zip | |
source/base: Expose trivial built in methods
Diffstat (limited to 'src')
| -rw-r--r-- | src/sdeventplus/internal/sdevent.hpp | 51 | ||||
| -rw-r--r-- | src/sdeventplus/source/base.cpp | 81 | ||||
| -rw-r--r-- | src/sdeventplus/source/base.hpp | 15 | ||||
| -rw-r--r-- | src/sdeventplus/test/sdevent.hpp | 15 |
4 files changed, 160 insertions, 2 deletions
diff --git a/src/sdeventplus/internal/sdevent.hpp b/src/sdeventplus/internal/sdevent.hpp index 7603a3d..e6c420c 100644 --- a/src/sdeventplus/internal/sdevent.hpp +++ b/src/sdeventplus/internal/sdevent.hpp @@ -25,6 +25,22 @@ class SdEvent sd_event_source_ref(sd_event_source* source) const = 0; virtual sd_event_source* sd_event_source_unref(sd_event_source* source) const = 0; + + virtual int + sd_event_source_get_description(sd_event_source* source, + const char** description) const = 0; + virtual int + sd_event_source_set_description(sd_event_source* source, + const char* description) const = 0; + virtual int sd_event_source_get_pending(sd_event_source* source) const = 0; + virtual int sd_event_source_get_priority(sd_event_source* source, + int64_t* priority) const = 0; + virtual int sd_event_source_set_priority(sd_event_source* source, + int64_t priority) const = 0; + virtual int sd_event_source_get_enabled(sd_event_source* source, + int* enabled) const = 0; + virtual int sd_event_source_set_enabled(sd_event_source* source, + int enabled) const = 0; }; class SdEventImpl : public SdEvent @@ -74,6 +90,41 @@ class SdEventImpl : public SdEvent { return ::sd_event_source_unref(source); } + + int sd_event_source_get_description(sd_event_source* source, + const char** description) const override + { + return ::sd_event_source_get_description(source, description); + } + int sd_event_source_set_description(sd_event_source* source, + const char* description) const override + { + return ::sd_event_source_set_description(source, description); + } + int sd_event_source_get_pending(sd_event_source* source) const override + { + return ::sd_event_source_get_pending(source); + } + int sd_event_source_get_priority(sd_event_source* source, + int64_t* priority) const override + { + return ::sd_event_source_get_priority(source, priority); + } + int sd_event_source_set_priority(sd_event_source* source, + int64_t priority) const override + { + return ::sd_event_source_set_priority(source, priority); + } + int sd_event_source_get_enabled(sd_event_source* source, + int* enabled) const override + { + return ::sd_event_source_get_enabled(source, enabled); + } + int sd_event_source_set_enabled(sd_event_source* source, + int enabled) const override + { + return ::sd_event_source_set_enabled(source, enabled); + } }; extern SdEventImpl sdevent_impl; diff --git a/src/sdeventplus/source/base.cpp b/src/sdeventplus/source/base.cpp index fd9b45f..d99d562 100644 --- a/src/sdeventplus/source/base.cpp +++ b/src/sdeventplus/source/base.cpp @@ -1,12 +1,93 @@ +#include <cerrno> +#include <exception> +#include <sdeventplus/exception.hpp> #include <sdeventplus/internal/sdevent.hpp> #include <sdeventplus/source/base.hpp> +#include <stdexcept> #include <type_traits> +#include <utility> namespace sdeventplus { namespace source { +Base::~Base() +{ + set_enabled(SD_EVENT_OFF); +} + +const char* Base::get_description() +{ + const char* description; + int r = + sdevent->sd_event_source_get_description(source.get(), &description); + if (r < 0) + { + throw SdEventError(-r, "sd_event_source_get_description"); + } + return description; +} + +void Base::set_description(const char* description) +{ + int r = sdevent->sd_event_source_set_description(source.get(), description); + if (r < 0) + { + throw SdEventError(-r, "sd_event_source_set_description"); + } +} + +int Base::get_pending() +{ + int r = sdevent->sd_event_source_get_pending(source.get()); + if (r < 0) + { + throw SdEventError(-r, "sd_event_source_get_pending"); + } + return r; +} + +int64_t Base::get_priority() +{ + int64_t priority; + int r = sdevent->sd_event_source_get_priority(source.get(), &priority); + if (r < 0) + { + throw SdEventError(-r, "sd_event_source_get_priority"); + } + return priority; +} + +void Base::set_priority(int64_t priority) +{ + int r = sdevent->sd_event_source_set_priority(source.get(), priority); + if (r < 0) + { + throw SdEventError(-r, "sd_event_source_set_priority"); + } +} + +int Base::get_enabled() +{ + int enabled; + int r = sdevent->sd_event_source_get_enabled(source.get(), &enabled); + if (r < 0) + { + throw SdEventError(-r, "sd_event_source_get_enabled"); + } + return enabled; +} + +void Base::set_enabled(int enabled) +{ + int r = sdevent->sd_event_source_set_enabled(source.get(), enabled); + if (r < 0) + { + throw SdEventError(-r, "sd_event_source_set_enabled"); + } +} + Base::Base(sd_event_source* source, internal::SdEvent* sdevent) : sdevent(sdevent), source(source, &internal::SdEvent::sd_event_source_ref, &internal::SdEvent::sd_event_source_unref, sdevent) diff --git a/src/sdeventplus/source/base.hpp b/src/sdeventplus/source/base.hpp index 88a17f0..20ab820 100644 --- a/src/sdeventplus/source/base.hpp +++ b/src/sdeventplus/source/base.hpp @@ -1,5 +1,6 @@ #pragma once +#include <cstdint> #include <sdeventplus/internal/sdevent.hpp> #include <sdeventplus/internal/sdref.hpp> #include <systemd/sd-bus.h> @@ -13,15 +14,25 @@ namespace source class Base { public: + virtual ~Base(); + // We don't want to allow any kind of slicing. Base(const Base& source) = delete; Base& operator=(const Base& source) = delete; Base(Base&& source) = delete; Base& operator=(Base&& source) = delete; + const char* get_description(); + void set_description(const char* description); + int get_pending(); + int64_t get_priority(); + void set_priority(int64_t priority); + int get_enabled(); + void set_enabled(int enabled); + protected: - internal::SdEvent* sdevent; - internal::SdRef<sd_event_source> source; + const internal::SdEvent* const sdevent; + const internal::SdRef<sd_event_source> source; // Base sources cannot be directly constructed. Base(sd_event_source* source, diff --git a/src/sdeventplus/test/sdevent.hpp b/src/sdeventplus/test/sdevent.hpp index 982e4e7..1cb723f 100644 --- a/src/sdeventplus/test/sdevent.hpp +++ b/src/sdeventplus/test/sdevent.hpp @@ -24,6 +24,21 @@ class SdEventMock : public internal::SdEvent MOCK_CONST_METHOD1(sd_event_source_ref, sd_event_source*(sd_event_source*)); MOCK_CONST_METHOD1(sd_event_source_unref, sd_event_source*(sd_event_source*)); + + MOCK_CONST_METHOD2(sd_event_source_get_description, + int(sd_event_source*, const char**)); + MOCK_CONST_METHOD2(sd_event_source_set_description, + int(sd_event_source*, const char*)); + MOCK_CONST_METHOD2(sd_event_source_set_prepare, + int(sd_event_source*, sd_event_handler_t)); + MOCK_CONST_METHOD1(sd_event_source_get_pending, int(sd_event_source*)); + MOCK_CONST_METHOD2(sd_event_source_get_priority, + int(sd_event_source*, int64_t*)); + MOCK_CONST_METHOD2(sd_event_source_set_priority, + int(sd_event_source*, int64_t)); + MOCK_CONST_METHOD2(sd_event_source_get_enabled, + int(sd_event_source*, int*)); + MOCK_CONST_METHOD2(sd_event_source_set_enabled, int(sd_event_source*, int)); }; } // namespace test |

