Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add xbt_assert() for state handle overflow
[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   EventSet events_;
39
40   /**
41    * The <-maxmimal events of the configuration. These are
42    * dynamically adjusted as events are added to the configuration
43    *
44    * @invariant: Each event that is part of this set is
45    *
46    * 1. a <-maxmimal event of the configuration, in the sense that
47    * there is no event in the configuration that is "greater" than it.
48    * In UDPOR terminology, each event does not "cause" another event
49    *
50    * 2. contained in the set of events `events_` which comprise
51    * the configuration
52    */
53   EventSet max_events_;
54
55 private:
56   void recompute_maxmimal_events(UnfoldingEvent* new_event);
57 };
58
59 } // namespace simgrid::mc::udpor
60 #endif