|
|
@ -48,53 +48,50 @@ namespace storm { |
|
|
|
priorities[i] = (-(mDft.getElement(i)->rank()) + mDft.maxRank()) * 2 + 5; |
|
|
|
} |
|
|
|
} else { |
|
|
|
// make sure every element has a unique priority by working with the rank
|
|
|
|
std::map<uint64_t, uint64_t> rankMap; |
|
|
|
std::map<uint64_t, uint64_t> rankCounter; |
|
|
|
// initialize rankMap
|
|
|
|
for (std::size_t i = 0; i <= mDft.maxRank(); i++) { |
|
|
|
rankMap[i] = 0; |
|
|
|
rankCounter[i] = 0; |
|
|
|
} |
|
|
|
// Count the number of elements with each rank and get max. grade of dependency
|
|
|
|
uint64_t maxNrChildren = 0; |
|
|
|
uint64_t maxGrade = 0; |
|
|
|
uint64_t numberDependencies = 0; |
|
|
|
// Define some variables
|
|
|
|
u_int64_t maxNrOfChildren = 0; |
|
|
|
u_int64_t maxNrDependentEvents = 0; |
|
|
|
// Iterate over all elements of the DFT and sort them into the list
|
|
|
|
std::list<size_t> elementList; |
|
|
|
for (std::size_t i = 0; i < mDft.nrElements(); i++) { |
|
|
|
++rankMap[mDft.getElement(i)->rank()]; |
|
|
|
++rankCounter[mDft.getElement(i)->rank()]; |
|
|
|
if (mDft.getElement(i)->type() == storm::storage::DFTElementType::PDEP) { |
|
|
|
numberDependencies++; |
|
|
|
uint64_t nrDependentEvents = |
|
|
|
sizeof((std::static_pointer_cast<storm::storage::DFTDependency<ValueType> const>( |
|
|
|
mDft.getElement(i)))->dependentEvents()); |
|
|
|
if (nrDependentEvents > maxGrade) { |
|
|
|
maxGrade = nrDependentEvents; |
|
|
|
// For dependencies, get the maximal number of dependent events
|
|
|
|
auto dependency = std::static_pointer_cast<storm::storage::DFTDependency<ValueType> const>( |
|
|
|
mDft.getElement(i)); |
|
|
|
uint64_t nrDependentEvents = (dependency->dependentEvents()).size(); |
|
|
|
if (nrDependentEvents > maxNrDependentEvents) { |
|
|
|
maxNrDependentEvents = nrDependentEvents; |
|
|
|
} |
|
|
|
} |
|
|
|
if (mDft.getElement(i)->nrChildren() > maxNrChildren) |
|
|
|
maxNrChildren = mDft.getElement(i)->nrChildren(); |
|
|
|
} |
|
|
|
STORM_LOG_DEBUG("MaxGrade " << maxGrade); |
|
|
|
|
|
|
|
uint64_t dependency_priority = mDft.nrElements() + 1; |
|
|
|
for (std::size_t i = 0; i < mDft.nrElements(); i++) { |
|
|
|
if (mDft.getElement(i)->type() == storm::storage::DFTElementType::PDEP) { |
|
|
|
priorities[i] = dependency_priority; |
|
|
|
dependency_priority++; |
|
|
|
} else { |
|
|
|
// Offset saves the number of elements with higher rank than the current element
|
|
|
|
uint64_t offset = 0; |
|
|
|
for (std::size_t j = mDft.maxRank(); j > mDft.getElement(i)->rank(); --j) { |
|
|
|
offset += rankMap[j]; |
|
|
|
// Get the maximum number of children
|
|
|
|
if (maxNrOfChildren < mDft.getElement(i)->nrChildren()) { |
|
|
|
maxNrOfChildren = mDft.getElement(i)->nrChildren(); |
|
|
|
} |
|
|
|
// Organize the elements according to their rank
|
|
|
|
if (!elementList.empty()) { |
|
|
|
std::list<size_t>::iterator it = elementList.begin(); |
|
|
|
// Make sure dependencies are always in the front
|
|
|
|
while ((mDft.getElement(*it)->rank()) < (mDft.getElement(i)->rank()) |
|
|
|
|| mDft.getElement(*it)->type() == storm::storage::DFTElementType::PDEP) { |
|
|
|
it++; |
|
|
|
} |
|
|
|
// Set priority according to rank such that all elements with the same rank have a unique prio
|
|
|
|
priorities[i] = |
|
|
|
(offset + rankCounter[mDft.getElement(i)->rank()]) * (maxNrChildren + 3) + |
|
|
|
mDft.nrElements() + maxGrade * numberDependencies + 4; |
|
|
|
rankCounter[mDft.getElement(i)->rank()]--; |
|
|
|
elementList.insert(it, i); |
|
|
|
} else { |
|
|
|
elementList.push_back(i); |
|
|
|
} |
|
|
|
} |
|
|
|
// Get the necessary length for priority intervals
|
|
|
|
// Note that additional priorities are necessary
|
|
|
|
u_int64_t priorityIntervalLength = std::max(maxNrDependentEvents, maxNrOfChildren) + 4; |
|
|
|
|
|
|
|
// Define a running variable for the current priority
|
|
|
|
// Initialize it with an offset for the DC priorities + first interval length as prios give upper interval limit
|
|
|
|
u_int64_t currentPrio = mDft.nrElements() + priorityIntervalLength; |
|
|
|
|
|
|
|
for (std::list<size_t>::iterator it = elementList.begin(); it != elementList.end(); ++it) { |
|
|
|
priorities[*it] = currentPrio; |
|
|
|
currentPrio += priorityIntervalLength; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return priorities; |
|
|
@ -174,11 +171,6 @@ namespace storm { |
|
|
|
std::shared_ptr<storm::storage::DFTBE<ValueType> const> dftBE) { |
|
|
|
double xcenter = mDft.getElementLayoutInfo(dftBE->id()).x; |
|
|
|
double ycenter = mDft.getElementLayoutInfo(dftBE->id()).y; |
|
|
|
uint64_t propagationPrio = 0; |
|
|
|
if (extendedPriorities) |
|
|
|
propagationPrio = (getFailPriority(dftBE) - mDft.nrElements() - 3) / 3 + 3; |
|
|
|
else |
|
|
|
propagationPrio = dontCarePriority; |
|
|
|
|
|
|
|
uint64_t failedPlace = addFailedPlace(dftBE, storm::gspn::LayoutInfo(xcenter + 3.0, ycenter)); |
|
|
|
|
|
|
@ -221,7 +213,7 @@ namespace storm { |
|
|
|
dependencyPropagationPlaces.emplace(dftBE->id(), dependencyPropagationPlace); |
|
|
|
builder.setPlaceLayoutInfo(dependencyPropagationPlace, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 10.0, ycenter - 5.0)); |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftBE->name() + "_prop_fail"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationFailed, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 8.0, ycenter)); |
|
|
@ -229,7 +221,7 @@ namespace storm { |
|
|
|
builder.addInputArc(failedPlace, tPropagationFailed); |
|
|
|
builder.addOutputArc(tPropagationFailed, failedPlace); |
|
|
|
builder.addOutputArc(tPropagationFailed, dependencyPropagationPlace); |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftBE->name() + |
|
|
|
"_prop_dontCare"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationDontCare, |
|
|
@ -259,6 +251,8 @@ namespace storm { |
|
|
|
builder.addOutputArc(tPassive, unavailablePlace); |
|
|
|
} |
|
|
|
|
|
|
|
if (extendedPriorities) |
|
|
|
dontCarePriority++; |
|
|
|
} |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
@ -299,11 +293,6 @@ namespace storm { |
|
|
|
std::shared_ptr<storm::storage::DFTAnd<ValueType> const> dftAnd) { |
|
|
|
double xcenter = mDft.getElementLayoutInfo(dftAnd->id()).x; |
|
|
|
double ycenter = mDft.getElementLayoutInfo(dftAnd->id()).y; |
|
|
|
uint64_t propagationPrio = 0; |
|
|
|
if (extendedPriorities) |
|
|
|
propagationPrio = (getFailPriority(dftAnd) - mDft.nrElements() - 3) / 3 + 3; |
|
|
|
else |
|
|
|
propagationPrio = dontCarePriority; |
|
|
|
|
|
|
|
uint64_t failedPlace = addFailedPlace(dftAnd, storm::gspn::LayoutInfo(xcenter, ycenter - 3.0)); |
|
|
|
|
|
|
@ -327,7 +316,7 @@ namespace storm { |
|
|
|
uint64_t propagationPlace = builder.addPlace(1, 0, dftAnd->name() + "_prop"); |
|
|
|
builder.setPlaceLayoutInfo(propagationPlace, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 12.0, ycenter + 8.0)); |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftAnd->name() + "_prop_fail"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationFailed, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 10.0, ycenter + 6.0)); |
|
|
@ -335,7 +324,7 @@ namespace storm { |
|
|
|
builder.addInputArc(failedPlace, tPropagationFailed); |
|
|
|
builder.addOutputArc(tPropagationFailed, failedPlace); |
|
|
|
builder.addOutputArc(tPropagationFailed, propagationPlace); |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftAnd->name() + |
|
|
|
"_prop_dontCare"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationDontCare, |
|
|
@ -384,6 +373,8 @@ namespace storm { |
|
|
|
builder.addInputArc(getFailedPlace(child), tFailed); |
|
|
|
builder.addOutputArc(tFailed, getFailedPlace(child)); |
|
|
|
} |
|
|
|
if (extendedPriorities) |
|
|
|
dontCarePriority++; |
|
|
|
} |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
@ -391,11 +382,6 @@ namespace storm { |
|
|
|
std::shared_ptr<storm::storage::DFTOr<ValueType> const> dftOr) { |
|
|
|
double xcenter = mDft.getElementLayoutInfo(dftOr->id()).x; |
|
|
|
double ycenter = mDft.getElementLayoutInfo(dftOr->id()).y; |
|
|
|
uint64_t propagationPrio = 0; |
|
|
|
if (extendedPriorities) |
|
|
|
propagationPrio = (getFailPriority(dftOr) - mDft.nrElements() - 3) / 3 + 3; |
|
|
|
else |
|
|
|
propagationPrio = dontCarePriority; |
|
|
|
|
|
|
|
uint64_t failedPlace = addFailedPlace(dftOr, storm::gspn::LayoutInfo(xcenter, ycenter - 3.0)); |
|
|
|
|
|
|
@ -413,7 +399,7 @@ namespace storm { |
|
|
|
uint64_t propagationPlace = builder.addPlace(1, 0, dftOr->name() + "_prop"); |
|
|
|
builder.setPlaceLayoutInfo(propagationPlace, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 12.0, ycenter + 8.0)); |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftOr->name() + "_prop_fail"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationFailed, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 10.0, ycenter + 6.0)); |
|
|
@ -421,7 +407,7 @@ namespace storm { |
|
|
|
builder.addInputArc(failedPlace, tPropagationFailed); |
|
|
|
builder.addOutputArc(tPropagationFailed, failedPlace); |
|
|
|
builder.addOutputArc(tPropagationFailed, propagationPlace); |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftOr->name() + |
|
|
|
"_prop_dontCare"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationDontCare, |
|
|
@ -475,7 +461,7 @@ namespace storm { |
|
|
|
dftOr->name() + STR_FAILING + std::to_string(i)); |
|
|
|
else |
|
|
|
tFailed = builder.addImmediateTransition(getFailPriority(dftOr), 0.0, |
|
|
|
dftOr->name() + STR_FAILING + std::to_string(i)); |
|
|
|
dftOr->name() + STR_FAILING + std::to_string(i)); |
|
|
|
builder.setTransitionLayoutInfo(tFailed, |
|
|
|
storm::gspn::LayoutInfo(xcenter - 5.0 + i * 3.0, ycenter + 3.0)); |
|
|
|
builder.addInhibitionArc(failedPlace, tFailed); |
|
|
@ -486,6 +472,8 @@ namespace storm { |
|
|
|
builder.addInputArc(getFailedPlace(child), tFailed); |
|
|
|
builder.addOutputArc(tFailed, getFailedPlace(child)); |
|
|
|
} |
|
|
|
if (extendedPriorities) |
|
|
|
dontCarePriority++; |
|
|
|
} |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
@ -495,11 +483,6 @@ namespace storm { |
|
|
|
|
|
|
|
double xcenter = mDft.getElementLayoutInfo(dftVot->id()).x; |
|
|
|
double ycenter = mDft.getElementLayoutInfo(dftVot->id()).y; |
|
|
|
uint64_t propagationPrio = 0; |
|
|
|
if (extendedPriorities) |
|
|
|
propagationPrio = (getFailPriority(dftVot) - mDft.nrElements() - 3) / 3 + 3; |
|
|
|
else |
|
|
|
propagationPrio = dontCarePriority; |
|
|
|
|
|
|
|
uint64_t failedPlace = addFailedPlace(dftVot, storm::gspn::LayoutInfo(xcenter, ycenter - 3.0)); |
|
|
|
|
|
|
@ -529,8 +512,8 @@ namespace storm { |
|
|
|
std::to_string(i)); |
|
|
|
else |
|
|
|
tCollect = builder.addImmediateTransition(getFailPriority(dftVot), 0.0, |
|
|
|
dftVot->name() + "_child_collect" + |
|
|
|
std::to_string(i)); |
|
|
|
dftVot->name() + "_child_collect" + |
|
|
|
std::to_string(i)); |
|
|
|
builder.addOutputArc(tCollect, collectorPlace); |
|
|
|
builder.addInputArc(childNextPlace, tCollect); |
|
|
|
builder.addInputArc(getFailedPlace(child), tCollect); |
|
|
@ -551,7 +534,7 @@ namespace storm { |
|
|
|
uint64_t propagationPlace = builder.addPlace(1, 0, dftVot->name() + "_prop"); |
|
|
|
builder.setPlaceLayoutInfo(propagationPlace, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 12.0, ycenter + 8.0)); |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftVot->name() + "_prop_fail"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationFailed, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 10.0, ycenter + 6.0)); |
|
|
@ -559,7 +542,7 @@ namespace storm { |
|
|
|
builder.addInputArc(failedPlace, tPropagationFailed); |
|
|
|
builder.addOutputArc(tPropagationFailed, failedPlace); |
|
|
|
builder.addOutputArc(tPropagationFailed, propagationPlace); |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftVot->name() + |
|
|
|
"_prop_dontCare"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationDontCare, |
|
|
@ -597,6 +580,8 @@ namespace storm { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (extendedPriorities) |
|
|
|
dontCarePriority++; |
|
|
|
} |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
@ -605,18 +590,13 @@ namespace storm { |
|
|
|
//TODO Layouting
|
|
|
|
double xcenter = mDft.getElementLayoutInfo(dftPand->id()).x; |
|
|
|
double ycenter = mDft.getElementLayoutInfo(dftPand->id()).y; |
|
|
|
uint64_t propagationPrio = 0; |
|
|
|
if (extendedPriorities) |
|
|
|
propagationPrio = (getFailPriority(dftPand) - mDft.nrElements() - 3) / 3 + 3; |
|
|
|
else |
|
|
|
propagationPrio = dontCarePriority; |
|
|
|
|
|
|
|
uint64_t failedPlace = addFailedPlace(dftPand, storm::gspn::LayoutInfo(xcenter + 3.0, ycenter - 3.0)); |
|
|
|
|
|
|
|
// Set priority lower if the PAND is exclusive
|
|
|
|
uint64_t tFailed = builder.addImmediateTransition( |
|
|
|
/*inclusive ? getFailPriority(dftPand) : */getFailPriority(dftPand) - 1, 0.0, |
|
|
|
dftPand->name() + STR_FAILING); |
|
|
|
dftPand->name() + STR_FAILING); |
|
|
|
builder.setTransitionLayoutInfo(tFailed, storm::gspn::LayoutInfo(xcenter + 3.0, ycenter + 3.0)); |
|
|
|
builder.addInhibitionArc(failedPlace, tFailed); |
|
|
|
builder.addOutputArc(tFailed, failedPlace); |
|
|
@ -684,11 +664,11 @@ namespace storm { |
|
|
|
uint64_t propagationPlace = builder.addPlace(1, 0, dftPand->name() + "_prop"); |
|
|
|
builder.setPlaceLayoutInfo(propagationPlace, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 12.0, ycenter + 8.0)); |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftPand->name() + "_prop_fail"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationFailed, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 10.0, ycenter + 6.0)); |
|
|
|
uint64_t tPropagationFailsafe = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationFailsafe = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftPand->name() + "_prop_failsafe"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationFailsafe, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 8.0, ycenter + 6.0)); |
|
|
@ -721,7 +701,7 @@ namespace storm { |
|
|
|
storm::gspn::LayoutInfo(xcenter + 16.0, ycenter + 4.0)); |
|
|
|
builder.addInhibitionArc(dontCarePlace, tDontCare); |
|
|
|
builder.addOutputArc(tDontCare, dontCarePlace); |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftPand->name() + |
|
|
|
"_prop_dontCare"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationDontCare, |
|
|
@ -737,6 +717,8 @@ namespace storm { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (extendedPriorities) |
|
|
|
dontCarePriority++; |
|
|
|
} |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
@ -745,11 +727,6 @@ namespace storm { |
|
|
|
|
|
|
|
double xcenter = mDft.getElementLayoutInfo(dftPor->id()).x; |
|
|
|
double ycenter = mDft.getElementLayoutInfo(dftPor->id()).y; |
|
|
|
uint64_t propagationPrio = 0; |
|
|
|
if (extendedPriorities) |
|
|
|
propagationPrio = (getFailPriority(dftPor) - mDft.nrElements() - 3) / 3 + 3; |
|
|
|
else |
|
|
|
propagationPrio = dontCarePriority; |
|
|
|
|
|
|
|
uint64_t delayPlace = 0; |
|
|
|
|
|
|
@ -758,7 +735,7 @@ namespace storm { |
|
|
|
// Set priority lower if the POR is exclusive
|
|
|
|
uint64_t tFailed = builder.addImmediateTransition( |
|
|
|
/*inclusive ? getFailPriority(dftPor) : */getFailPriority(dftPor) - 1, 0.0, |
|
|
|
dftPor->name() + STR_FAILING); |
|
|
|
dftPor->name() + STR_FAILING); |
|
|
|
builder.setTransitionLayoutInfo(tFailed, storm::gspn::LayoutInfo(xcenter + 3.0, ycenter + 3.0)); |
|
|
|
builder.addOutputArc(tFailed, failedPlace); |
|
|
|
builder.addInhibitionArc(failedPlace, tFailed); |
|
|
@ -823,11 +800,11 @@ namespace storm { |
|
|
|
uint64_t propagationPlace = builder.addPlace(1, 0, dftPor->name() + "_prop"); |
|
|
|
builder.setPlaceLayoutInfo(propagationPlace, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 12.0, ycenter + 8.0)); |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftPor->name() + "_prop_fail"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationFailed, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 10.0, ycenter + 6.0)); |
|
|
|
uint64_t tPropagationFailsafe = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationFailsafe = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftPor->name() + "_prop_failsafe"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationFailsafe, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 8.0, ycenter + 6.0)); |
|
|
@ -860,7 +837,7 @@ namespace storm { |
|
|
|
storm::gspn::LayoutInfo(xcenter + 16.0, ycenter + 4.0)); |
|
|
|
builder.addInhibitionArc(dontCarePlace, tDontCare); |
|
|
|
builder.addOutputArc(tDontCare, dontCarePlace); |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftPor->name() + |
|
|
|
"_prop_dontCare"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationDontCare, |
|
|
@ -876,7 +853,8 @@ namespace storm { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (extendedPriorities) |
|
|
|
dontCarePriority++; |
|
|
|
} |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
@ -884,11 +862,6 @@ namespace storm { |
|
|
|
std::shared_ptr<storm::storage::DFTSpare<ValueType> const> dftSpare) { |
|
|
|
double xcenter = mDft.getElementLayoutInfo(dftSpare->id()).x; |
|
|
|
double ycenter = mDft.getElementLayoutInfo(dftSpare->id()).y; |
|
|
|
uint64_t propagationPrio = 0; |
|
|
|
if (extendedPriorities) |
|
|
|
propagationPrio = (getFailPriority(dftSpare) - mDft.nrElements() - 3) / 3 + 3; |
|
|
|
else |
|
|
|
propagationPrio = dontCarePriority; |
|
|
|
|
|
|
|
uint64_t failedPlace = addFailedPlace(dftSpare, storm::gspn::LayoutInfo(xcenter + 10.0, ycenter - 8.0)); |
|
|
|
|
|
|
@ -997,7 +970,7 @@ namespace storm { |
|
|
|
dftSpare->name() + "_prop"); |
|
|
|
builder.setPlaceLayoutInfo(propagationPlace, |
|
|
|
storm::gspn::LayoutInfo(xcenter + 12.0, ycenter + 8.0)); |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftSpare->name() + |
|
|
|
"_prop_fail"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationFailed, |
|
|
@ -1006,7 +979,7 @@ namespace storm { |
|
|
|
builder.addInputArc(failedPlace, tPropagationFailed); |
|
|
|
builder.addOutputArc(tPropagationFailed, failedPlace); |
|
|
|
builder.addOutputArc(tPropagationFailed, propagationPlace); |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(propagationPrio, 0.0, |
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftSpare->name() + |
|
|
|
"_prop_dontCare"); |
|
|
|
builder.setTransitionLayoutInfo(tPropagationDontCare, |
|
|
@ -1049,6 +1022,8 @@ namespace storm { |
|
|
|
builder.addOutputArc(tNextConsiders.back(), unavailablePlace); |
|
|
|
builder.addOutputArc(tNextClaims.back(), unavailablePlace); |
|
|
|
} |
|
|
|
if (extendedPriorities) |
|
|
|
dontCarePriority++; |
|
|
|
} |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
@ -1115,6 +1090,7 @@ namespace storm { |
|
|
|
if (!smart || mDft.isRepresentative(child->id())) { |
|
|
|
builder.addOutputArc(tForwardFailure, unavailablePlaces.at(child->id())); |
|
|
|
} |
|
|
|
propagationPriority--; |
|
|
|
} |
|
|
|
|
|
|
|
// Don't Care
|
|
|
@ -1166,6 +1142,8 @@ namespace storm { |
|
|
|
if (failedPlace == 0) { |
|
|
|
failedPlaces.push_back(failedPlace); |
|
|
|
} |
|
|
|
if (extendedPriorities) |
|
|
|
dontCarePriority++; |
|
|
|
} |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
@ -1252,16 +1230,9 @@ namespace storm { |
|
|
|
std::shared_ptr<const storm::storage::DFTElement<ValueType> > dftElement, |
|
|
|
storm::gspn::LayoutInfo const &layoutInfo) { |
|
|
|
uint64_t dontcareTransition; |
|
|
|
if (extendedPriorities) { |
|
|
|
dontcareTransition = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dontcareTransition = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftElement->name() + STR_DONTCARE + |
|
|
|
"_transition"); |
|
|
|
dontCarePriority++; |
|
|
|
} else { |
|
|
|
dontcareTransition = builder.addImmediateTransition(dontCarePriority, 0.0, |
|
|
|
dftElement->name() + STR_DONTCARE + |
|
|
|
"_transition"); |
|
|
|
} |
|
|
|
dontcareTransitions.emplace(dftElement->id(), dontcareTransition); |
|
|
|
builder.setTransitionLayoutInfo(dontcareTransition, layoutInfo); |
|
|
|
return dontcareTransition; |
|
|
|