@ -2,6 +2,11 @@
# include "storm/storage/expressions/Expressions.h"
# include "storm/storage/expressions/Expressions.h"
# include "storm/adapters/CarlAdapter.h"
# include "storm/utility/macros.h"
# include "storm/exceptions/NotSupportedException.h"
namespace storm {
namespace storm {
namespace expressions {
namespace expressions {
@ -251,6 +256,7 @@ namespace storm {
}
}
boost : : any ToCppVisitor : : visit ( UnaryNumericalFunctionExpression const & expression , boost : : any const & data ) {
boost : : any ToCppVisitor : : visit ( UnaryNumericalFunctionExpression const & expression , boost : : any const & data ) {
ToCppTranslationOptions const & options = boost : : any_cast < ToCppTranslationOptions const & > ( data ) ;
switch ( expression . getOperatorType ( ) ) {
switch ( expression . getOperatorType ( ) ) {
case UnaryNumericalFunctionExpression : : OperatorType : : Minus :
case UnaryNumericalFunctionExpression : : OperatorType : : Minus :
stream < < " -( " ;
stream < < " -( " ;
@ -258,12 +264,24 @@ namespace storm {
stream < < " ) " ;
stream < < " ) " ;
break ;
break ;
case UnaryNumericalFunctionExpression : : OperatorType : : Floor :
case UnaryNumericalFunctionExpression : : OperatorType : : Floor :
stream < < " std::floor( " ;
STORM_LOG_THROW ( options . getMode ( ) ! = ToCppTranslationMode : : CastRationalFunction , storm : : exceptions : : NotSupportedException , " Floor is not supported by rational functions. " ) ;
if ( options . getMode ( ) ! = ToCppTranslationMode : : CastRationalNumber ) {
stream < < " std::floor " ;
} else {
stream < < " carl::floor " ;
}
stream < < " ( " ;
expression . getOperand ( ) - > accept ( * this , data ) ;
expression . getOperand ( ) - > accept ( * this , data ) ;
stream < < " ) " ;
stream < < " ) " ;
break ;
break ;
case UnaryNumericalFunctionExpression : : OperatorType : : Ceil :
case UnaryNumericalFunctionExpression : : OperatorType : : Ceil :
stream < < " std::ceil( " ;
STORM_LOG_THROW ( options . getMode ( ) ! = ToCppTranslationMode : : CastRationalFunction , storm : : exceptions : : NotSupportedException , " Ceil is not supported by rational functions. " ) ;
if ( options . getMode ( ) ! = ToCppTranslationMode : : CastRationalNumber ) {
stream < < " std::ceil " ;
} else {
stream < < " carl::ceil " ;
}
stream < < " ( " ;
expression . getOperand ( ) - > accept ( * this , data ) ;
expression . getOperand ( ) - > accept ( * this , data ) ;
stream < < " ) " ;
stream < < " ) " ;
break ;
break ;
@ -299,7 +317,7 @@ namespace storm {
ToCppTranslationOptions const & options = boost : : any_cast < ToCppTranslationOptions const & > ( data ) ;
ToCppTranslationOptions const & options = boost : : any_cast < ToCppTranslationOptions const & > ( data ) ;
switch ( options . getMode ( ) ) {
switch ( options . getMode ( ) ) {
case ToCppTranslationMode : : KeepType :
case ToCppTranslationMode : : KeepType :
stream < < expression . getValueAsDouble ( ) ;
stream < < " (static_cast<double>( " < < carl : : getNum ( expression . getValue ( ) ) < < " )/carl::getDenom(expression.getValue())) " ;
break ;
break ;
case ToCppTranslationMode : : CastDouble :
case ToCppTranslationMode : : CastDouble :
stream < < " static_cast<double>( " < < expression . getValueAsDouble ( ) < < " ) " ;
stream < < " static_cast<double>( " < < expression . getValueAsDouble ( ) < < " ) " ;