blob: 601c0df425220566e28c31d0e8eea770992183c1 [file] [log] [blame]
#include <functional>
#include <sdeventplus/event.hpp>
#include <sdeventplus/internal/sdevent.hpp>
#include <sdeventplus/internal/utils.hpp>
#include <systemd/sd-event.h>
#include <type_traits>
namespace sdeventplus
{
Event::Event(sd_event* event, const internal::SdEvent* sdevent) :
sdevent(sdevent), event(event, sdevent)
{
}
Event::Event(sd_event* event, std::false_type,
const internal::SdEvent* sdevent) :
sdevent(sdevent),
event(std::move(event), sdevent)
{
}
Event Event::get_new(const internal::SdEvent* sdevent)
{
sd_event* event = nullptr;
internal::callCheck("sd_event_new", &internal::SdEvent::sd_event_new,
sdevent, &event);
return Event(event, std::false_type(), sdevent);
}
Event Event::get_default(const internal::SdEvent* sdevent)
{
sd_event* event = nullptr;
internal::callCheck("sd_event_default",
&internal::SdEvent::sd_event_default, sdevent, &event);
return Event(event, std::false_type(), sdevent);
}
sd_event* Event::get() const
{
return event.value();
}
const internal::SdEvent* Event::getSdEvent() const
{
return sdevent;
}
int Event::prepare() const
{
return internal::callCheck("sd_event_prepare",
&internal::SdEvent::sd_event_prepare, sdevent,
get());
}
int Event::wait(MaybeTimeout timeout) const
{
// An unsigned -1 timeout value means infinity in sd_event
uint64_t timeout_usec = timeout ? timeout->count() : -1;
return internal::callCheck("sd_event_wait",
&internal::SdEvent::sd_event_wait, sdevent,
get(), timeout_usec);
}
int Event::dispatch() const
{
return internal::callCheck("sd_event_dispatch",
&internal::SdEvent::sd_event_dispatch, sdevent,
get());
}
int Event::run(MaybeTimeout timeout) const
{
// An unsigned -1 timeout value means infinity in sd_event
uint64_t timeout_usec = timeout ? timeout->count() : -1;
return internal::callCheck("sd_event_run", &internal::SdEvent::sd_event_run,
sdevent, get(), timeout_usec);
}
int Event::loop() const
{
return internal::callCheck(
"sd_event_loop", &internal::SdEvent::sd_event_loop, sdevent, get());
}
void Event::exit(int code) const
{
internal::callCheck("sd_event_exit", &internal::SdEvent::sd_event_exit,
sdevent, get(), code);
}
int Event::get_exit_code() const
{
int code;
internal::callCheck("sd_event_get_exit_code",
&internal::SdEvent::sd_event_get_exit_code, sdevent,
get(), &code);
return code;
}
bool Event::get_watchdog() const
{
return internal::callCheck("sd_event_get_watchdog",
&internal::SdEvent::sd_event_get_watchdog,
sdevent, get());
}
bool Event::set_watchdog(bool b) const
{
return internal::callCheck("sd_event_set_watchdog",
&internal::SdEvent::sd_event_set_watchdog,
sdevent, get(), b);
}
sd_event* Event::ref(sd_event* const& event, const internal::SdEvent*& sdevent)
{
return sdevent->sd_event_ref(event);
}
void Event::drop(sd_event*&& event, const internal::SdEvent*& sdevent)
{
sdevent->sd_event_unref(event);
}
} // namespace sdeventplus