@ -349,27 +349,32 @@ namespace storm {
}
if ( propertyStructure . count ( " step-bounds " ) > 0 ) {
storm : : jani : : PropertyInterval pi = parsePropertyInterval ( propertyStructure . at ( " step-bounds " ) ) ;
STORM_LOG_THROW ( pi . hasUpperBound ( ) , storm : : exceptions : : NotSupportedException , " Storm only supports step-bounded until with an upper bound " ) ;
if ( pi . hasLowerBound ( ) ) {
STORM_LOG_THROW ( pi . lowerBound . evaluateAsInt ( ) = = 0 , storm : : exceptions : : NotSupportedException , " Storm only supports step-bounded until without a (non-trivial) lower-bound " ) ;
boost : : optional < storm : : logic : : TimeBound > lowerBound , upperBound ;
if ( pi . hasLowerBound ( ) ) {
int64_t lowerBoundInt = pi . lowerBound . evaluateAsInt ( ) ;
STORM_LOG_THROW ( lowerBoundInt > = 0 , storm : : exceptions : : InvalidJaniException , " Step-bounds cannot be negative " ) ;
lowerBound = storm : : logic : : TimeBound ( pi . lowerBoundStrict , pi . lowerBound ) ;
}
int64_t upperBound = pi . upperBound . evaluateAsInt ( ) ;
if ( pi . upperBoundStrict ) {
upperBound - - ;
if ( pi . hasUpperBound ( ) ) {
int64_t upperBoundInt = pi . upperBound . evaluateAsInt ( ) ;
STORM_LOG_THROW ( upperBoundInt > = 0 , storm : : exceptions : : InvalidJaniException , " Step-bounds cannot be negative " ) ;
upperBound = storm : : logic : : TimeBound ( pi . upperBoundStrict , pi . upperBound ) ;
}
STORM_LOG_THROW ( upperBound > = 0 , storm : : exceptions : : InvalidJaniException , " Step-bounds cannot be negative " ) ;
return std : : make_shared < storm : : logic : : BoundedUntilFormula const > ( args [ 0 ] , args [ 1 ] , storm : : logic : : TimeBound ( pi . lowerBoundStrict , pi . lowerBound ) , storm : : logic : : TimeBound ( pi . upperBoundStrict , pi . upperBound ) , storm : : logic : : TimeBoundReference ( storm : : logic : : TimeBoundType : : Steps ) ) ;
return std : : make_shared < storm : : logic : : BoundedUntilFormula const > ( args [ 0 ] , args [ 1 ] , lowerBound , upperBound , storm : : logic : : TimeBoundReference ( storm : : logic : : TimeBoundType : : Steps ) ) ;
} else if ( propertyStructure . count ( " time-bounds " ) > 0 ) {
storm : : jani : : PropertyInterval pi = parsePropertyInterval ( propertyStructure . at ( " time-bounds " ) ) ;
STORM_LOG_THROW ( pi . hasUpperBound ( ) , storm : : exceptions : : NotSupportedException , " Storm only supports time-bounded until with an upper bound. " ) ;
double lowerBound = 0.0 ;
if ( pi . hasLowerBound ( ) ) {
lowerBound = pi . lowerBound . evaluateAsDouble ( ) ;
boost : : optional < storm : : logic : : TimeBound > lowerBound , upperBound ;
if ( pi . hasLowerBound ( ) ) {
double lowerBoundDouble = pi . lowerBound . evaluateAsInt ( ) ;
STORM_LOG_THROW ( lowerBoundDouble > = 0 , storm : : exceptions : : InvalidJaniException , " time-bounds cannot be negative " ) ;
lowerBound = storm : : logic : : TimeBound ( pi . lowerBoundStrict , pi . lowerBound ) ;
}
double upperBound = pi . upperBound . evaluateAsDouble ( ) ;
STORM_LOG_THROW ( lowerBound > = 0 , storm : : exceptions : : InvalidJaniException , " (Lower) time-bounds cannot be negative " ) ;
STORM_LOG_THROW ( upperBound > = 0 , storm : : exceptions : : InvalidJaniException , " (Upper) time-bounds cannot be negative " ) ;
return std : : make_shared < storm : : logic : : BoundedUntilFormula const > ( args [ 0 ] , args [ 1 ] , storm : : logic : : TimeBound ( pi . lowerBoundStrict , pi . lowerBound ) , storm : : logic : : TimeBound ( pi . upperBoundStrict , pi . upperBound ) , storm : : logic : : TimeBoundReference ( storm : : logic : : TimeBoundType : : Time ) ) ;
if ( pi . hasUpperBound ( ) ) {
double upperBoundDouble = pi . upperBound . evaluateAsInt ( ) ;
STORM_LOG_THROW ( upperBoundDouble > = 0 , storm : : exceptions : : InvalidJaniException , " time-bounds cannot be negative " ) ;
upperBound = storm : : logic : : TimeBound ( pi . upperBoundStrict , pi . upperBound ) ;
}
return std : : make_shared < storm : : logic : : BoundedUntilFormula const > ( args [ 0 ] , args [ 1 ] , lowerBound , upperBound , storm : : logic : : TimeBoundReference ( storm : : logic : : TimeBoundType : : Time ) ) ;
} else if ( propertyStructure . count ( " reward-bounds " ) > 0 ) {
std : : vector < boost : : optional < storm : : logic : : TimeBound > > lowerBounds ;