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_UNFOLDING_EVENT_HPP
7 #define SIMGRID_MC_UDPOR_UNFOLDING_EVENT_HPP
9 #include "src/mc/explo/udpor/EventSet.hpp"
10 #include "src/mc/explo/udpor/udpor_forward.hpp"
14 namespace simgrid::mc::udpor {
16 class UnfoldingEvent {
18 UnfoldingEvent(unsigned int nb_events, std::string const& trans_tag, EventSet const& immediate_causes,
20 UnfoldingEvent(unsigned int nb_events, std::string const& trans_tag, EventSet const& immediate_causes);
21 UnfoldingEvent(const UnfoldingEvent&) = default;
22 UnfoldingEvent& operator=(UnfoldingEvent const&) = default;
23 UnfoldingEvent(UnfoldingEvent&&) = default;
25 EventSet get_history() const;
26 bool in_history_of(const UnfoldingEvent* otherEvent) const;
28 bool conflicts_with(const UnfoldingEvent* otherEvent) const;
29 bool conflicts_with(const Configuration& config) const;
30 bool immediately_conflicts_with(const UnfoldingEvent* otherEvt) const;
32 inline StateHandle get_state_id() const { return state_id; }
33 inline void set_state_id(StateHandle sid) { state_id = sid; }
35 bool operator==(const UnfoldingEvent&) const;
41 * @brief The "immediate" causes of this event.
43 * An event `e` is an immediate cause of an event `e'` if
46 * 2. There is no event `e''` in E such that
47 * `e < e''` and `e'' < e'`
49 * Intuitively, an immediate cause "happened right before"
50 * this event was executed. It is sufficient to store
51 * only the immediate causes of any event `e`, as any indirect
52 * causes of that event would either be an indirect cause
53 * or an immediate cause of the immediate causes of `e`, and
56 EventSet immediate_causes;
57 StateHandle state_id = 0ul;
60 } // namespace simgrid::mc::udpor