| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -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); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |