Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add tests for the Unfolding object
[simgrid.git] / src / mc / explo / udpor / Configuration.hpp
1 /* Copyright (c) 2007-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 #ifndef SIMGRID_MC_UDPOR_CONFIGURATION_HPP
7 #define SIMGRID_MC_UDPOR_CONFIGURATION_HPP
8
9 #include "src/mc/explo/udpor/EventSet.hpp"
10 #include "src/mc/explo/udpor/udpor_forward.hpp"
11
12 namespace simgrid::mc::udpor {
13
14 class Configuration {
15 public:
16   Configuration()                                = default;
17   Configuration(const Configuration&)            = default;
18   Configuration& operator=(Configuration const&) = default;
19   Configuration(Configuration&&)                 = default;
20
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; }
26
27   void add_event(UnfoldingEvent*);
28
29 private:
30   /**
31    * @brief The most recent event added to the configuration
32    */
33   UnfoldingEvent* newest_event = nullptr;
34
35   /**
36    * @brief The events which make up this configuration
37    *
38    * @invariant For each event `e` in `events_`, the set of
39    * dependencies of `e` is also contained in `events_`
40    *
41    * TODO: UDPOR enforces this invariant, but perhaps we should
42    * too?
43    */
44   EventSet events_;
45
46   /**
47    * The <-maxmimal events of the configuration. These are
48    * dynamically adjusted as events are added to the configuration
49    *
50    * @invariant Each event that is part of this set is
51    *
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
55    *
56    * 2. contained in the set of events `events_` which comprise
57    * the configuration
58    */
59   EventSet max_events_;
60
61 private:
62   void recompute_maxmimal_events(UnfoldingEvent* new_event);
63 };
64
65 } // namespace simgrid::mc::udpor
66 #endif