$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r49405 - in sandbox/math_toolkit: boost/math/policies boost/math/tools libs/math/doc/sf_and_dist libs/math/src/tr1
From: john_at_[hidden]
Date: 2008-10-20 12:54:25
Author: johnmaddock
Date: 2008-10-20 12:54:24 EDT (Mon, 20 Oct 2008)
New Revision: 49405
URL: http://svn.boost.org/trac/boost/changeset/49405
Log:
Added some specializations of the policy classes to reduce compile times.
Updated history.
Text files modified: 
   sandbox/math_toolkit/boost/math/policies/policy.hpp        |    17 ++++++                                  
   sandbox/math_toolkit/boost/math/tools/promotion.hpp        |    24 +++++++++                               
   sandbox/math_toolkit/libs/math/doc/sf_and_dist/roadmap.qbk |     5 +                                       
   sandbox/math_toolkit/libs/math/src/tr1/c_policy.hpp        |   106 +++++++++++++++++++++++++++++++++++++++ 
   4 files changed, 150 insertions(+), 2 deletions(-)
Modified: sandbox/math_toolkit/boost/math/policies/policy.hpp
==============================================================================
--- sandbox/math_toolkit/boost/math/policies/policy.hpp	(original)
+++ sandbox/math_toolkit/boost/math/policies/policy.hpp	2008-10-20 12:54:24 EDT (Mon, 20 Oct 2008)
@@ -603,6 +603,23 @@
    typedef policy<detail::forwarding_arg1, detail::forwarding_arg2> type;
 };
 
+template <>
+struct normalise<policy<detail::forwarding_arg1, detail::forwarding_arg2>,
+          promote_float<false>,
+          promote_double<false>,
+          discrete_quantile<>,
+          assert_undefined<>,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy>
+{
+   typedef policy<detail::forwarding_arg1, detail::forwarding_arg2> type;
+};
+
 inline policy<> make_policy()
 { return policy<>(); }
 
Modified: sandbox/math_toolkit/boost/math/tools/promotion.hpp
==============================================================================
--- sandbox/math_toolkit/boost/math/tools/promotion.hpp	(original)
+++ sandbox/math_toolkit/boost/math/tools/promotion.hpp	2008-10-20 12:54:24 EDT (Mon, 20 Oct 2008)
@@ -69,6 +69,12 @@
       { // If T is integral type, then promote to double.
         typedef typename mpl::if_<is_integral<T>, double, T>::type type;
       };
+      // These full specialisations reduce mpl::if_ usage and speed up
+      // compilation:
+      template <> struct promote_arg<float> { typedef float type; };
+      template <> struct promote_arg<double>{ typedef double type; };
+      template <> struct promote_arg<long double> { typedef long double type; };
+      template <> struct promote_arg<int> {  typedef double type; };
 
       template <class T1, class T2>
       struct promote_args_2
@@ -89,6 +95,24 @@
           // else one or the other is a user-defined type:
           typename mpl::if_< ::boost::is_convertible<T1P, T2P>, T2P, T1P>::type>::type type;
       }; // promote_arg2
+      // These full specialisations reduce mpl::if_ usage and speed up
+      // compilation:
+      template <> struct promote_args_2<float, float> { typedef float type; };
+      template <> struct promote_args_2<double, double>{ typedef double type; };
+      template <> struct promote_args_2<long double, long double> { typedef long double type; };
+      template <> struct promote_args_2<int, int> {  typedef double type; };
+      template <> struct promote_args_2<int, float> {  typedef double type; };
+      template <> struct promote_args_2<float, int> {  typedef double type; };
+      template <> struct promote_args_2<int, double> {  typedef double type; };
+      template <> struct promote_args_2<double, int> {  typedef double type; };
+      template <> struct promote_args_2<int, long double> {  typedef long double type; };
+      template <> struct promote_args_2<long double, int> {  typedef long double type; };
+      template <> struct promote_args_2<float, double> {  typedef double type; };
+      template <> struct promote_args_2<double, float> {  typedef double type; };
+      template <> struct promote_args_2<float, long double> {  typedef long double type; };
+      template <> struct promote_args_2<long double, float> {  typedef long double type; };
+      template <> struct promote_args_2<double, long double> {  typedef long double type; };
+      template <> struct promote_args_2<long double, double> {  typedef long double type; };
 
       template <class T1, class T2=float, class T3=float, class T4=float, class T5=float, class T6=float>
       struct promote_args
