@ -55,6 +55,10 @@ namespace storm { 
			
		
	
		
			
				
					            return  result ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					         
			
		
	
		
			
				
					        Dd < DdType : : CUDD >  Dd < DdType : : CUDD > : : operator - ( )  const  {  
			
		
	
		
			
				
					            return  this - > getDdManager ( ) - > getZero ( )  -  * this ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					         
			
		
	
		
			
				
					        Dd < DdType : : CUDD > &  Dd < DdType : : CUDD > : : operator - = ( Dd < DdType : : CUDD >  const &  other )  {  
			
		
	
		
			
				
					            this - > cuddAdd  - =  other . getCuddAdd ( ) ;  
			
		
	
		
			
				
					             
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -85,6 +89,12 @@ namespace storm { 
			
		
	
		
			
				
					            return  result ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					         
			
		
	
		
			
				
					        Dd < DdType : : CUDD >  Dd < DdType : : CUDD > : : logicalOr ( Dd < DdType : : CUDD >  const &  other )  const  {  
			
		
	
		
			
				
					            std : : set < std : : string >  metaVariableNames ( this - > getContainedMetaVariableNames ( ) ) ;  
			
		
	
		
			
				
					            metaVariableNames . insert ( other . getContainedMetaVariableNames ( ) . begin ( ) ,  other . getContainedMetaVariableNames ( ) . end ( ) ) ;  
			
		
	
		
			
				
					            return  Dd < DdType : : CUDD > ( this - > getDdManager ( ) ,  this - > getCuddAdd ( ) . Or ( other . getCuddAdd ( ) ) ,  metaVariableNames ) ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					         
			
		
	
		
			
				
					        Dd < DdType : : CUDD > &  Dd < DdType : : CUDD > : : complement ( )  {  
			
		
	
		
			
				
					            this - > cuddAdd  =  ~ this - > cuddAdd ;  
			
		
	
		
			
				
					            return  * this ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -230,7 +240,7 @@ namespace storm { 
			
		
	
		
			
				
					            this - > cuddAdd  =  this - > cuddAdd . SwapVariables ( from ,  to ) ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					         
			
		
	
		
			
				
					        Dd < DdType : : CUDD >  Dd < DdType : : CUDD > : : multiplyMatrix ( Dd < DdType : : CUDD >  const &  otherMatrix ,  std : : set < std : : string >  const &  summationMetaVariableNames )  {  
			
		
	
		
			
				
					        Dd < DdType : : CUDD >  Dd < DdType : : CUDD > : : multiplyMatrix ( Dd < DdType : : CUDD >  const &  otherMatrix ,  std : : set < std : : string >  const &  summationMetaVariableNames )  const  {  
			
		
	
		
			
				
					            std : : vector < ADD >  summationDdVariables ;  
			
		
	
		
			
				
					             
			
		
	
		
			
				
					            // Create the CUDD summation variables.
  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -358,9 +368,32 @@ namespace storm { 
			
		
	
		
			
				
								if  ( filename . empty ( ) )  {  
			
		
	
		
			
				
									this - > getDdManager ( ) - > getCuddManager ( ) . DumpDot ( cuddAddVector ) ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                // Build the name input of the DD.
  
			
		
	
		
			
				
					                std : : vector < char * >  ddNames ;  
			
		
	
		
			
				
					                std : : string  ddName ( " f " ) ;  
			
		
	
		
			
				
					                ddNames . push_back ( new  char [ ddName . size ( )  +  1 ] ) ;  
			
		
	
		
			
				
					                memcpy ( ddNames . back ( ) ,  ddName . c_str ( ) ,  2 ) ;  
			
		
	
		
			
				
					                 
			
		
	
		
			
				
					                // Now build the variables names.
  
			
		
	
		
			
				
					                std : : vector < std : : string >  ddVariableNamesAsStrings  =  this - > getDdManager ( ) - > getDdVariableNames ( ) ;  
			
		
	
		
			
				
					                std : : vector < char * >  ddVariableNames ;  
			
		
	
		
			
				
					                for  ( auto  const &  element  :  ddVariableNamesAsStrings )  {  
			
		
	
		
			
				
					                    ddVariableNames . push_back ( new  char [ element . size ( )  +  1 ] ) ;  
			
		
	
		
			
				
					                    memcpy ( ddVariableNames . back ( ) ,  element . c_str ( ) ,  element . size ( )  +  1 ) ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					                 
			
		
	
		
			
				
					                // Open the file, dump the DD and close it again.
  
			
		
	
		
			
				
					                FILE *  filePointer  =  fopen ( filename . c_str ( )  ,  " w " ) ;  
			
		
	
		
			
				
									this - > getDdManager ( ) - > getCuddManager ( ) . DumpDot ( cuddAddVector ,  nullptr ,  nullptr ,  filePointer ) ;  
			
		
	
		
			
				
									this - > getDdManager ( ) - > getCuddManager ( ) . DumpDot ( cuddAddVector ,  & ddVariableNames [ 0 ] ,  & ddNames [ 0 ] ,  filePointer ) ;  
			
		
	
		
			
				
					                fclose ( filePointer ) ;  
			
		
	
		
			
				
					                 
			
		
	
		
			
				
					                // Finally, delete the names.
  
			
		
	
		
			
				
					                for  ( char *  element  :  ddNames )  {  
			
		
	
		
			
				
					                    delete  element ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					                for  ( char *  element  :  ddVariableNames )  {  
			
		
	
		
			
				
					                    delete  element ;  
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }