#include "storm/modelchecker/results/ExplicitParetoCurveCheckResult.h" #include "storm/adapters/RationalFunctionAdapter.h" #include "storm/modelchecker/results/ExplicitQualitativeCheckResult.h" #include "storm/utility/macros.h" #include "storm/utility/vector.h" #include "storm/exceptions/InvalidOperationException.h" namespace storm { namespace modelchecker { template ExplicitParetoCurveCheckResult::ExplicitParetoCurveCheckResult() { // Intentionally left empty. } template ExplicitParetoCurveCheckResult::ExplicitParetoCurveCheckResult(storm::storage::sparse::state_type const& state, std::vector::point_type> const& points, typename ParetoCurveCheckResult::polytope_type const& underApproximation, typename ParetoCurveCheckResult::polytope_type const& overApproximation) : ParetoCurveCheckResult(points, underApproximation, overApproximation), state(state) { // Intentionally left empty. } template ExplicitParetoCurveCheckResult::ExplicitParetoCurveCheckResult(storm::storage::sparse::state_type const& state, std::vector::point_type>&& points, typename ParetoCurveCheckResult::polytope_type&& underApproximation, typename ParetoCurveCheckResult::polytope_type&& overApproximation) : ParetoCurveCheckResult(points, underApproximation, overApproximation), state(state) { // Intentionally left empty. } template bool ExplicitParetoCurveCheckResult::isExplicitParetoCurveCheckResult() const { return true; } template bool ExplicitParetoCurveCheckResult::isExplicit() const { return true; } template void ExplicitParetoCurveCheckResult::filter(QualitativeCheckResult const& filter) { STORM_LOG_THROW(filter.isExplicitQualitativeCheckResult(), storm::exceptions::InvalidOperationException, "Cannot filter explicit check result with non-explicit filter."); STORM_LOG_THROW(filter.isResultForAllStates(), storm::exceptions::InvalidOperationException, "Cannot filter check result with non-complete filter."); ExplicitQualitativeCheckResult const& explicitFilter = filter.asExplicitQualitativeCheckResult(); ExplicitQualitativeCheckResult::vector_type const& filterTruthValues = explicitFilter.getTruthValuesVector(); STORM_LOG_THROW(filterTruthValues.getNumberOfSetBits() == 1 && filterTruthValues.get(state), storm::exceptions::InvalidOperationException, "The check result fails to contain some results referred to by the filter."); } template storm::storage::sparse::state_type const& ExplicitParetoCurveCheckResult:: getState() const { return state; } template class ExplicitParetoCurveCheckResult; #ifdef STORM_HAVE_CARL template class ExplicitParetoCurveCheckResult; #endif } }