1 /* Copyright (c) 2004-2022. The SimGrid Team. All rights reserved. */
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. */
6 #include "src/kernel/resource/profile/FutureEvtSet.hpp"
7 #include "src/kernel/resource/profile/Event.hpp"
8 #include "src/kernel/resource/profile/Profile.hpp"
10 namespace simgrid::kernel::profile {
12 simgrid::kernel::profile::FutureEvtSet future_evt_set; // FIXME: singleton antipattern
14 FutureEvtSet::FutureEvtSet() = default;
15 FutureEvtSet::~FutureEvtSet()
17 while (not heap_.empty()) {
18 delete heap_.top().second;
23 /** @brief Schedules an event to a future date */
24 void FutureEvtSet::add_event(double date, Event* evt)
26 heap_.emplace(date, evt);
29 /** @brief returns the date of the next occurring event (or -1 if empty) */
30 double FutureEvtSet::next_date() const
32 return heap_.empty() ? -1.0 : heap_.top().first;
35 /** @brief Retrieves the next occurring event, or nullptr if none happens before date */
36 Event* FutureEvtSet::pop_leq(double date, double* value, resource::Resource** resource)
38 if (next_date() > date || heap_.empty())
41 Event* event = heap_.top().second;
42 Profile* profile = event->profile;
43 DatedValue dateVal = profile->next(event);
45 *resource = event->resource;
46 *value = dateVal.value_;
52 } // namespace simgrid::kernel::profile