X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1a43705d13b6418986f3c87317b2ddf92c5c60fe..7e625e5e848a284b522d69ec28cb111f1f88515b:/src/mc/explo/udpor/EventSet.cpp?ds=sidebyside diff --git a/src/mc/explo/udpor/EventSet.cpp b/src/mc/explo/udpor/EventSet.cpp index 2113e1e33b..929234e2a0 100644 --- a/src/mc/explo/udpor/EventSet.cpp +++ b/src/mc/explo/udpor/EventSet.cpp @@ -14,7 +14,7 @@ namespace simgrid::mc::udpor { -EventSet::EventSet(Configuration&& config) : EventSet(config.get_events()) {} +EventSet::EventSet(const Configuration& config) : EventSet(config.get_events()) {} void EventSet::remove(const UnfoldingEvent* e) { @@ -90,6 +90,19 @@ EventSet EventSet::make_union(const Configuration& config) const return make_union(config.get_events()); } +EventSet EventSet::make_intersection(const EventSet& other) const +{ + std::unordered_set result; + + for (const UnfoldingEvent* e : other.events_) { + if (contains(e)) { + result.insert(e); + } + } + + return EventSet(std::move(result)); +} + EventSet EventSet::get_local_config() const { return History(*this).get_all_events(); @@ -110,6 +123,11 @@ bool EventSet::contains(const UnfoldingEvent* e) const return this->events_.find(e) != this->events_.end(); } +bool EventSet::contains_equivalent_to(const UnfoldingEvent* e) const +{ + return std::find_if(begin(), end(), [=](const UnfoldingEvent* e_in_set) { return *e == *e_in_set; }) != end(); +} + bool EventSet::is_subset_of(const EventSet& other) const { // If there is some element not contained in `other`, then @@ -142,6 +160,11 @@ bool EventSet::intersects(const History& history) const return std::any_of(history.begin(), history.end(), [=](const UnfoldingEvent* e) { return this->contains(e); }); } +bool EventSet::intersects(const EventSet& other) const +{ + return std::any_of(other.begin(), other.end(), [=](const UnfoldingEvent* e) { return this->contains(e); }); +} + EventSet EventSet::get_largest_maximal_subset() const { const History history(*this); @@ -197,7 +220,7 @@ std::vector EventSet::get_topological_ordering() const temporarily_marked_events.insert(evt); EventSet immediate_causes = evt->get_immediate_causes(); - if (!immediate_causes.empty() && immediate_causes.is_subset_of(temporarily_marked_events)) { + if (not immediate_causes.empty() && immediate_causes.is_subset_of(temporarily_marked_events)) { throw std::invalid_argument("Attempted to perform a topological sort on a configuration " "whose contents contain a cycle. The configuration (and the graph " "connecting all of the events) is an invalid event structure"); @@ -244,7 +267,7 @@ std::string EventSet::to_string() const for (const auto* event : *this) { contents += event->to_string(); - contents += "\n"; + contents += " + "; } return contents; @@ -262,4 +285,4 @@ std::vector EventSet::move_into_vector() const&& return contents; } -} // namespace simgrid::mc::udpor \ No newline at end of file +} // namespace simgrid::mc::udpor