Modified: sandbox/math_toolkit/libs/math/doc/sf_and_dist/roadmap.qbk
==============================================================================
--- sandbox/math_toolkit/libs/math/doc/sf_and_dist/roadmap.qbk	(original)
+++ sandbox/math_toolkit/libs/math/doc/sf_and_dist/roadmap.qbk	2008-10-20 12:54:24 EDT (Mon, 20 Oct 2008)
@@ -1,5 +1,10 @@
 [template history[]
 
+[h4 Boost-1.38.0]
+
+* Added support for MPFR as a bignum type.
+* Added some full specializations of the policy classes to reduce compile times.
+
 [h4 Boost-1.37.0]
 
 * Improved accuracy and testing of the inverse hypergeometric functions.
Modified: sandbox/math_toolkit/libs/math/src/tr1/c_policy.hpp
==============================================================================
--- sandbox/math_toolkit/libs/math/src/tr1/c_policy.hpp	(original)
+++ sandbox/math_toolkit/libs/math/src/tr1/c_policy.hpp	2008-10-20 12:54:24 EDT (Mon, 20 Oct 2008)
@@ -6,6 +6,108 @@
 #include <boost/math/policies/policy.hpp>
 #include <boost/math/special_functions/math_fwd.hpp>
 
+namespace boost{ namespace math{ namespace policies{
+
+template <>
+struct policy<
+   domain_error<errno_on_error>, 
+   pole_error<errno_on_error>, 
+   overflow_error<errno_on_error>, 
+   evaluation_error<errno_on_error>, 
+   rounding_error<errno_on_error>, 
+   default_policy, default_policy, default_policy, default_policy, default_policy, default_policy>
+{
+public:
+   typedef domain_error<errno_on_error> domain_error_type;
+   typedef pole_error<errno_on_error> pole_error_type;
+   typedef overflow_error<errno_on_error> overflow_error_type;
+   typedef underflow_error<errno_on_error> underflow_error_type;
+   typedef denorm_error<errno_on_error> denorm_error_type;
+   typedef evaluation_error<errno_on_error> evaluation_error_type;
+   typedef rounding_error<errno_on_error> rounding_error_type;
+   typedef indeterminate_result_error<> indeterminate_result_error_type;
+#if BOOST_MATH_DIGITS10_POLICY == 0
+   typedef digits2<> precision_type;
+#else
+   typedef detail::precision<digits10<>, digits2<> >::type precision_type;
+#endif
+   typedef promote_float<> promote_float_type;
+   typedef promote_double<> promote_double_type;
+   typedef discrete_quantile<> discrete_quantile_type;
+   typedef assert_undefined<> assert_undefined_type;
+   typedef max_series_iterations<> max_series_iterations_type;
+   typedef max_root_iterations<> max_root_iterations_type;
+};
+
+template <>
+struct policy<
+   domain_error<errno_on_error>, 
+   pole_error<errno_on_error>, 
+   overflow_error<errno_on_error>, 
+   evaluation_error<errno_on_error>, 
+   rounding_error<errno_on_error>, 
+   detail::forwarding_arg1, 
+   detail::forwarding_arg2, 
+   default_policy, default_policy, default_policy, default_policy, default_policy, default_policy>
+{
+public:
+   typedef domain_error<errno_on_error> domain_error_type;
+   typedef pole_error<errno_on_error> pole_error_type;
+   typedef overflow_error<errno_on_error> overflow_error_type;
+   typedef underflow_error<errno_on_error> underflow_error_type;
+   typedef denorm_error<errno_on_error> denorm_error_type;
+   typedef evaluation_error<errno_on_error> evaluation_error_type;
+   typedef rounding_error<errno_on_error> rounding_error_type;
+   typedef indeterminate_result_error<> indeterminate_result_error_type;
+#if BOOST_MATH_DIGITS10_POLICY == 0
+   typedef digits2<> precision_type;
+#else
+   typedef detail::precision<digits10<>, digits2<> >::type precision_type;
+#endif
+   typedef promote_float<false> promote_float_type;
+   typedef promote_double<false> promote_double_type;
+   typedef discrete_quantile<> discrete_quantile_type;
+   typedef assert_undefined<> assert_undefined_type;
+   typedef max_series_iterations<> max_series_iterations_type;
+   typedef max_root_iterations<> max_root_iterations_type;
+};
+
+template <>
+struct normalise<policy<domain_error<errno_on_error>, pole_error<errno_on_error>, overflow_error<errno_on_error>, evaluation_error<errno_on_error>, rounding_error<errno_on_error> >,
+          promote_float<false>,
+          promote_double<false>,
+          discrete_quantile<>,
+          assert_undefined<>,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy>
+{
+   typedef policy<domain_error<errno_on_error>, pole_error<errno_on_error>, overflow_error<errno_on_error>, evaluation_error<errno_on_error>, rounding_error<errno_on_error>, detail::forwarding_arg1, detail::forwarding_arg2> type;
+};
+
+template <>
+struct normalise<policy<domain_error<errno_on_error>, pole_error<errno_on_error>, overflow_error<errno_on_error>, evaluation_error<errno_on_error>, rounding_error<errno_on_error>, detail::forwarding_arg1, detail::forwarding_arg2 >,
+          promote_float<false>,
+          promote_double<false>,
+          discrete_quantile<>,
+          assert_undefined<>,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy>
+{
+   typedef policy<domain_error<errno_on_error>, pole_error<errno_on_error>, overflow_error<errno_on_error>, evaluation_error<errno_on_error>, rounding_error<errno_on_error>, detail::forwarding_arg1, detail::forwarding_arg2> type;
+};
+
+}}} // namespaces
+
 namespace c_policies{
 
 using boost::math::policies::policy;
@@ -20,8 +122,8 @@
    domain_error<errno_on_error>,
    pole_error<errno_on_error>,
    overflow_error<errno_on_error>,
-   rounding_error<errno_on_error>,
-   evaluation_error<errno_on_error>
+   evaluation_error<errno_on_error>,
+   rounding_error<errno_on_error>
 > c_policy;
 
 BOOST_MATH_DECLARE_SPECIAL_FUNCTIONS(c_policy)