#ifndef STORM_MODELCHECKER_HINTS_EXPLICITMODELCHECKERHINT_H #define STORM_MODELCHECKER_HINTS_EXPLICITMODELCHECKERHINT_H #include #include #include "storm/modelchecker/hints/ModelCheckerHint.h" #include "storm/storage/Scheduler.h" namespace storm { namespace modelchecker { /*! * This class contains information that might accelerate the model checking process. * @note The model checker has to make sure whether a given hint is actually applicable and thus a hint might be ignored. */ template class ExplicitModelCheckerHint : public ModelCheckerHint { public: ExplicitModelCheckerHint() = default; ExplicitModelCheckerHint(ExplicitModelCheckerHint const& other) = default; ExplicitModelCheckerHint(ExplicitModelCheckerHint&& other) = default; // Returns true iff this hint does not contain any information virtual bool isEmpty() const override; // Returns true iff this is an explicit model checker hint virtual bool isExplicitModelCheckerHint() const override; bool hasResultHint() const; std::vector const& getResultHint() const; std::vector& getResultHint(); void setResultHint(boost::optional> const& resultHint); void setResultHint(boost::optional>&& resultHint); // Set whether only the maybestates need to be computed, i.e., skips the qualitative check. // The result for non-maybe states is taken from the result hint. // Hence, this option may only be enabled iff a resultHint and a set of maybestates are given. bool getComputeOnlyMaybeStates() const; void setComputeOnlyMaybeStates(bool value); bool hasMaybeStates() const; storm::storage::BitVector const& getMaybeStates() const; storm::storage::BitVector& getMaybeStates(); void setMaybeStates(storm::storage::BitVector const& maybeStates); void setMaybeStates(storm::storage::BitVector&& maybeStates); bool hasSchedulerHint() const; storm::storage::Scheduler const& getSchedulerHint() const; storm::storage::Scheduler& getSchedulerHint(); void setSchedulerHint(boost::optional> const& schedulerHint); void setSchedulerHint(boost::optional>&& schedulerHint); // If set, it is assumed that there are no end components that consist only of maybestates. // May only be enabled iff maybestates are given. bool getNoEndComponentsInMaybeStates() const; void setNoEndComponentsInMaybeStates(bool value); private: boost::optional> resultHint; boost::optional> schedulerHint; bool computeOnlyMaybeStates; boost::optional maybeStates; bool noEndComponentsInMaybeStates; }; } } #endif /* STORM_MODELCHECKER_HINTS_EXPLICITMODELCHECKERHINT_H */