|
|
@ -81,6 +81,8 @@ namespace storm { |
|
|
|
if (!destinations.empty()) { |
|
|
|
auto const& destination = *destinations.begin(); |
|
|
|
|
|
|
|
std::vector<std::shared_ptr<Assignment>> assignmentsToLift; |
|
|
|
|
|
|
|
for (auto const& assignment : destination.getOrderedAssignments().getTransientAssignments()) { |
|
|
|
// Check if we can lift the assignment to the edge.
|
|
|
|
bool canBeLifted = true; |
|
|
@ -91,12 +93,18 @@ namespace storm { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// If so, remove the assignment from all destinations.
|
|
|
|
if (canBeLifted) { |
|
|
|
this->addTransientAssignment(assignment); |
|
|
|
for (auto& destination : destinations) { |
|
|
|
destination.removeAssignment(assignment); |
|
|
|
} |
|
|
|
// Do not remove the assignment now, as we currently iterate over them.
|
|
|
|
// Also we need to make a copy of the assignment since we are about to delete it
|
|
|
|
assignmentsToLift.push_back(std::make_shared<Assignment>(assignment)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// now actually lift the assignments
|
|
|
|
for (auto const& assignment : assignmentsToLift) { |
|
|
|
this->addTransientAssignment(*assignment); |
|
|
|
for (auto& destination : destinations) { |
|
|
|
destination.removeAssignment(*assignment); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|