/* * AbstractModelChecker.h * * Created on: 22.10.2012 * Author: Thomas Heinemann */ #ifndef STORM_MODELCHECKER_ABSTRACTMODELCHECKER_H_ #define STORM_MODELCHECKER_ABSTRACTMODELCHECKER_H_ // Forward declaration of abstract model checker class needed by the formula classes. namespace storm { namespace modelchecker { namespace prctl { template class AbstractModelChecker; } } } #include #include "src/exceptions/InvalidPropertyException.h" #include "src/formula/Prctl.h" #include "src/storage/BitVector.h" #include "src/models/AbstractModel.h" #include "src/settings/Settings.h" #include "log4cplus/logger.h" #include "log4cplus/loggingmacros.h" #include extern log4cplus::Logger logger; namespace storm { namespace modelchecker { namespace prctl { /*! * @brief * (Abstract) interface for all model checker classes. * * This class provides basic functions that are common to all model checkers (i.e. subclasses). It mainly declares * abstract methods that are implemented in the concrete subclasses, but also covers checking procedures that are common * to all model checkers for state-based models. */ template class AbstractModelChecker : // A list of interfaces the model checker supports. Typically, for each of the interfaces, a check method needs to // be implemented that performs the corresponding check. public virtual storm::property::prctl::IApModelChecker, public virtual storm::property::prctl::IAndModelChecker, public virtual storm::property::prctl::IOrModelChecker, public virtual storm::property::prctl::INotModelChecker, public virtual storm::property::prctl::IUntilModelChecker, public virtual storm::property::prctl::IEventuallyModelChecker, public virtual storm::property::prctl::IGloballyModelChecker, public virtual storm::property::prctl::INextModelChecker, public virtual storm::property::prctl::IBoundedUntilModelChecker, public virtual storm::property::prctl::IBoundedEventuallyModelChecker, public virtual storm::property::prctl::IProbabilisticBoundOperatorModelChecker, public virtual storm::property::prctl::IRewardBoundOperatorModelChecker, public virtual storm::property::prctl::IReachabilityRewardModelChecker, public virtual storm::property::prctl::ICumulativeRewardModelChecker, public virtual storm::property::prctl::IInstantaneousRewardModelChecker { public: /*! * Constructs an AbstractModelChecker with the given model. */ explicit AbstractModelChecker(storm::models::AbstractModel const& model) : model(model){ // Intentionally left empty. } /*! * Copy constructs an AbstractModelChecker from the given model checker. In particular, this means that the newly * constructed model checker will have the model of the given model checker as its associated model. */ explicit AbstractModelChecker(AbstractModelChecker const& modelchecker) : model(modelchecker.model) { // Intentionally left empty. } /*! * Virtual destructor. Needs to be virtual, because this class has virtual methods. */ virtual ~AbstractModelChecker() { // Intentionally left empty. } /*! * Returns a pointer to the model checker object that is of the requested type as given by the template parameters. * * @return A pointer to the model checker object that is of the requested type as given by the template parameters. * If the model checker is not of the requested type, type casting will fail and result in an exception. */ template