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