8#ifndef PEDIGREE_MODULES_POSIX_INTERVALTIMERSTATE_H
9#define PEDIGREE_MODULES_POSIX_INTERVALTIMERSTATE_H
10#include "pedigree/kernel/time/Time.h"
14namespace PosixIntervalTimerState {
16 Time::Timestamp value;
23 Time::Timestamp baseline;
33inline Consumption consume(Time::Timestamp value, Time::Timestamp interval,
bool armed,
34 Time::Timestamp elapsed) {
35 if (!armed || !elapsed) {
36 return {value, armed,
false};
38 if (elapsed < value) {
39 return {value - elapsed,
true,
false};
42 return {0,
false,
true};
45 const Time::Timestamp overshoot = elapsed - value;
46 const Time::Timestamp phase = overshoot % interval;
47 return {phase ? interval - phase : interval,
true,
true};
57inline AbsoluteConsumption consumeAbsolute(Time::Timestamp value, Time::Timestamp interval,
58 bool armed, Time::Timestamp baseline,
59 Time::Timestamp current) {
60 if (current <= baseline) {
61 return {{value, armed,
false}, baseline};
64 return {consume(value, interval, armed, current - baseline), current};