#ifndef ALLOWEARLYTERMINATIONCONDITION_H #define ALLOWEARLYTERMINATIONCONDITION_H #include <vector> #include "src/storage/BitVector.h" namespace storm { namespace solver { template<typename ValueType> class AllowEarlyTerminationCondition { public: virtual bool terminateNow(std::vector<ValueType> const& currentValues) const = 0; }; template<typename ValueType> class NoEarlyTerminationCondition : public AllowEarlyTerminationCondition<ValueType> { public: bool terminateNow(std::vector<ValueType> const& currentValues) const { return false; } }; template<typename ValueType> class TerminateAfterFilteredSumPassesThresholdValue : public AllowEarlyTerminationCondition<ValueType> { public: TerminateAfterFilteredSumPassesThresholdValue(storm::storage::BitVector const& filter, ValueType threshold, bool terminateAbove); bool terminateNow(std::vector<ValueType> const& currentValues) const; protected: ValueType terminationThreshold; storm::storage::BitVector filter; bool terminateIfAboveThreshold; }; template<typename ValueType> class TerminateAfterFilteredExtremumPassesThresholdValue : public AllowEarlyTerminationCondition<ValueType>{ public: TerminateAfterFilteredExtremumPassesThresholdValue(storm::storage::BitVector const& filter, ValueType threshold, bool terminateAbove, bool useMinimum); bool terminateNow(std::vector<ValueType> const& currentValue) const; protected: ValueType terminationThreshold; storm::storage::BitVector filter; bool terminateIfAboveThreshold; bool useMinimumAsExtremum; }; } } #endif /* ALLOWEARLYTERMINATIONCONDITION_H */