6#include "definitions.hpp"
7#include "rotor-light-bsp.h"
11namespace rotor_light {
45 operator bool()
const;
72 template <
typename Ctx>
73 EventId
add_event(TimePoint when, Callback callback,
void *data) {
74 if constexpr (std::is_same_v<Ctx, ctx::thread>) {
75 ROTOR_LIGHT_DISABLE_INTERRUPTS();
78 if (last_event + 1 >= events_count) {
82 EventId future_id = next_id + 1;
84 int i = last_event + 1;
86 for (
int j = 0; j <= last_event; ++j) {
87 auto &
event = events[j];
88 if (event.event_id == future_id) {
92 if (event.when <= when) {
98 while (recheck || !future_id) {
103 for (
int j = 0; j <= last_event; ++j) {
104 auto &
event = events[j];
105 if (event.event_id == future_id) {
113 for (
int j = last_event; j >= i; --j) {
114 events[j + 1] = events[j];
116 events[i] =
TimeEvent{callback, data, when, next_id};
122 if constexpr (std::is_same_v<Ctx, ctx::thread>) {
123 ROTOR_LIGHT_ENABLE_INTERRUPTS();
139 void commit(
size_t index);
141 int32_t events_count;
149 static_assert(TimeEventsCount > 0,
"at least one event have to be allocated");
iterator-like struct over expired time events
Definition: planner.hpp:40
bookeeper of future events
Definition: planner.hpp:59
void remove_event(EventId event_id)
PlannerBase(TimeEvent *events, int32_t events_count)
EventId add_event(TimePoint when, Callback callback, void *data)
records the new event
Definition: planner.hpp:73
EventConsumer consume(TimePoint deadline)
bookeeper of future events, templated for fixed amount of events
Definition: planner.hpp:148
TimeEvent events_holder[TimeEventsCount]
Definition: planner.hpp:153
links together callback, data, timepoint and event id
Definition: planner.hpp:15
TimeEvent & operator=(const TimeEvent &other)=default
void * data
Definition: planner.hpp:27
EventId event_id
Definition: planner.hpp:33
Callback callback
Definition: planner.hpp:24
TimePoint when
Definition: planner.hpp:30