|
|
@ -63,9 +63,14 @@ namespace storm { |
|
|
|
maxNrDependentEvents = nrDependentEvents; |
|
|
|
} |
|
|
|
} |
|
|
|
// Get the maximum number of children
|
|
|
|
if (maxNrOfChildren < mDft.getElement(i)->nrChildren()) { |
|
|
|
maxNrOfChildren = mDft.getElement(i)->nrChildren(); |
|
|
|
// Get the maximum number of children/ SPAREs need additional transitions
|
|
|
|
|
|
|
|
u_int64_t nrChildren = mDft.getElement(i)->nrChildren(); |
|
|
|
if (mDft.getElement(i)->type() == storm::storage::DFTElementType::SPARE) { |
|
|
|
nrChildren *= 4; |
|
|
|
} |
|
|
|
if (maxNrOfChildren < nrChildren) { |
|
|
|
maxNrOfChildren = nrChildren; |
|
|
|
} |
|
|
|
// Organize the elements according to their rank
|
|
|
|
if (!elementList.empty()) { |
|
|
@ -863,6 +868,8 @@ namespace storm { |
|
|
|
double xcenter = mDft.getElementLayoutInfo(dftSpare->id()).x; |
|
|
|
double ycenter = mDft.getElementLayoutInfo(dftSpare->id()).y; |
|
|
|
|
|
|
|
u_int64_t prio = getFailPriority(dftSpare); |
|
|
|
|
|
|
|
uint64_t failedPlace = addFailedPlace(dftSpare, storm::gspn::LayoutInfo(xcenter + 10.0, ycenter - 8.0)); |
|
|
|
|
|
|
|
bool isRepresentative = mDft.isRepresentative(dftSpare->id()); |
|
|
@ -895,9 +902,10 @@ namespace storm { |
|
|
|
} |
|
|
|
|
|
|
|
// Cannot claim child
|
|
|
|
uint64_t tConsiderNext = builder.addImmediateTransition(getFailPriority(dftSpare), 0.0, |
|
|
|
uint64_t tConsiderNext = builder.addImmediateTransition(prio, 0.0, |
|
|
|
dftSpare->name() + "_cannot_claim_" + |
|
|
|
child->name()); |
|
|
|
prio++; |
|
|
|
builder.setTransitionLayoutInfo(tConsiderNext, |
|
|
|
storm::gspn::LayoutInfo(xcenter - 7.0 + i * 14.0, ycenter - 8.0)); |
|
|
|
builder.addInputArc(considerPlace, tConsiderNext); |
|
|
@ -910,8 +918,9 @@ namespace storm { |
|
|
|
dftSpare->name() + "_claimed_" + child->name()); |
|
|
|
builder.setPlaceLayoutInfo(claimedPlace, |
|
|
|
storm::gspn::LayoutInfo(xcenter - 15.0 + i * 14.0, ycenter + 5.0)); |
|
|
|
uint64_t tClaim = builder.addImmediateTransition(getFailPriority(dftSpare), 0.0, |
|
|
|
uint64_t tClaim = builder.addImmediateTransition(prio, 0.0, |
|
|
|
dftSpare->name() + "_claim_" + child->name()); |
|
|
|
prio++; |
|
|
|
builder.setTransitionLayoutInfo(tClaim, |
|
|
|
storm::gspn::LayoutInfo(xcenter - 15.0 + i * 14.0, ycenter)); |
|
|
|
builder.addInhibitionArc(unavailablePlaces.at(child->id()), tClaim); |
|
|
@ -920,9 +929,10 @@ namespace storm { |
|
|
|
builder.addOutputArc(tClaim, unavailablePlaces.at(child->id())); |
|
|
|
|
|
|
|
// Claim next
|
|
|
|
uint64_t tClaimNext = builder.addImmediateTransition(getFailPriority(dftSpare), 0.0, |
|
|
|
uint64_t tClaimNext = builder.addImmediateTransition(prio, 0.0, |
|
|
|
dftSpare->name() + "_next_claim_" + |
|
|
|
std::to_string(i)); |
|
|
|
prio++; |
|
|
|
builder.setTransitionLayoutInfo(tClaimNext, |
|
|
|
storm::gspn::LayoutInfo(xcenter - 7.0 + i * 14.0, ycenter + 5.0)); |
|
|
|
builder.addInputArc(claimedPlace, tClaimNext); |
|
|
@ -933,10 +943,11 @@ namespace storm { |
|
|
|
// Activate all elements in spare module
|
|
|
|
uint64_t l = 0; |
|
|
|
for (uint64_t k : mDft.module(child->id())) { |
|
|
|
uint64_t tActivate = builder.addImmediateTransition(getFailPriority(dftSpare), 0.0, |
|
|
|
uint64_t tActivate = builder.addImmediateTransition(prio, 0.0, |
|
|
|
dftSpare->name() + "_activate_" + |
|
|
|
std::to_string(i) + "_" + |
|
|
|
std::to_string(k)); |
|
|
|
prio++; |
|
|
|
builder.setTransitionLayoutInfo(tActivate, storm::gspn::LayoutInfo(xcenter - 18.0 + (i + l) * 3, |
|
|
|
ycenter - 12.0)); |
|
|
|
builder.addInhibitionArc(activePlaces.at(k), tActivate); |
|
|
|