imgtools/imglib/boostlibrary/boost/tr1/detail/math_overloads.hpp
changeset 600 6d08f4a05d93
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/imglib/boostlibrary/boost/tr1/detail/math_overloads.hpp	Fri Jun 25 18:11:34 2010 +0800
@@ -0,0 +1,58 @@
+//  (C) Copyright John Maddock 2005.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TR1_MATH_OVERLOADS_HPP_INCLUDED
+#  define BOOST_TR1_MATH_OVERLOADS_HPP_INCLUDED
+#  include <boost/config.hpp>
+
+#  ifndef BOOST_NO_SFINAE
+#     include <boost/utility/enable_if.hpp>
+#     include <boost/type_traits/is_convertible.hpp>
+#     define BOOST_TR1_MATH_RETURN(RET) typename ::boost::enable_if< ::boost::is_convertible<T,double>, RET >::type
+#  else
+#     define BOOST_TR1_MATH_RETURN(RET) RET
+#  endif
+
+#  include <boost/type_traits/is_floating_point.hpp>
+#  include <boost/type_traits/is_same.hpp>
+#  include <boost/mpl/if.hpp>
+
+namespace boost{ namespace tr1_detail{
+
+template <class T, class U>
+struct largest_real
+{
+   typedef typename boost::mpl::if_<
+      boost::is_same<long double, T>,
+      long double,
+      typename boost::mpl::if_<
+         boost::is_same<long double, U>,
+         long double,
+         typename boost::mpl::if_<
+            boost::is_same<double, T>,
+            double,
+            typename boost::mpl::if_<
+               boost::is_same<double, U>,
+               double,
+               float
+            >::type
+         >::type
+      >::type
+   >::type type;
+};
+
+template <class T, class U>
+struct promote_to_real
+{
+   typedef typename largest_real<
+      typename boost::mpl::if_< boost::is_floating_point<T>, T, double>::type,
+      typename boost::mpl::if_< boost::is_floating_point<U>, U, double>::type
+   >::type type;
+};
+
+} }
+
+#endif
+