@ -22,7 +22,22 @@ namespace tempest { 
			
		
	
		
			
				
					                storm : : utility : : closeFile ( stream ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					            storm : : utility : : closeFile ( stream ) ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					        }          
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        template < typename  ValueType ,  typename  IndexType >  
			
		
	
		
			
				
					        std : : unique_ptr < tempest : : shields : : AbstractShield < ValueType ,  IndexType > >  createShieldTest ( std : : shared_ptr < storm : : models : : sparse : : Model < ValueType > >  model ,  std : : vector < ValueType >  const &  choiceValues ,  std : : shared_ptr < storm : : logic : : ShieldExpression  const >  const &  shieldingExpression ,  storm : : OptimizationDirection  optimizationDirection ,  storm : : storage : : BitVector  relevantStates ,  boost : : optional < storm : : storage : : BitVector >  coalitionStates )  {  
			
		
	
		
			
				
					            if ( coalitionStates . is_initialized ( ) )  coalitionStates . get ( ) . complement ( ) ;  
			
		
	
		
			
				
					            if ( shieldingExpression - > isPreSafetyShield ( ) )  {  
			
		
	
		
			
				
					                PreShield < ValueType ,  IndexType >  shield ( model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) ,  choiceValues ,  shieldingExpression ,  optimizationDirection ,  relevantStates ,  coalitionStates ) ;  
			
		
	
		
			
				
					                return  std : : make_unique < tempest : : shields : : PreShield < ValueType ,  IndexType > > ( shield ) ;  
			
		
	
		
			
				
					            }  else  if ( shieldingExpression - > isPostSafetyShield ( ) )  {  
			
		
	
		
			
				
					                PostShield < ValueType ,  IndexType >  shield ( model - > getTransitionMatrix ( ) . getRowGroupIndices ( ) ,  choiceValues ,  shieldingExpression ,  optimizationDirection ,  relevantStates ,  coalitionStates ) ;  
			
		
	
		
			
				
					                return  std : : make_unique < tempest : : shields : : PostShield < ValueType ,  IndexType > > ( shield ) ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                STORM_LOG_THROW ( false ,  storm : : exceptions : : InvalidArgumentException ,  " Unknown Shielding Type:  "  +  shieldingExpression - > typeToString ( ) ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }     
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        template < typename  ValueType ,  typename  IndexType >  
			
		
	
		
			
				
					        void  createQuantitativeShield ( std : : shared_ptr < storm : : models : : sparse : : Model < ValueType > >  model ,  std : : vector < ValueType >  const &  choiceValues ,  std : : shared_ptr < storm : : logic : : ShieldExpression  const >  const &  shieldingExpression ,  storm : : OptimizationDirection  optimizationDirection ,  storm : : storage : : BitVector  relevantStates ,  boost : : optional < storm : : storage : : BitVector >  coalitionStates )  {  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -43,9 +58,12 @@ namespace tempest { 
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					        // Explicitly instantiate appropriate
  
			
		
	
		
			
				
					        template  void  createShield < double ,  typename  storm : : storage : : SparseMatrix < double > : : index_type > ( std : : shared_ptr < storm : : models : : sparse : : Model < double > >  model ,  std : : vector < double >  const &  choiceValues ,  std : : shared_ptr < storm : : logic : : ShieldExpression  const >  const &  shieldingExpression ,  storm : : OptimizationDirection  optimizationDirection ,  storm : : storage : : BitVector  relevantStates ,  boost : : optional < storm : : storage : : BitVector >  coalitionStates ) ;  
			
		
	
		
			
				
					        template  std : : unique_ptr < tempest : : shields : : AbstractShield < double ,  typename  storm : : storage : : SparseMatrix < double > : : index_type > >  createShieldTest < double ,  typename  storm : : storage : : SparseMatrix < double > : : index_type > ( std : : shared_ptr < storm : : models : : sparse : : Model < double > >  model ,  std : : vector < double >  const &  choiceValues ,  std : : shared_ptr < storm : : logic : : ShieldExpression  const >  const &  shieldingExpression ,  storm : : OptimizationDirection  optimizationDirection ,  storm : : storage : : BitVector  relevantStates ,  boost : : optional < storm : : storage : : BitVector >  coalitionStates ) ;  
			
		
	
		
			
				
					        template  void  createQuantitativeShield < double ,  typename  storm : : storage : : SparseMatrix < double > : : index_type > ( std : : shared_ptr < storm : : models : : sparse : : Model < double > >  model ,  std : : vector < double >  const &  choiceValues ,  std : : shared_ptr < storm : : logic : : ShieldExpression  const >  const &  shieldingExpression ,  storm : : OptimizationDirection  optimizationDirection ,  storm : : storage : : BitVector  relevantStates ,  boost : : optional < storm : : storage : : BitVector >  coalitionStates ) ;  
			
		
	
		
			
				
					# ifdef STORM_HAVE_CARL 
  
			
		
	
		
			
				
					        template  void  createShield < storm : : RationalNumber ,  typename  storm : : storage : : SparseMatrix < storm : : RationalNumber > : : index_type > ( std : : shared_ptr < storm : : models : : sparse : : Model < storm : : RationalNumber > >  model ,  std : : vector < storm : : RationalNumber >  const &  choiceValues ,  std : : shared_ptr < storm : : logic : : ShieldExpression  const >  const &  shieldingExpression ,  storm : : OptimizationDirection  optimizationDirection ,  storm : : storage : : BitVector  relevantStates ,  boost : : optional < storm : : storage : : BitVector >  coalitionStates ) ;  
			
		
	
		
			
				
					        template  std : : unique_ptr < tempest : : shields : : AbstractShield < storm : : RationalNumber ,  typename  storm : : storage : : SparseMatrix < storm : : RationalNumber > : : index_type > >  createShieldTest < storm : : RationalNumber ,  typename  storm : : storage : : SparseMatrix < storm : : RationalNumber > : : index_type > ( std : : shared_ptr < storm : : models : : sparse : : Model < storm : : RationalNumber > >  model ,  std : : vector < storm : : RationalNumber >  const &  choiceValues ,  std : : shared_ptr < storm : : logic : : ShieldExpression  const >  const &  shieldingExpression ,  storm : : OptimizationDirection  optimizationDirection ,  storm : : storage : : BitVector  relevantStates ,  boost : : optional < storm : : storage : : BitVector >  coalitionStates ) ;  
			
		
	
		
			
				
					         
			
		
	
		
			
				
					        template  void  createQuantitativeShield < storm : : RationalNumber ,  typename  storm : : storage : : SparseMatrix < storm : : RationalNumber > : : index_type > ( std : : shared_ptr < storm : : models : : sparse : : Model < storm : : RationalNumber > >  model ,  std : : vector < storm : : RationalNumber >  const &  choiceValues ,  std : : shared_ptr < storm : : logic : : ShieldExpression  const >  const &  shieldingExpression ,  storm : : OptimizationDirection  optimizationDirection ,  storm : : storage : : BitVector  relevantStates ,  boost : : optional < storm : : storage : : BitVector >  coalitionStates ) ;  
			
		
	
		
			
				
					# endif 
  
			
		
	
		
			
				
					    }