@ -34,125 +34,297 @@ namespace storm {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . Plus ( other . sylvanMtbdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : operator + ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
return InternalAdd < DdType : : Sylvan , storm : : RationalFunction > ( ddManager , this - > sylvanMtbdd . PlusRF ( other . sylvanMtbdd ) ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > & InternalAdd < DdType : : Sylvan , ValueType > : : operator + = ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) {
this - > sylvanMtbdd = this - > sylvanMtbdd . Plus ( other . sylvanMtbdd ) ;
return * this ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > & InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : operator + = ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) {
this - > sylvanMtbdd = this - > sylvanMtbdd . PlusRF ( other . sylvanMtbdd ) ;
return * this ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : operator * ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . Times ( other . sylvanMtbdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : operator * ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
return InternalAdd < DdType : : Sylvan , storm : : RationalFunction > ( ddManager , this - > sylvanMtbdd . TimesRF ( other . sylvanMtbdd ) ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > & InternalAdd < DdType : : Sylvan , ValueType > : : operator * = ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) {
this - > sylvanMtbdd = this - > sylvanMtbdd . Times ( other . sylvanMtbdd ) ;
return * this ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > & InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : operator * = ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) {
this - > sylvanMtbdd = this - > sylvanMtbdd . TimesRF ( other . sylvanMtbdd ) ;
return * this ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : operator - ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . Minus ( other . sylvanMtbdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : operator - ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
return InternalAdd < DdType : : Sylvan , storm : : RationalFunction > ( ddManager , this - > sylvanMtbdd . MinusRF ( other . sylvanMtbdd ) ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > & InternalAdd < DdType : : Sylvan , ValueType > : : operator - = ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) {
this - > sylvanMtbdd = this - > sylvanMtbdd . Minus ( other . sylvanMtbdd ) ;
return * this ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > & InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : operator - = ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) {
this - > sylvanMtbdd = this - > sylvanMtbdd . MinusRF ( other . sylvanMtbdd ) ;
return * this ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : operator / ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . Divide ( other . sylvanMtbdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : operator / ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
return InternalAdd < DdType : : Sylvan , storm : : RationalFunction > ( ddManager , this - > sylvanMtbdd . DivideRF ( other . sylvanMtbdd ) ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > & InternalAdd < DdType : : Sylvan , ValueType > : : operator / = ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) {
this - > sylvanMtbdd = this - > sylvanMtbdd . Divide ( other . sylvanMtbdd ) ;
return * this ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > & InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : operator / = ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) {
this - > sylvanMtbdd = this - > sylvanMtbdd . DivideRF ( other . sylvanMtbdd ) ;
return * this ;
}
# endif
template < typename ValueType >
InternalBdd < DdType : : Sylvan > InternalAdd < DdType : : Sylvan , ValueType > : : equals ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return InternalBdd < DdType : : Sylvan > ( ddManager , this - > sylvanMtbdd . Equals ( other . sylvanMtbdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalBdd < DdType : : Sylvan > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : equals ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: Equals " ) ;
}
# endif
template < typename ValueType >
InternalBdd < DdType : : Sylvan > InternalAdd < DdType : : Sylvan , ValueType > : : notEquals ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return ! this - > equals ( other ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalBdd < DdType : : Sylvan > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : notEquals ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: Not Equals " ) ;
}
# endif
template < typename ValueType >
InternalBdd < DdType : : Sylvan > InternalAdd < DdType : : Sylvan , ValueType > : : less ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return InternalBdd < DdType : : Sylvan > ( ddManager , this - > sylvanMtbdd . Less ( other . sylvanMtbdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalBdd < DdType : : Sylvan > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : less ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: Less " ) ;
}
# endif
template < typename ValueType >
InternalBdd < DdType : : Sylvan > InternalAdd < DdType : : Sylvan , ValueType > : : lessOrEqual ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return InternalBdd < DdType : : Sylvan > ( ddManager , this - > sylvanMtbdd . LessOrEqual ( other . sylvanMtbdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalBdd < DdType : : Sylvan > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : lessOrEqual ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: Less or Equal " ) ;
}
# endif
template < typename ValueType >
InternalBdd < DdType : : Sylvan > InternalAdd < DdType : : Sylvan , ValueType > : : greater ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return ! this - > lessOrEqual ( other ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalBdd < DdType : : Sylvan > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : greater ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: Greater " ) ;
}
# endif
template < typename ValueType >
InternalBdd < DdType : : Sylvan > InternalAdd < DdType : : Sylvan , ValueType > : : greaterOrEqual ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return ! this - > less ( other ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalBdd < DdType : : Sylvan > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : greaterOrEqual ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: Greater or Equal " ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : pow ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . Pow ( other . sylvanMtbdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : pow ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: Pow " ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : mod ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . Mod ( other . sylvanMtbdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : mod ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: Mod " ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : logxy ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . Logxy ( other . sylvanMtbdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : logxy ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: logxy " ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : floor ( ) const {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . Floor ( ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : floor ( ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: Floor " ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : ceil ( ) const {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . Ceil ( ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : ceil ( ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: Ceil " ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : minimum ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . Min ( other . sylvanMtbdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : minimum ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: Minimum " ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : maximum ( InternalAdd < DdType : : Sylvan , ValueType > const & other ) const {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . Max ( other . sylvanMtbdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : maximum ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: Maximum " ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : sumAbstract ( InternalBdd < DdType : : Sylvan > const & cube ) const {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . AbstractPlus ( cube . sylvanBdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : sumAbstract ( InternalBdd < DdType : : Sylvan > const & cube ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: sumAbstract " ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : minAbstract ( InternalBdd < DdType : : Sylvan > const & cube ) const {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . AbstractMin ( cube . sylvanBdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : minAbstract ( InternalBdd < DdType : : Sylvan > const & cube ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: minAbstract " ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : maxAbstract ( InternalBdd < DdType : : Sylvan > const & cube ) const {
return InternalAdd < DdType : : Sylvan , ValueType > ( ddManager , this - > sylvanMtbdd . AbstractMax ( cube . sylvanBdd ) ) ;
}
# ifdef STORM_HAVE_CARL
template < >
InternalAdd < DdType : : Sylvan , storm : : RationalFunction > InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : maxAbstract ( InternalBdd < DdType : : Sylvan > const & cube ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: maxAbstract " ) ;
}
# endif
template < typename ValueType >
bool InternalAdd < DdType : : Sylvan , ValueType > : : equalModuloPrecision ( InternalAdd < DdType : : Sylvan , ValueType > const & other , double precision , bool relative ) const {
if ( relative ) {
@ -162,6 +334,13 @@ namespace storm {
}
}
# ifdef STORM_HAVE_CARL
template < >
bool InternalAdd < DdType : : Sylvan , storm : : RationalFunction > : : equalModuloPrecision ( InternalAdd < DdType : : Sylvan , storm : : RationalFunction > const & other , double precision , bool relative ) const {
STORM_LOG_THROW ( false , storm : : exceptions : : NotImplementedException , " Not yet implemented: equalModuloPrecision " ) ;
}
# endif
template < typename ValueType >
InternalAdd < DdType : : Sylvan , ValueType > InternalAdd < DdType : : Sylvan , ValueType > : : swapVariables ( std : : vector < InternalBdd < DdType : : Sylvan > > const & from , std : : vector < InternalBdd < DdType : : Sylvan > > const & to ) const {
std : : vector < uint32_t > fromIndices ;
@ -615,10 +794,9 @@ namespace storm {
template < typename ValueType >
MTBDD InternalAdd < DdType : : Sylvan , ValueType > : : getLeaf ( storm : : RationalFunction const & value ) {
storm_rational_function_ptr_struct helperStruct ;
helperStruct . storm_rational_function = ( void * ) ( & value ) ;
storm_rational_function_ptr ptr = ( storm_rational_function_ptr ) ( & value ) ;
return mtbdd_storm_rational_function ( & hel perS truct ) ;
return mtbdd_storm_rational_function ( ptr ) ;
}
template < typename ValueType >
@ -655,9 +833,9 @@ namespace storm {
STORM_LOG_ASSERT ( mtbdd_gettype ( node ) = = sylvan_storm_rational_function_get_type ( ) , " Expected a storm::RationalFunction value. " ) ;
uint64_t value = mtbdd_getvalue ( node ) ;
storm_rational_function_ptr_struct * hel perStructP tr = ( storm_rational_function_ptr_struct * ) value ;
storm_rational_function_ptr ptr = ( storm_rational_function_ptr ) value ;
storm : : RationalFunction * rationalFunction = ( storm : : RationalFunction * ) ( hel perS tructPtr - > storm_rational_function ) ;
storm : : RationalFunction * rationalFunction = ( storm : : RationalFunction * ) ( ptr ) ;
return negated ? - ( * rationalFunction ) : ( * rationalFunction ) ;
}