X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1a43705d13b6418986f3c87317b2ddf92c5c60fe..aa013f7dd162e725e707dc8b191717562d541556:/src/mc/explo/udpor/UnfoldingEvent.cpp diff --git a/src/mc/explo/udpor/UnfoldingEvent.cpp b/src/mc/explo/udpor/UnfoldingEvent.cpp index 2ad01bd9df..2e7e20a61d 100644 --- a/src/mc/explo/udpor/UnfoldingEvent.cpp +++ b/src/mc/explo/udpor/UnfoldingEvent.cpp @@ -6,6 +6,8 @@ #include "src/mc/explo/udpor/UnfoldingEvent.hpp" #include "src/mc/explo/udpor/History.hpp" +#include +#include #include namespace simgrid::mc::udpor { @@ -18,6 +20,8 @@ UnfoldingEvent::UnfoldingEvent(std::initializer_list init UnfoldingEvent::UnfoldingEvent(EventSet immediate_causes, std::shared_ptr transition) : associated_transition(std::move(transition)), immediate_causes(std::move(immediate_causes)) { + static uint64_t event_id = 0; + this->id = ++event_id; } bool UnfoldingEvent::operator==(const UnfoldingEvent& other) const @@ -48,16 +52,25 @@ std::string UnfoldingEvent::to_string() const dependencies_string += "["; for (const auto* e : immediate_causes) { + dependencies_string += " "; dependencies_string += e->to_string(); + dependencies_string += "and "; } dependencies_string += "]"; - return xbt::string_printf("Actor %ld: %s (%zu dependencies { %s })", associated_transition->aid_, + return xbt::string_printf("Event %lu, Actor %ld: %s (%zu dependencies: %s)", this->id, associated_transition->aid_, associated_transition->to_string().c_str(), immediate_causes.size(), dependencies_string.c_str()); } EventSet UnfoldingEvent::get_history() const +{ + EventSet local_config = get_local_config(); + local_config.remove(this); + return local_config; +} + +EventSet UnfoldingEvent::get_local_config() const { return History(this).get_all_events(); } @@ -81,8 +94,8 @@ bool UnfoldingEvent::conflicts_with(const UnfoldingEvent* other) const return false; } - const EventSet my_history = get_history(); - const EventSet other_history = other->get_history(); + const EventSet my_history = get_local_config(); + const EventSet other_history = other->get_local_config(); const EventSet unique_to_me = my_history.subtracting(other_history); const EventSet unique_to_other = other_history.subtracting(my_history); @@ -93,16 +106,9 @@ bool UnfoldingEvent::conflicts_with(const UnfoldingEvent* other) const return conflicts_with_me or conflicts_with_other; } -bool UnfoldingEvent::conflicts_with(const Configuration& config) const +bool UnfoldingEvent::conflicts_with_any(const EventSet& events) const { - // A configuration is itself already conflict-free. Thus, it is - // simply a matter of testing whether or not the transition associated - // with the event is dependent with any already in `config` that are - // OUTSIDE this event's history (in an unfolding, events only conflict - // if they are not related) - const EventSet potential_conflicts = config.get_events().subtracting(get_history()); - return std::any_of(potential_conflicts.cbegin(), potential_conflicts.cend(), - [&](const UnfoldingEvent* e) { return this->is_dependent_with(e); }); + return std::any_of(events.begin(), events.end(), [&](const auto e) { return e->conflicts_with(this); }); } bool UnfoldingEvent::immediately_conflicts_with(const UnfoldingEvent* other) const