diff --git a/src/modelChecker/DtmcPrctlModelChecker.cpp b/src/modelChecker/DtmcPrctlModelChecker.cpp index f5a884921..c2d52aa92 100644 --- a/src/modelChecker/DtmcPrctlModelChecker.cpp +++ b/src/modelChecker/DtmcPrctlModelChecker.cpp @@ -6,27 +6,3 @@ */ #include "DtmcPrctlModelChecker.h" - -namespace mrmc { - -namespace modelChecker { - -template -DtmcPrctlModelChecker::DtmcPrctlModelChecker(mrmc::models::Dtmc* dtmc) { - this->dtmc = dtmc; -} - -template -DtmcPrctlModelChecker::~DtmcPrctlModelChecker() { - delete this->dtmc; -} - -template -DtmcPrctlModelChecker::DtmcPrctlModelChecker(mrmc::modelChecker::DtmcPrctlModelChecker* modelChecker) { - this->dtmc = new mrmc::models::Dtmc(modelChecker->getDtmc()); -} - - -} //namespace modelChecker - -} //namespace mrmc diff --git a/src/modelChecker/DtmcPrctlModelChecker.h b/src/modelChecker/DtmcPrctlModelChecker.h index 3061dc75b..edb5fd8a8 100644 --- a/src/modelChecker/DtmcPrctlModelChecker.h +++ b/src/modelChecker/DtmcPrctlModelChecker.h @@ -60,19 +60,25 @@ public: * * @param Dtmc The dtmc model which is checked. */ - explicit DtmcPrctlModelChecker(mrmc::models::Dtmc* Dtmc); + explicit DtmcPrctlModelChecker(mrmc::models::Dtmc* dtmc) { + this->dtmc = dtmc; + } /*! * Copy constructor * * @param modelChecker The model checker that is copied. */ - explicit DtmcPrctlModelChecker(mrmc::modelChecker::DtmcPrctlModelChecker* modelChecker); + explicit DtmcPrctlModelChecker(mrmc::modelChecker::DtmcPrctlModelChecker* modelChecker) { + this->dtmc = new mrmc::models::Dtmc(modelChecker->getDtmc()); + } /*! * Destructor */ - virtual ~DtmcPrctlModelChecker(); + virtual ~DtmcPrctlModelChecker() { + delete this->dtmc; + } /*! * @returns A reference to the dtmc of the model checker. @@ -95,7 +101,9 @@ public: * @param ap A string representing an atomic proposition. * @returns The set of states labeled with the atomic proposition ap. */ - virtual mrmc::storage::BitVector& getStatesLabeledWith(std::string ap) = 0; + virtual mrmc::storage::BitVector* getStatesLabeledWith(std::string ap) { + return dtmc->getLabeledStates(ap); + } /*! * Multiplies the matrix with a given vector; the result again is a vector. @@ -112,7 +120,7 @@ public: * @param formula The state formula to check * @returns The set of states satisfying the formula, represented by a bit vector */ - virtual mrmc::storage::BitVector checkStateFormula(mrmc::formula::PCTLStateFormula* formula) { + virtual mrmc::storage::BitVector checkStateFormula(mrmc::formula::PCTLStateFormula& formula) { return formula->check(this); } @@ -122,7 +130,13 @@ public: * @param formula The And formula to check * @returns The set of states satisfying the formula, represented by a bit vector */ - virtual mrmc::storage::BitVector checkAnd(mrmc::formula::And* formula) = 0; + virtual mrmc::storage::BitVector* checkAnd(mrmc::formula::And& formula) { + mrmc::storage::BitVector* result = check(formula.getLeft()); + mrmc::storage::BitVector* right = check(formula.getRight()); + (*result) &= (*right); + delete right; + return result; + } /*! * The check method for a formula with an AP node as root in its formula tree @@ -130,7 +144,9 @@ public: * @param formula The AP state formula to check * @returns The set of states satisfying the formula, represented by a bit vector */ - virtual mrmc::storage::BitVector checkAP(mrmc::formula::AP* formula) = 0; + virtual mrmc::storage::BitVector* checkAP(mrmc::formula::AP& formula) { + return getStatesLabeledWith(formula.getAP()); + } /*! * The check method for a formula with a Not node as root in its formula tree @@ -138,7 +154,11 @@ public: * @param formula The Not state formula to check * @returns The set of states satisfying the formula, represented by a bit vector */ - virtual mrmc::storage::BitVector checkNot(mrmc::formula::Not* formula) = 0; + virtual mrmc::storage::BitVector* checkNot(mrmc::formula::Not& formula) { + mrmc::storage::BitVector* result = check(formula.getChild()); + result->complement(); + return result; + } /*! * The check method for a state formula with an Or node as root in its formula tree @@ -146,7 +166,13 @@ public: * @param formula The Or state formula to check * @returns The set of states satisfying the formula, represented by a bit vector */ - virtual mrmc::storage::BitVector checkOr(mrmc::formula::Or* formula) = 0; + virtual mrmc::storage::BitVector checkOr(mrmc::formula::Or& formula) { + mrmc::storage::BitVector* result = check(formula.getLeft()); + mrmc::storage::BitVector* right = check(formula.getRight()); + (*result) |= (*right); + delete right; + return result; + } /*! * The check method for a state formula with a probabilistic operator node as root in its formula tree @@ -154,7 +180,7 @@ public: * @param formula The state formula to check * @returns The set of states satisfying the formula, represented by a bit vector */ - virtual mrmc::storage::BitVector checkProbabilisticOperator(mrmc::formula::ProbabilisticOperator* formula) = 0; + virtual mrmc::storage::BitVector checkProbabilisticOperator(mrmc::formula::ProbabilisticOperator& formula); /*! * The check method for a path formula; Will infer the actual type of formula and delegate it @@ -163,7 +189,7 @@ public: * @param formula The path formula to check * @returns for each state the probability that the path formula holds. */ - virtual std::vector checkPathFormula(mrmc::formula::PCTLPathFormula* formula) { + virtual std::vector checkPathFormula(mrmc::formula::PCTLPathFormula& formula) { return formula->check(this); } @@ -173,7 +199,7 @@ public: * @param formula The Bounded Until path formula to check * @returns for each state the probability that the path formula holds. */ - virtual std::vector checkBoundedUntil(mrmc::formula::BoundedUntil* formula) = 0; + virtual std::vector checkBoundedUntil(mrmc::formula::BoundedUntil& formula) = 0; /*! * The check method for a path formula with a Next operator node as root in its formula tree @@ -181,7 +207,7 @@ public: * @param formula The Next path formula to check * @returns for each state the probability that the path formula holds. */ - virtual std::vector checkNext(mrmc::formula::Next* formula) = 0; + virtual std::vector checkNext(mrmc::formula::Next& formula) = 0; /*! * The check method for a path formula with an Until operator node as root in its formula tree @@ -189,7 +215,7 @@ public: * @param formula The Until path formula to check * @returns for each state the probability that the path formula holds. */ - virtual std::vector checkUntil(mrmc::formula::Until* formula) = 0; + virtual std::vector checkUntil(mrmc::formula::Until& formula) = 0; private: mrmc::models::Dtmc* dtmc;