|
@ -136,10 +136,41 @@ namespace storm { |
|
|
storm::gspn::LayoutInfo(xcenter + 12.0, ycenter + 5.0)); |
|
|
storm::gspn::LayoutInfo(xcenter + 12.0, ycenter + 5.0)); |
|
|
builder.addInhibitionArc(dontCarePlace, tDontCare); |
|
|
builder.addInhibitionArc(dontCarePlace, tDontCare); |
|
|
builder.addOutputArc(tDontCare, dontCarePlace); |
|
|
builder.addOutputArc(tDontCare, dontCarePlace); |
|
|
|
|
|
|
|
|
|
|
|
builder.addInhibitionArc(dontCarePlace, tActive); |
|
|
|
|
|
builder.addInhibitionArc(dontCarePlace, tPassive); |
|
|
|
|
|
|
|
|
|
|
|
//Propagation for dependencies
|
|
|
|
|
|
if (!smart || dftBE->hasIngoingDependencies()) { |
|
|
|
|
|
uint64_t dependencyPropagationPlace = builder.addPlace(defaultPriority, 0, |
|
|
|
|
|
dftBE->name() + "_dependency_prop"); |
|
|
|
|
|
dependencyPropagationPlaces.emplace(dftBE->id(), dependencyPropagationPlace); |
|
|
|
|
|
|
|
|
|
|
|
builder.setPlaceLayoutInfo(dependencyPropagationPlace, |
|
|
|
|
|
storm::gspn::LayoutInfo(xcenter + 12.0, ycenter + 8.0)); |
|
|
|
|
|
uint64_t tPropagationFailed = builder.addImmediateTransition(defaultPriority, 0.0, |
|
|
|
|
|
dftBE->name() + "_prop_fail"); |
|
|
|
|
|
builder.setTransitionLayoutInfo(tPropagationFailed, |
|
|
|
|
|
storm::gspn::LayoutInfo(xcenter + 10.0, ycenter + 6.0)); |
|
|
|
|
|
builder.addInhibitionArc(dependencyPropagationPlace, tPropagationFailed); |
|
|
|
|
|
builder.addInputArc(failedPlace, tPropagationFailed); |
|
|
|
|
|
builder.addOutputArc(tPropagationFailed, failedPlace); |
|
|
|
|
|
builder.addOutputArc(tPropagationFailed, dependencyPropagationPlace); |
|
|
|
|
|
uint64_t tPropagationDontCare = builder.addImmediateTransition(defaultPriority, 0.0, |
|
|
|
|
|
dftBE->name() + |
|
|
|
|
|
"_prop_dontCare"); |
|
|
|
|
|
builder.setTransitionLayoutInfo(tPropagationDontCare, |
|
|
|
|
|
storm::gspn::LayoutInfo(xcenter + 14.0, ycenter + 6.0)); |
|
|
|
|
|
builder.addInhibitionArc(dependencyPropagationPlace, tPropagationDontCare); |
|
|
|
|
|
builder.addInputArc(dependencyPropagationPlace, tPropagationDontCare); |
|
|
|
|
|
builder.addOutputArc(tPropagationDontCare, dontCarePlace); |
|
|
|
|
|
builder.addOutputArc(tPropagationDontCare, dependencyPropagationPlace); |
|
|
|
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
builder.addInhibitionArc(failedPlace, tDontCare); |
|
|
builder.addInhibitionArc(failedPlace, tDontCare); |
|
|
builder.addOutputArc(tDontCare, failedPlace); |
|
|
builder.addOutputArc(tDontCare, failedPlace); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (!smart || dftBE->nrRestrictions() > 0) { |
|
|
if (!smart || dftBE->nrRestrictions() > 0) { |
|
@ -154,6 +185,7 @@ namespace storm { |
|
|
builder.addOutputArc(tActive, unavailablePlace); |
|
|
builder.addOutputArc(tActive, unavailablePlace); |
|
|
builder.addOutputArc(tPassive, unavailablePlace); |
|
|
builder.addOutputArc(tPassive, unavailablePlace); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
template<typename ValueType> |
|
@ -203,7 +235,6 @@ namespace storm { |
|
|
builder.addInhibitionArc(failedPlace, tFailed); |
|
|
builder.addInhibitionArc(failedPlace, tFailed); |
|
|
builder.addOutputArc(tFailed, failedPlace); |
|
|
builder.addOutputArc(tFailed, failedPlace); |
|
|
|
|
|
|
|
|
//TODO Make it smart
|
|
|
|
|
|
if (dontCareElements.count(dftAnd->id())) { |
|
|
if (dontCareElements.count(dftAnd->id())) { |
|
|
if (dftAnd->id() != mDft.getTopLevelIndex()) { |
|
|
if (dftAnd->id() != mDft.getTopLevelIndex()) { |
|
|
u_int64_t tDontCare = addDontcareTransition(dftAnd, |
|
|
u_int64_t tDontCare = addDontcareTransition(dftAnd, |
|
@ -845,8 +876,9 @@ namespace storm { |
|
|
double xcenter = mDft.getElementLayoutInfo(dftDependency->id()).x; |
|
|
double xcenter = mDft.getElementLayoutInfo(dftDependency->id()).x; |
|
|
double ycenter = mDft.getElementLayoutInfo(dftDependency->id()).y; |
|
|
double ycenter = mDft.getElementLayoutInfo(dftDependency->id()).y; |
|
|
|
|
|
|
|
|
|
|
|
uint64_t failedPlace = 0; |
|
|
if (!smart) { |
|
|
if (!smart) { |
|
|
addFailedPlace(dftDependency, storm::gspn::LayoutInfo(xcenter + 10.0, ycenter - 8.0)); |
|
|
|
|
|
|
|
|
failedPlace = addFailedPlace(dftDependency, storm::gspn::LayoutInfo(xcenter + 10.0, ycenter - 8.0)); |
|
|
addUnavailablePlace(dftDependency, storm::gspn::LayoutInfo(xcenter + 16.0, ycenter - 8.0)); |
|
|
addUnavailablePlace(dftDependency, storm::gspn::LayoutInfo(xcenter + 16.0, ycenter - 8.0)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -898,6 +930,54 @@ namespace storm { |
|
|
builder.addOutputArc(tForwardFailure, unavailablePlaces.at(child->id())); |
|
|
builder.addOutputArc(tForwardFailure, unavailablePlaces.at(child->id())); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Don't Care TODO LAYOUTING
|
|
|
|
|
|
if (dontCareElements.count(dftDependency->id())) { |
|
|
|
|
|
u_int64_t tDontCare = addDontcareTransition(dftDependency, |
|
|
|
|
|
storm::gspn::LayoutInfo(xcenter + 12.0, ycenter)); |
|
|
|
|
|
if (!mergedDCFailed) { |
|
|
|
|
|
u_int64_t dontCarePlace = builder.addPlace(defaultPriority, 0, |
|
|
|
|
|
dftDependency->name() + STR_DONTCARE); |
|
|
|
|
|
builder.setPlaceLayoutInfo(dontCarePlace, |
|
|
|
|
|
storm::gspn::LayoutInfo(xcenter + 12.0, ycenter + 5.0)); |
|
|
|
|
|
builder.addInhibitionArc(dontCarePlace, tDontCare); |
|
|
|
|
|
builder.addOutputArc(tDontCare, dontCarePlace); |
|
|
|
|
|
// Add the arcs for the dependent events
|
|
|
|
|
|
for (auto const &dependentEvent : dftDependency->dependentEvents()) { |
|
|
|
|
|
if (dontCareElements.count(dependentEvent->id())) { |
|
|
|
|
|
u_int64_t dependentEventPropagation = dependencyPropagationPlaces.at( |
|
|
|
|
|
dependentEvent->id()); |
|
|
|
|
|
builder.addInputArc(dependentEventPropagation, tDontCare); |
|
|
|
|
|
builder.addOutputArc(tDontCare, dependentEventPropagation); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
// Add the arcs for the trigger
|
|
|
|
|
|
uint64_t triggerDontCare = dontcareTransitions.at(dftDependency->triggerEvent()->id()); |
|
|
|
|
|
builder.addInputArc(dontCarePlace, triggerDontCare); |
|
|
|
|
|
builder.addOutputArc(triggerDontCare, dontCarePlace); |
|
|
|
|
|
} else { |
|
|
|
|
|
if (failedPlace == 0) { |
|
|
|
|
|
failedPlace = addFailedPlace(dftDependency, |
|
|
|
|
|
storm::gspn::LayoutInfo(xcenter + 10.0, ycenter - 8.0)); |
|
|
|
|
|
} |
|
|
|
|
|
builder.addInhibitionArc(failedPlace, tDontCare); |
|
|
|
|
|
builder.addOutputArc(tDontCare, failedPlace); |
|
|
|
|
|
|
|
|
|
|
|
// Add the arcs for the dependent events
|
|
|
|
|
|
for (auto const &dependentEvent : dftDependency->dependentEvents()) { |
|
|
|
|
|
if (dontCareElements.count(dependentEvent->id())) { |
|
|
|
|
|
u_int64_t dependentEventFailed = failedPlaces.at(dependentEvent->id()); |
|
|
|
|
|
builder.addInputArc(dependentEventFailed, tDontCare); |
|
|
|
|
|
builder.addOutputArc(tDontCare, dependentEventFailed); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
// Add the arcs for the trigger
|
|
|
|
|
|
uint64_t triggerDontCare = dontcareTransitions.at(dftDependency->triggerEvent()->id()); |
|
|
|
|
|
builder.addInputArc(failedPlace, triggerDontCare); |
|
|
|
|
|
builder.addOutputArc(triggerDontCare, failedPlace); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
template<typename ValueType> |
|
|