From b1498ef0bb61056273d0f697f166d9d84e70af6e Mon Sep 17 00:00:00 2001 From: gereon <gereon.kremer@rwth-aachen.de> Date: Fri, 22 Feb 2013 15:11:36 +0100 Subject: [PATCH] moved model from specific model checkers to AbstractModelChecker --- src/modelchecker/AbstractModelChecker.h | 23 +++++++++++++++++++ src/modelchecker/DtmcPrctlModelChecker.h | 21 +++++++++++------ src/modelchecker/GmmxxDtmcPrctlModelChecker.h | 6 +++-- src/modelchecker/MdpPrctlModelChecker.h | 23 +++++++++++-------- 4 files changed, 55 insertions(+), 18 deletions(-) diff --git a/src/modelchecker/AbstractModelChecker.h b/src/modelchecker/AbstractModelChecker.h index 244b35df1..698aaa466 100644 --- a/src/modelchecker/AbstractModelChecker.h +++ b/src/modelchecker/AbstractModelChecker.h @@ -15,6 +15,7 @@ template <class Type> class AbstractModelChecker; #include "src/exceptions/InvalidPropertyException.h" #include "src/formula/Formulas.h" #include "src/storage/BitVector.h" +#include "src/models/AbstractModel.h" #include <iostream> @@ -50,6 +51,15 @@ class AbstractModelChecker : public virtual storm::formula::IInstantaneousRewardModelChecker<Type> { public: + explicit AbstractModelChecker(storm::models::AbstractModel<Type>& model) + : model(model) { + // Nothing to do here... + } + + explicit AbstractModelChecker(AbstractModelChecker<Type>* modelChecker) + : model(modelChecker->model) { + } + template <template <class T> class Target> const Target<Type>* as() const { try { @@ -154,6 +164,19 @@ public: delete quantitativeResult; return result; } + + void setModel(storm::models::AbstractModel<Type>& model) { + this->model = model; + } + + template <class Model> + Model& getModel() const { + return *dynamic_cast<Model*>(&this->model); + } + +private: + storm::models::AbstractModel<Type>& model; + }; } //namespace modelChecker diff --git a/src/modelchecker/DtmcPrctlModelChecker.h b/src/modelchecker/DtmcPrctlModelChecker.h index 61a9b2ffd..a31caac13 100644 --- a/src/modelchecker/DtmcPrctlModelChecker.h +++ b/src/modelchecker/DtmcPrctlModelChecker.h @@ -39,14 +39,22 @@ namespace modelChecker { */ template<class Type> class DtmcPrctlModelChecker : - public virtual AbstractModelChecker<Type> { + public AbstractModelChecker<Type> { + +private: + /*! + * Make default constructor private. + */ + explicit DtmcPrctlModelChecker() {} + public: /*! * Constructor * * @param model The dtmc model which is checked. */ - explicit DtmcPrctlModelChecker(storm::models::Dtmc<Type>& model) : model(model) { + explicit DtmcPrctlModelChecker(storm::models::Dtmc<Type>& model) + : AbstractModelChecker<Type>(model) { // Intentionally left empty. } @@ -55,8 +63,7 @@ public: * * @param modelChecker The model checker that is copied. */ - explicit DtmcPrctlModelChecker(const storm::modelChecker::DtmcPrctlModelChecker<Type>* modelChecker) { - this->model = new storm::models::Dtmc<Type>(modelChecker->getModel()); + explicit DtmcPrctlModelChecker(const storm::modelChecker::DtmcPrctlModelChecker<Type>* modelChecker) : AbstractModelChecker<Type>(modelChecker) { } /*! @@ -70,7 +77,7 @@ public: * @returns A reference to the dtmc of the model checker. */ storm::models::Dtmc<Type>& getModel() const { - return this->model; + return AbstractModelChecker<Type>::template getModel<storm::models::Dtmc<Type>>(); } /*! @@ -78,7 +85,7 @@ public: * @param model */ void setModel(storm::models::Dtmc<Type>& model) { - this->model = &model; + AbstractModelChecker<Type>::setModel(model); } /*! @@ -268,7 +275,7 @@ public: virtual std::vector<Type>* checkReachabilityReward(const storm::formula::ReachabilityReward<Type>& formula, bool qualitative) const = 0; private: - storm::models::Dtmc<Type>& model; +// storm::models::Dtmc<Type>& model; }; } //namespace modelChecker diff --git a/src/modelchecker/GmmxxDtmcPrctlModelChecker.h b/src/modelchecker/GmmxxDtmcPrctlModelChecker.h index fdd246843..d4aeef764 100644 --- a/src/modelchecker/GmmxxDtmcPrctlModelChecker.h +++ b/src/modelchecker/GmmxxDtmcPrctlModelChecker.h @@ -36,10 +36,12 @@ namespace modelChecker { * A model checking engine that makes use of the gmm++ backend. */ template <class Type> -class GmmxxDtmcPrctlModelChecker : public DtmcPrctlModelChecker<Type> { +class GmmxxDtmcPrctlModelChecker + : public DtmcPrctlModelChecker<Type> { public: - explicit GmmxxDtmcPrctlModelChecker(storm::models::Dtmc<Type>& dtmc) : DtmcPrctlModelChecker<Type>(dtmc) { + explicit GmmxxDtmcPrctlModelChecker(storm::models::Dtmc<Type>& dtmc) + : DtmcPrctlModelChecker<Type>(dtmc) { // Intentionally left empty. } diff --git a/src/modelchecker/MdpPrctlModelChecker.h b/src/modelchecker/MdpPrctlModelChecker.h index c2fad0b21..319efd12a 100644 --- a/src/modelchecker/MdpPrctlModelChecker.h +++ b/src/modelchecker/MdpPrctlModelChecker.h @@ -40,15 +40,22 @@ namespace modelChecker { */ template<class Type> class MdpPrctlModelChecker : - public virtual AbstractModelChecker<Type> { + public AbstractModelChecker<Type> { + +private: + /*! + * Make default constructor private. + */ + explicit MdpPrctlModelChecker() {} + public: /*! * Constructor * * @param model The dtmc model which is checked. */ - explicit MdpPrctlModelChecker(storm::models::Mdp<Type>& model) : model(model), minimumOperatorStack() { - + explicit MdpPrctlModelChecker(storm::models::Mdp<Type>& model) + : AbstractModelChecker<Type>(model), minimumOperatorStack() { } /*! @@ -56,7 +63,8 @@ public: * * @param modelChecker The model checker that is copied. */ - explicit MdpPrctlModelChecker(const storm::modelChecker::MdpPrctlModelChecker<Type>* modelChecker) : model(new storm::models::Mdp<Type>(modelChecker->getModel())), minimumOperatorStack() { + explicit MdpPrctlModelChecker(const storm::modelChecker::MdpPrctlModelChecker<Type>* modelChecker) + : AbstractModelChecker<Type>(modelChecker), minimumOperatorStack() { } @@ -71,7 +79,7 @@ public: * @returns A reference to the dtmc of the model checker. */ storm::models::Mdp<Type>& getModel() const { - return this->model; + return AbstractModelChecker<Type>::template getModel<storm::models::Mdp<Type>>(); } /*! @@ -79,7 +87,7 @@ public: * @param model */ void setModel(storm::models::Mdp<Type>& model) { - this->model = &model; + AbstractModelChecker<Type>::setModel(model); } /*! @@ -273,9 +281,6 @@ public: */ virtual std::vector<Type>* checkReachabilityReward(const storm::formula::ReachabilityReward<Type>& formula, bool qualitative) const = 0; -private: - storm::models::Mdp<Type>& model; - protected: mutable std::stack<bool> minimumOperatorStack; };