Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update copyright lines for 2023.
[simgrid.git] / src / kernel / timer / Timer.cpp
1 /* Copyright (c) 2021-2023. 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::kernel::timer {
10
11 Timer* Timer::set(double date, xbt::Task<void()>&& callback)
12 {
13   auto* timer    = new Timer(date, std::move(callback));
14   timer->handle_ = kernel_timers().emplace(std::make_pair(date, timer));
15   return timer;
16 }
17
18 /** @brief cancels a timer that was added earlier */
19 void Timer::remove()
20 {
21   kernel_timers().erase(handle_);
22   delete this;
23 }
24
25 /** Handle any pending timer. Returns if something was actually run. */
26 bool Timer::execute_all()
27 {
28   bool result = false;
29   while (not kernel_timers().empty() && s4u::Engine::get_clock() >= kernel_timers().top().first) {
30     result = true;
31     Timer* timer = kernel_timers().top().second;
32     kernel_timers().pop();
33     timer->callback();
34     delete timer;
35   }
36   return result;
37 }
38
39 } // namespace simgrid::kernel::timer