|
@ -86,6 +86,17 @@ namespace storm { |
|
|
this->blocks[stateToSccMapping[state]].insert(state); |
|
|
this->blocks[stateToSccMapping[state]].insert(state); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Now flag all trivial SCCs as such.
|
|
|
|
|
|
for (uint_fast64_t sccIndex = 0; sccIndex < sccCount; ++sccIndex) { |
|
|
|
|
|
if (this->blocks[sccIndex].size() == 1) { |
|
|
|
|
|
uint_fast64_t onlyState = *this->blocks[sccIndex].begin(); |
|
|
|
|
|
|
|
|
|
|
|
if (!statesWithSelfLoop.get(onlyState)) { |
|
|
|
|
|
this->blocks[sccIndex].setIsTrivial(true); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// If requested, we need to drop some SCCs.
|
|
|
// If requested, we need to drop some SCCs.
|
|
|
if (onlyBottomSccs || dropNaiveSccs) { |
|
|
if (onlyBottomSccs || dropNaiveSccs) { |
|
|
storm::storage::BitVector blocksToDrop(sccCount); |
|
|
storm::storage::BitVector blocksToDrop(sccCount); |
|
@ -93,15 +104,11 @@ namespace storm { |
|
|
// If requested, we need to delete all naive SCCs.
|
|
|
// If requested, we need to delete all naive SCCs.
|
|
|
if (dropNaiveSccs) { |
|
|
if (dropNaiveSccs) { |
|
|
for (uint_fast64_t sccIndex = 0; sccIndex < sccCount; ++sccIndex) { |
|
|
for (uint_fast64_t sccIndex = 0; sccIndex < sccCount; ++sccIndex) { |
|
|
if (this->blocks[sccIndex].size() == 1) { |
|
|
|
|
|
uint_fast64_t onlyState = *this->blocks[sccIndex].begin(); |
|
|
|
|
|
|
|
|
|
|
|
if (!statesWithSelfLoop.get(onlyState)) { |
|
|
|
|
|
|
|
|
if (this->blocks[sccIndex].isTrivial()) { |
|
|
blocksToDrop.set(sccIndex); |
|
|
blocksToDrop.set(sccIndex); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// If requested, we need to drop all non-bottom SCCs.
|
|
|
// If requested, we need to drop all non-bottom SCCs.
|
|
|
if (onlyBottomSccs) { |
|
|
if (onlyBottomSccs) { |
|
|