- s_smx_timer()=default;
- s_smx_timer(double date, simgrid::xbt::Task<void()> callback) : date(date), callback(std::move(callback)) {}
-} s_smx_timer_t;
+public:
+ simgrid::xbt::Task<void()> callback;
+ void disable() { date = -1.0; }
+ bool isDisabled() { return date == -1.0; }
+ double getDate() { return date; }
+ s_smx_timer_t(double date, simgrid::xbt::Task<void()> callback) : date(date), callback(std::move(callback)) {}
+};
+
+namespace {
+typedef std::pair<double, smx_timer_t> TimerQelt;
+std::priority_queue<TimerQelt, std::vector<TimerQelt>, std::greater<TimerQelt>> simix_timers;
+void SIMIX_timer_flush()
+{
+ while (not simix_timers.empty() && simix_timers.top().second->isDisabled()) {
+ delete simix_timers.top().second;
+ simix_timers.pop();
+ }
+}
+}