@ -141,6 +141,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            STORM_LOG_THROW ( childNames . size ( )  > =  2 ,  storm : : exceptions : : WrongFormatException ,  " FDEP gate needs at least two children in line  "  < <  lineNo  < <  " . " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            success  =  builder . addDepElement ( name ,  childNames ,  storm : : utility : : one < ValueType > ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        }  else  if  ( boost : : starts_with ( type ,  " pdep= " ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            STORM_LOG_THROW ( childNames . size ( )  > =  2 ,  storm : : exceptions : : WrongFormatException ,  " PDEP gate needs at least two children in line  "  < <  lineNo  < <  " . " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            ValueType  probability  =  valueParser . parseValue ( type . substr ( 5 ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            success  =  builder . addDepElement ( name ,  childNames ,  probability ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        }  else  if  ( type . find ( " = " )  ! =  std : : string : : npos )  {  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -210,6 +211,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ValueType  secondValDistribution  =  storm : : utility : : zero < ValueType > ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ValueType  dormancyFactor  =  storm : : utility : : one < ValueType > ( ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            size_t  replication  =  1 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            size_t  erlangPhases  =  1 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            // Remove name from input
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : regex  regexName ( " \" ? "  +  name  +  " \" ? " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : string  line  =  std : : regex_replace ( input ,  regexName ,  " " ) ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -232,10 +234,10 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            // Erlang distribution
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            result  =  parseValue ( " phases " ,  line ,  valueParser ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : pair < bool ,  unsigned >  resultNum  =  parseNumber ( " phases " ,  line ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( result . first )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                STORM_LOG_THROW ( distribution  = =  Distribution : : None  | |  distribution  = =  Distribution : : Exponential ,  storm : : exceptions : : WrongFormatException ,  " A different distribution was already defined for this basic element. " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                secondValDistribution   =  result . second ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                erlangPhases   =  resultNum  . second ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                distribution  =  Distribution : : Erlang ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            // Weibull distribution
  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -273,7 +275,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( result . first )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                STORM_LOG_WARN ( " Restoration is not supported and will be ignored. " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : pair < bool ,  unsigned >  resultNum  =  parseNumber ( " repl " ,  line ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            resultNum  =  parseNumber ( " repl " ,  line ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( resultNum . first )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                replication  =  resultNum . second ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                STORM_LOG_THROW ( replication  = =  1 ,  storm : : exceptions : : NotSupportedException ,  " Replication > 1 is not supported. " ) ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -297,12 +299,25 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                case  Exponential :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    return  builder . addBasicElement ( parseName ( name ) ,  firstValDistribution ,  dormancyFactor ,  false ) ;  // TODO set transient BEs
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                case  Erlang :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    if  ( storm : : utility : : isOne < ValueType > ( secondValDistribution ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    if  ( erlangPhases  = =  1 )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        // Erlang distribution reduces to exponential distribution
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        return  builder . addBasicElement ( parseName ( name ) ,  firstValDistribution ,  dormancyFactor ,  false ) ;  // TODO set transient BEs
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        STORM_LOG_THROW ( false ,  storm : : exceptions : : NotSupportedException ,  " Erlang distribution is not supported. " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        // Model Erlang distribution by using SEQ over BEs instead.
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        // For each phase a BE is added, then the SEQ ensures the ordered failure.
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        STORM_LOG_WARN ( " Erlang distribution is modelled by SEQ gate and BEs. " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        std : : string  origName  =  parseName ( name ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        std : : vector < std : : string >  childNames ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        bool  success  =  builder . addBasicElement ( origName ,  firstValDistribution ,  dormancyFactor ,  false ) ;  // TODO set transient BEs
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        for  ( size_t  i  =  0 ;  i  <  erlangPhases  -  1 ;  + + i )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            std : : string  beName  =  origName  +  " _ "  +  std : : to_string ( i ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            childNames . push_back ( beName ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            success  =  success  & &  builder . addBasicElement ( beName ,  firstValDistribution ,  dormancyFactor ,  false ) ;  // TODO set transient BEs
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        childNames . push_back ( origName ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        return  success  & &  builder . addSequenceEnforcer ( origName  +  " _seq " ,  childNames ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                case  Weibull :