#ifndef STORM_UTILITY_CONSTANTSCOMPARATOR_H_ #define STORM_UTILITY_CONSTANTSCOMPARATOR_H_ #include "src/adapters/CarlAdapter.h" namespace storm { namespace utility { // A class that can be used for comparing constants. template class ConstantsComparator { public: // This needs to be in here, otherwise the template specializations are not used properly. ConstantsComparator() = default; bool isOne(ValueType const& value) const; bool isZero(ValueType const& value) const; bool isEqual(ValueType const& value1, ValueType const& value2) const; bool isConstant(ValueType const& value) const; bool isInfinity(ValueType const& value) const; bool isLess(ValueType const& value1, ValueType const& value2) const; }; // For floats we specialize this class and consider the comparison modulo some predefined precision. template<> class ConstantsComparator { public: ConstantsComparator(); ConstantsComparator(float precision); bool isOne(float const& value) const; bool isZero(float const& value) const; bool isEqual(float const& value1, float const& value2) const; bool isConstant(float const& value) const; bool isInfinity(float const& value) const; bool isLess(float const& value1, float const& value2) const; private: // The precision used for comparisons. float precision; }; // For doubles we specialize this class and consider the comparison modulo some predefined precision. template<> class ConstantsComparator { public: ConstantsComparator(); ConstantsComparator(double precision); bool isOne(double const& value) const; bool isZero(double const& value) const; bool isInfinity(double const& value) const; bool isEqual(double const& value1, double const& value2) const; bool isConstant(double const& value) const; bool isLess(double const& value1, double const& value2) const; private: // The precision used for comparisons. double precision; }; } } #endif /* STORM_UTILITY_CONSTANTSCOMPARATOR_H_ */