| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -171,7 +171,7 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									mGspn.addPlace(placePANDFailed); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									storm::gspn::Place placePANDFailsave; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									placePANDFailsave.setName(dftPand->name() + "_failsave"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									placePANDFailsave.setName(dftPand->name() + STR_FAILSAVE); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									placePANDFailsave.setNumberOfInitialTokens(0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									mGspn.addPlace(placePANDFailsave); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -185,12 +185,14 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									mGspn.addImmediateTransition(immediateTransitionPANDFailing); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									storm::gspn::ImmediateTransition<storm::gspn::GSPN::WeightType> immediateTransitionPANDFailsave; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPANDFailsave.setName(dftPand->name() + "_failsaving"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPANDFailsave.setName(dftPand->name() + STR_FAILSAVING); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPANDFailsave.setPriority(1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPANDFailsave.setWeight(0.0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPANDFailsave.setInhibitionArcMultiplicity(placePANDFailsave, 1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPANDFailsave.setOutputArcMultiplicity(placePANDFailsave, 1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									mGspn.addImmediateTransition(immediateTransitionPANDFailsave); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									// TODO: Extend for more than 2 children.
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								template <typename ValueType> | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -200,7 +202,34 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								template <typename ValueType> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            void DftToGspnTransformator<ValueType>::drawPOR(std::shared_ptr<storm::storage::DFTPor<ValueType> const> dftPor) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "The transformation of a POR is not yet implemented."); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									storm::gspn::Place placePORFailed; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									placePORFailed.setName(dftPor->name() + STR_FAILED); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									placePORFailed.setNumberOfInitialTokens(0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									mGspn.addPlace(placePORFailed); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									storm::gspn::Place placePORFailsave; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									placePORFailsave.setName(dftPor->name() + STR_FAILSAVE); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									placePORFailsave.setNumberOfInitialTokens(0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									mGspn.addPlace(placePORFailsave); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									storm::gspn::ImmediateTransition<storm::gspn::GSPN::WeightType> immediateTransitionPORFailing; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPORFailing.setName(dftPor->name() + STR_FAILING); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPORFailing.setPriority(1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPORFailing.setWeight(0.0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPORFailing.setInhibitionArcMultiplicity(placePORFailed, 1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPORFailing.setInhibitionArcMultiplicity(placePORFailsave, 1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPORFailing.setOutputArcMultiplicity(placePORFailed, 1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									mGspn.addImmediateTransition(immediateTransitionPORFailing); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									storm::gspn::ImmediateTransition<storm::gspn::GSPN::WeightType> immediateTransitionPORFailsave; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPORFailsave.setName(dftPor->name() + STR_FAILSAVING); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPORFailsave.setPriority(1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPORFailsave.setWeight(0.0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPORFailsave.setInhibitionArcMultiplicity(placePORFailsave, 1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									immediateTransitionPORFailsave.setOutputArcMultiplicity(placePORFailsave, 1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									mGspn.addImmediateTransition(immediateTransitionPORFailsave); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									// TODO: Extend for more than 2 children.
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								template <typename ValueType> | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -279,7 +308,7 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
												{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													auto children =  std::static_pointer_cast<storm::storage::DFTPand<ValueType> const>(mDft.getElement(parents[j]))->children(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													auto pandEntry = mGspn.getImmediateTransition(mDft.getElement(parents[j])->name() + STR_FAILING); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													auto pandEntry2 = mGspn.getImmediateTransition(mDft.getElement(parents[j])->name() + "_failsaving"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													auto pandEntry2 = mGspn.getImmediateTransition(mDft.getElement(parents[j])->name() + STR_FAILSAVING); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													auto childExit = mGspn.getPlace(child->name() + STR_FAILED); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													if (pandEntry.first && pandEntry2.first && childExit.first) { // Only add arcs if the objects have been found.
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -302,7 +331,27 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
												case storm::storage::DFTElementType::SPARE: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
												case storm::storage::DFTElementType::POR: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
												{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													auto children =  std::static_pointer_cast<storm::storage::DFTPand<ValueType> const>(mDft.getElement(parents[j]))->children(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													auto porEntry = mGspn.getImmediateTransition(mDft.getElement(parents[j])->name() + STR_FAILING); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													auto porEntry2 = mGspn.getImmediateTransition(mDft.getElement(parents[j])->name() + STR_FAILSAVING); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													auto childExit = mGspn.getPlace(child->name() + STR_FAILED); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													if (porEntry.first && porEntry2.first && childExit.first) { // Only add arcs if the objects have been found.
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
														if (children[0] == child) { // Current element is primary child.
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
															porEntry.second->setInputArcMultiplicity(childExit.second, 1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
															porEntry.second->setOutputArcMultiplicity(childExit.second, 1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
															porEntry2.second->setInhibitionArcMultiplicity(childExit.second, 1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
															 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
														} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
														else if (children[1] == child) { // Current element is secondary child.
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
															porEntry2.second->setInputArcMultiplicity(childExit.second, 1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
															porEntry2.second->setOutputArcMultiplicity(childExit.second, 1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
														} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
												} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
												case storm::storage::DFTElementType::SEQ: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
													break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
												case storm::storage::DFTElementType::MUTEX: | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |