You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
790 B
C++

// SPDX-License-Identifier: BSD-2-Clause
// Copyright CM4all GmbH
// author: Max Kellermann <mk@cm4all.com>
#include "TimerList.hxx"
#include "FineTimerEvent.hxx"
constexpr Event::TimePoint
TimerList::GetDue::operator()(const FineTimerEvent &timer) const noexcept
{
return timer.GetDue();
}
TimerList::TimerList() = default;
TimerList::~TimerList() noexcept
{
assert(timers.empty());
}
void
TimerList::Insert(FineTimerEvent &t) noexcept
{
timers.insert(t);
}
Event::Duration
TimerList::Run(const Event::TimePoint now) noexcept
{
while (true) {
auto i = timers.begin();
if (i == timers.end())
break;
auto &t = *i;
const auto timeout = t.due - now;
if (timeout > timeout.zero())
return timeout;
timers.pop_front();
t.Run();
}
return Event::Duration(-1);
}