summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWilliam A. Kennington III <wak@google.com>2018-07-17 14:40:14 -0700
committerWilliam A. Kennington III <wak@google.com>2018-07-17 14:40:14 -0700
commit715c72f8b9c45edc27fa2a4b0f3d5f2b0e0eefec (patch)
tree37e97535c20ad6c0d679bf8add20e93ee7976d80 /src
parentd9fd9815705be7501600fff2b14ba9a282a75ff2 (diff)
downloadsdeventplus-715c72f8b9c45edc27fa2a4b0f3d5f2b0e0eefec.tar.gz
sdeventplus-715c72f8b9c45edc27fa2a4b0f3d5f2b0e0eefec.zip
source/base: Take an event directly instead of sdevent
Also expose a mechanism for retrieving our internal event.
Diffstat (limited to 'src')
-rw-r--r--src/sdeventplus/source/base.cpp45
-rw-r--r--src/sdeventplus/source/base.hpp12
2 files changed, 33 insertions, 24 deletions
diff --git a/src/sdeventplus/source/base.cpp b/src/sdeventplus/source/base.cpp
index 78ae406..cab2c7a 100644
--- a/src/sdeventplus/source/base.cpp
+++ b/src/sdeventplus/source/base.cpp
@@ -42,11 +42,16 @@ int Base::prepareCallback()
}
}
+const Event& Base::get_event() const
+{
+ return event;
+}
+
const char* Base::get_description() const
{
const char* description;
- int r =
- sdevent->sd_event_source_get_description(source.get(), &description);
+ int r = event.getSdEvent()->sd_event_source_get_description(source.get(),
+ &description);
if (r < 0)
{
throw SdEventError(-r, "sd_event_source_get_description");
@@ -56,7 +61,8 @@ const char* Base::get_description() const
void Base::set_description(const char* description) const
{
- int r = sdevent->sd_event_source_set_description(source.get(), description);
+ int r = event.getSdEvent()->sd_event_source_set_description(source.get(),
+ description);
if (r < 0)
{
throw SdEventError(-r, "sd_event_source_set_description");
@@ -75,7 +81,7 @@ static int prepare_callback(sd_event_source*, void* userdata)
void Base::set_prepare(Callback&& callback)
{
- int r = sdevent->sd_event_source_set_prepare(
+ int r = event.getSdEvent()->sd_event_source_set_prepare(
source.get(), callback ? prepare_callback : nullptr);
if (r < 0)
{
@@ -87,7 +93,7 @@ void Base::set_prepare(Callback&& callback)
int Base::get_pending() const
{
- int r = sdevent->sd_event_source_get_pending(source.get());
+ int r = event.getSdEvent()->sd_event_source_get_pending(source.get());
if (r < 0)
{
throw SdEventError(-r, "sd_event_source_get_pending");
@@ -98,7 +104,8 @@ int Base::get_pending() const
int64_t Base::get_priority() const
{
int64_t priority;
- int r = sdevent->sd_event_source_get_priority(source.get(), &priority);
+ int r = event.getSdEvent()->sd_event_source_get_priority(source.get(),
+ &priority);
if (r < 0)
{
throw SdEventError(-r, "sd_event_source_get_priority");
@@ -108,7 +115,8 @@ int64_t Base::get_priority() const
void Base::set_priority(int64_t priority) const
{
- int r = sdevent->sd_event_source_set_priority(source.get(), priority);
+ int r = event.getSdEvent()->sd_event_source_set_priority(source.get(),
+ priority);
if (r < 0)
{
throw SdEventError(-r, "sd_event_source_set_priority");
@@ -118,7 +126,8 @@ void Base::set_priority(int64_t priority) const
int Base::get_enabled() const
{
int enabled;
- int r = sdevent->sd_event_source_get_enabled(source.get(), &enabled);
+ int r =
+ event.getSdEvent()->sd_event_source_get_enabled(source.get(), &enabled);
if (r < 0)
{
throw SdEventError(-r, "sd_event_source_get_enabled");
@@ -128,25 +137,25 @@ int Base::get_enabled() const
void Base::set_enabled(int enabled) const
{
- int r = sdevent->sd_event_source_set_enabled(source.get(), enabled);
+ int r =
+ event.getSdEvent()->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)
+Base::Base(const Event& event, sd_event_source* source) :
+ event(event),
+ source(source, &internal::SdEvent::sd_event_source_ref,
+ &internal::SdEvent::sd_event_source_unref, event.getSdEvent())
{
}
-Base::Base(sd_event_source* source, std::false_type,
- internal::SdEvent* sdevent) :
- sdevent(sdevent),
- source(source, &internal::SdEvent::sd_event_source_ref,
- &internal::SdEvent::sd_event_source_unref, std::false_type(),
- sdevent)
+Base::Base(const Event& event, sd_event_source* source, std::false_type) :
+ event(event), source(source, &internal::SdEvent::sd_event_source_ref,
+ &internal::SdEvent::sd_event_source_unref,
+ std::false_type(), event.getSdEvent())
{
}
diff --git a/src/sdeventplus/source/base.hpp b/src/sdeventplus/source/base.hpp
index 3b237db..f8db620 100644
--- a/src/sdeventplus/source/base.hpp
+++ b/src/sdeventplus/source/base.hpp
@@ -2,7 +2,7 @@
#include <cstdint>
#include <functional>
-#include <sdeventplus/internal/sdevent.hpp>
+#include <sdeventplus/event.hpp>
#include <sdeventplus/internal/sdref.hpp>
#include <systemd/sd-bus.h>
#include <type_traits>
@@ -27,6 +27,8 @@ class Base
int prepareCallback();
+ const Event& get_event() const;
+
const char* get_description() const;
void set_description(const char* description) const;
void set_prepare(Callback&& callback);
@@ -37,14 +39,12 @@ class Base
void set_enabled(int enabled) const;
protected:
- const internal::SdEvent* const sdevent;
+ const Event event;
const internal::SdRef<sd_event_source> source;
// Base sources cannot be directly constructed.
- Base(sd_event_source* source,
- internal::SdEvent* sdevent = &internal::sdevent_impl);
- Base(sd_event_source* source, std::false_type,
- internal::SdEvent* sdevent = &internal::sdevent_impl);
+ Base(const Event& event, sd_event_source* source);
+ Base(const Event& event, sd_event_source* source, std::false_type);
private:
Callback prepare;
OpenPOWER on IntegriCloud