Browse Source
BuilderType: Using new canHandle and getSupportedJaniFeatures methods.
tempestpy_adaptions
BuilderType: Using new canHandle and getSupportedJaniFeatures methods.
tempestpy_adaptions
Tim Quatmann
5 years ago
3 changed files with 52 additions and 8 deletions
-
57src/storm/builder/BuilderType.cpp
-
1src/storm/builder/BuilderType.h
-
2src/storm/utility/Engine.cpp
@ -1,23 +1,66 @@ |
|||
#include "storm/builder/BuilderType.h"
|
|||
|
|||
#include "storm/storage/dd/DdType.h"
|
|||
|
|||
#include "storm/storage/jani/ModelFeatures.h"
|
|||
#include "storm/generator/JaniNextStateGenerator.h"
|
|||
#include "storm/generator/PrismNextStateGenerator.h"
|
|||
#include "storm/builder/DdJaniModelBuilder.h"
|
|||
#include "storm/builder/DdPrismModelBuilder.h"
|
|||
#include "storm/builder/jit/ExplicitJitJaniModelBuilder.h"
|
|||
|
|||
#include "storm/utility/macros.h"
|
|||
#include "storm/exceptions/UnexpectedException.h"
|
|||
|
|||
namespace storm { |
|||
namespace builder { |
|||
|
|||
storm::jani::ModelFeatures getSupportedJaniFeatures(BuilderType const& builderType) { |
|||
storm::jani::ModelFeatures features; |
|||
features.add(storm::jani::ModelFeature::DerivedOperators); |
|||
features.add(storm::jani::ModelFeature::StateExitRewards); |
|||
if (builderType == BuilderType::Explicit) { |
|||
features.add(storm::jani::ModelFeature::Arrays); |
|||
// The supported jani features should be independent of the ValueType and Dd type. We just take sylvan and double for all.
|
|||
storm::dd::DdType const ddType = storm::dd::DdType::Sylvan; |
|||
typedef double ValueType; |
|||
switch (builderType) { |
|||
case BuilderType::Explicit: |
|||
return storm::generator::JaniNextStateGenerator<ValueType>::getSupportedJaniFeatures(); |
|||
case BuilderType::Dd: |
|||
return storm::builder::DdJaniModelBuilder<ddType, ValueType>::getSupportedJaniFeatures(); |
|||
case BuilderType::Jit: |
|||
return storm::builder::jit::ExplicitJitJaniModelBuilder<ValueType>::getSupportedJaniFeatures(); |
|||
|
|||
} |
|||
return features; |
|||
STORM_LOG_THROW(false, storm::exceptions::UnexpectedException, "Unexpected builder type."); |
|||
} |
|||
|
|||
template <typename ValueType> |
|||
bool canHandle(BuilderType const& builderType, storm::storage::SymbolicModelDescription const& modelDescription) { |
|||
return true; |
|||
storm::dd::DdType const ddType = storm::dd::DdType::Sylvan; |
|||
if (!modelDescription.hasModel()) { |
|||
// If there is no model to be build, we assume that the task of obtaining a model is either not required or can be accomplished somehow.
|
|||
return true; |
|||
} |
|||
STORM_LOG_THROW(modelDescription.isPrismProgram() || modelDescription.isJaniModel(), storm::exceptions::UnexpectedException, "The model is neither PRISM nor Jani which is not expected."); |
|||
switch (builderType) { |
|||
case BuilderType::Explicit: |
|||
if (modelDescription.isPrismProgram()) { |
|||
return storm::generator::PrismNextStateGenerator<ValueType>::canHandle(modelDescription.asPrismProgram()); |
|||
} else { |
|||
return storm::generator::JaniNextStateGenerator<ValueType>::canHandle(modelDescription.asJaniModel()); |
|||
} |
|||
case BuilderType::Dd: |
|||
if (modelDescription.isPrismProgram()) { |
|||
return storm::builder::DdPrismModelBuilder<ddType, ValueType>::canHandle(modelDescription.asPrismProgram()); |
|||
} else { |
|||
return storm::builder::DdJaniModelBuilder<ddType, ValueType>::canHandle(modelDescription.asJaniModel()); |
|||
} |
|||
case BuilderType::Jit: |
|||
return storm::builder::jit::ExplicitJitJaniModelBuilder<ValueType>::canHandle(modelDescription.asJaniModel()); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
template bool canHandle<double>(BuilderType const& builderType, storm::storage::SymbolicModelDescription const& modelDescription); |
|||
template bool canHandle<storm::RationalNumber>(BuilderType const& builderType, storm::storage::SymbolicModelDescription const& modelDescription); |
|||
|
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue