blob: 897f54931feecac1707ed0bb72c94eaa3ec5b484 [file] [log] [blame]
#include <functional>
#include <sdeventplus/event.hpp>
#include <sdeventplus/exception.hpp>
#include <sdeventplus/internal/sdevent.hpp>
#include <systemd/sd-event.h>
namespace sdeventplus
{
Event::Event(sd_event* event, internal::SdEvent* sdevent) :
sdevent(sdevent), event(event, &internal::SdEvent::sd_event_ref,
&internal::SdEvent::sd_event_unref, sdevent)
{
}
Event::Event(sd_event* event, std::false_type, internal::SdEvent* sdevent) :
sdevent(sdevent),
event(event, &internal::SdEvent::sd_event_ref,
&internal::SdEvent::sd_event_unref, std::false_type(), sdevent)
{
}
Event Event::get_new(internal::SdEvent* sdevent)
{
sd_event* event = nullptr;
int r = sdevent->sd_event_new(&event);
if (r < 0)
{
throw SdEventError(-r, "sd_event_new");
}
return Event(event, std::false_type(), sdevent);
}
Event Event::get_default(internal::SdEvent* sdevent)
{
sd_event* event = nullptr;
int r = sdevent->sd_event_default(&event);
if (r < 0)
{
throw SdEventError(-r, "sd_event_default");
}
return Event(event, std::false_type(), sdevent);
}
int Event::loop()
{
int r = sdevent->sd_event_loop(event.get());
if (r < 0)
{
throw SdEventError(-r, "sd_event_loop");
}
return r;
}
int Event::get_watchdog()
{
int r = sdevent->sd_event_get_watchdog(event.get());
if (r < 0)
{
throw SdEventError(-r, "sd_event_get_watchdog");
}
return r;
}
int Event::set_watchdog(int b)
{
int r = sdevent->sd_event_set_watchdog(event.get(), b);
if (r < 0)
{
throw SdEventError(-r, "sd_event_set_watchdog");
}
return r;
}
} // namespace sdeventplus