1 /* Copyright (c) 2007-2023. 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 #ifndef SIMGRID_MC_UDPOR_CONFIGURATION_HPP
7 #define SIMGRID_MC_UDPOR_CONFIGURATION_HPP
9 #include "src/mc/explo/udpor/EventSet.hpp"
10 #include "src/mc/explo/udpor/udpor_forward.hpp"
12 namespace simgrid::mc::udpor {
16 Configuration() = default;
17 Configuration(const Configuration&) = default;
18 Configuration& operator=(Configuration const&) = default;
19 Configuration(Configuration&&) = default;
21 auto begin() const { return this->events_.begin(); }
22 auto end() const { return this->events_.end(); }
23 const EventSet& get_events() const { return this->events_; }
24 const EventSet& get_maximal_events() const { return this->max_events_; }
25 UnfoldingEvent* get_latest_event() const { return this->newest_event; }
27 void add_event(UnfoldingEvent*);
31 * @brief The most recent event added to the configuration
33 UnfoldingEvent* newest_event = nullptr;
36 * @brief The events which make up this configuration
38 * @invariant For each event `e` in `events_`, the set of
39 * dependencies of `e` is also contained in `events_`
41 * TODO: UDPOR enforces this invariant, but perhaps we should
47 * The <-maxmimal events of the configuration. These are
48 * dynamically adjusted as events are added to the configuration
50 * @invariant Each event that is part of this set is
52 * 1. a <-maxmimal event of the configuration, in the sense that
53 * there is no event in the configuration that is "greater" than it.
54 * In UDPOR terminology, each event does not "cause" another event
56 * 2. contained in the set of events `events_` which comprise
62 void recompute_maxmimal_events(UnfoldingEvent* new_event);
65 } // namespace simgrid::mc::udpor