|
|
@ -111,15 +111,10 @@ namespace storm { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Create a copy of the states already present in the lattice.
|
|
|
|
storm::storage::BitVector seenStates = (lattice->getAddedStates()); |
|
|
|
storm::storage::BitVector oldStates(numberOfStates); |
|
|
|
|
|
|
|
while (oldStates != seenStates) { |
|
|
|
// As long as new states are added to the lattice, continue.
|
|
|
|
oldStates = storm::storage::BitVector(seenStates); |
|
|
|
|
|
|
|
auto oldNumberSet = lattice->getAddedStates().getNumberOfSetBits(); |
|
|
|
while (lattice->getAddedStates().getNumberOfSetBits() != numberOfStates) { |
|
|
|
for (auto stateItr = stateMap.begin(); stateItr != stateMap.end(); ++stateItr) { |
|
|
|
storm::storage::BitVector seenStates = (lattice->getAddedStates()); |
|
|
|
// Iterate over all states
|
|
|
|
auto stateNumber = stateItr->first; |
|
|
|
storm::storage::BitVector successors = stateItr->second; |
|
|
@ -133,7 +128,6 @@ namespace storm { |
|
|
|
if (check && successors.getNumberOfSetBits() == 1) { |
|
|
|
// As there is only one successor the current state and its successor must be at the same nodes.
|
|
|
|
lattice->addToNode(stateNumber, lattice->getNode(successors.getNextSetIndex(0))); |
|
|
|
seenStates.set(stateNumber); |
|
|
|
} else if (check && successors.getNumberOfSetBits() > 1) { |
|
|
|
// TODO: allow more than 2 transitions?
|
|
|
|
// Otherwise, check how the two states compare, and add if the comparison is possible.
|
|
|
@ -155,9 +149,14 @@ namespace storm { |
|
|
|
} else { |
|
|
|
return std::make_tuple(lattice, successor1, successor2); |
|
|
|
} |
|
|
|
seenStates.set(stateNumber); |
|
|
|
} |
|
|
|
} |
|
|
|
// Nothing changed and not done yet
|
|
|
|
if (oldNumberSet == lattice->getAddedStates().getNumberOfSetBits()) { |
|
|
|
// add the first unset state to the lattice between top and bottom
|
|
|
|
lattice->add(lattice->getAddedStates().getNextUnsetIndex(0)); |
|
|
|
} |
|
|
|
oldNumberSet = lattice->getAddedStates().getNumberOfSetBits(); |
|
|
|
} |
|
|
|
return std::make_tuple(lattice, numberOfStates, numberOfStates); |
|
|
|
} |
|
|
|