Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Cosmetics in comments (mainly in EngineImpl::run)
[simgrid.git] / src / kernel / timer / Timer.cpp
1 /* Copyright (c) 2021-2022. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #include <simgrid/kernel/Timer.hpp>
7 #include <simgrid/s4u/Engine.hpp>
8
9 namespace simgrid {
10 namespace kernel {
11 namespace timer {
12
13 Timer* Timer::set(double date, xbt::Task<void()>&& callback)
14 {
15   auto* timer    = new Timer(date, std::move(callback));
16   timer->handle_ = kernel_timers().emplace(std::make_pair(date, timer));
17   return timer;
18 }
19
20 /** @brief cancels a timer that was added earlier */
21 void Timer::remove()
22 {
23   kernel_timers().erase(handle_);
24   delete this;
25 }
26
27 /** Handle any pending timer. Returns if something was actually run. */
28 bool Timer::execute_all()
29 {
30   bool result = false;
31   while (not kernel_timers().empty() && s4u::Engine::get_clock() >= kernel_timers().top().first) {
32     result = true;
33     Timer* timer = kernel_timers().top().second;
34     kernel_timers().pop();
35     timer->callback();
36     delete timer;
37   }
38   return result;
39 }
40
41 } // namespace timer
42 } // namespace kernel
43 } // namespace simgrid