28 _time = TimePoint::min();
83 if (itr->first >
_time)
89 auto eventId = itr->second._id;
106 for (
auto itr = delayed.begin(); itr != delayed.end();)
108 EventStore::node_type node = delayed.extract(itr++);
122 if (itr->second._groupMask &
GroupMask(1u << (group - 1u)))
124 EventStore::node_type node =
_eventMap.extract(itr++);
126 delayed.insert(delayed.end(), std::move(node));
142 if (eventId == itr->second._id)
144 if (itr->first < (
_time + delay))
146 _eventMap.insert(EventStore::value_type(
_time + delay, itr->second));
163 if (eventId == itr->second._id)
171 if (eventId == itr->first._id)
185 if (itr->second._groupMask &
GroupMask(1u << (group - 1u)))
193 if (itr->first._groupMask &
GroupMask(1 << (group - 1u)))
202 for (
auto const& [time, event] :
_eventMap)
203 if (eventId == event._id)
204 return std::chrono::duration_cast<Milliseconds>(time -
_time);
206 return Milliseconds::max();
216 EventSeriesStore::iterator itr =
_timerSeries.find(eventData);
222 if (itr->second.size() > 1)
223 itr->second.erase(itr->second.begin());
236 if (!timeSeries.size())
239 Event event(eventId, group, phase);
241 std::vector<Milliseconds>& series =
_timerSeries[event];
242 series.insert(series.end(), timeSeries.begin(), timeSeries.end());
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Milliseconds randtime(Milliseconds min, Milliseconds max)
void ScheduleEventSeries(EventId eventId, GroupIndex group, PhaseIndex phase, std::initializer_list< Milliseconds > timeSeries)
bool HasEventScheduled(EventId eventId) const
void Repeat(Milliseconds time)
EventMap & operator=(EventMap const &other)
std::multimap< TimePoint, Event > EventStore
Milliseconds GetTimeUntilEvent(EventId eventId) const
void DelayEvents(Milliseconds delay)
void SetMinimalDelay(EventId eventId, Milliseconds delay)
void RescheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
EventSeriesStore _timerSeries
void CancelEvent(EventId eventId)
void SetPhase(PhaseIndex phase)
void CancelEventGroup(GroupIndex group)
void ScheduleNextFromSeries(Event eventData)
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)