boost/numeric/interval/compare/certain.hpp
/* Boost interval/compare/certain.hpp template implementation file * * Copyright Guillaume Melquiond 2003 * Permission to use, copy, modify, sell, and distribute this software * is hereby granted without fee provided that the above copyright notice * appears in all copies and that both that copyright notice and this * permission notice appear in supporting documentation, * * None of the above authors make any representation about the * suitability of this software for any purpose. It is provided "as * is" without express or implied warranty. * * $Id: certain.hpp,v 1.1 2003/04/24 14:02:49 gmelquio Exp $ */ #ifndef BOOST_NUMERIC_INTERVAL_COMPARE_CERTAIN_HPP #define BOOST_NUMERIC_INTERVAL_COMPARE_CERTAIN_HPP #include <boost/numeric/interval/detail/interval_prototype.hpp> #include <boost/numeric/interval/detail/test_input.hpp> namespace boost { namespace numeric { namespace interval_lib { namespace compare { namespace certain { template<class T, class Policies1, class Policies2> inline bool operator<(const interval<T, Policies1>& x, const interval<T, Policies2>& y) { if (detail::test_input(x, y)) throw comparison_error(); return x.upper() < y.lower(); } template<class T, class Policies> inline bool operator<(const interval<T, Policies>& x, const T& y) { if (detail::test_input(x, y)) throw comparison_error(); return x.upper() < y; } template<class T, class Policies1, class Policies2> inline bool operator<=(const interval<T, Policies1>& x, const interval<T, Policies2>& y) { if (detail::test_input(x, y)) throw comparison_error(); return x.upper() <= y.lower(); } template<class T, class Policies> inline bool operator<=(const interval<T, Policies>& x, const T& y) { if (detail::test_input(x, y)) throw comparison_error(); return x.upper() <= y; } template<class T, class Policies1, class Policies2> inline bool operator>(const interval<T, Policies1>& x, const interval<T, Policies2>& y) { if (detail::test_input(x, y)) throw comparison_error(); return x.lower() > y.upper(); } template<class T, class Policies> inline bool operator>(const interval<T, Policies>& x, const T& y) { if (detail::test_input(x, y)) throw comparison_error(); return x.lower() > y; } template<class T, class Policies1, class Policies2> inline bool operator>=(const interval<T, Policies1>& x, const interval<T, Policies2>& y) { if (detail::test_input(x, y)) throw comparison_error(); return x.lower() >= y.upper(); } template<class T, class Policies> inline bool operator>=(const interval<T, Policies>& x, const T& y) { if (detail::test_input(x, y)) throw comparison_error(); return x.lower() >= y; } template<class T, class Policies1, class Policies2> inline bool operator==(const interval<T, Policies1>& x, const interval<T, Policies2>& y) { if (detail::test_input(x, y)) throw comparison_error(); return x.upper() == y.lower() && x.lower() == y.upper(); } template<class T, class Policies> inline bool operator==(const interval<T, Policies>& x, const T& y) { if (detail::test_input(x, y)) throw comparison_error(); return x.upper() == y && x.lower() == y; } template<class T, class Policies1, class Policies2> inline bool operator!=(const interval<T, Policies1>& x, const interval<T, Policies2>& y) { if (detail::test_input(x, y)) throw comparison_error(); return x.upper() < y.lower() || x.lower() > y.upper(); } template<class T, class Policies> inline bool operator!=(const interval<T, Policies>& x, const T& y) { if (detail::test_input(x, y)) throw comparison_error(); return x.upper() < y || x.lower() > y; } } // namespace certain } // namespace compare } // namespace interval_lib } // namespace numeric } // namespace boost #endif // BOOST_NUMERIC_INTERVAL_COMPARE_CERTAIN_HPP