Boost logo

Boost-Commit :

From: nicola.musatti_at_[hidden]
Date: 2007-10-13 17:25:53


Author: nmusatti
Date: 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
New Revision: 39987
URL: http://svn.boost.org/trac/boost/changeset/39987

Log:
Merge from trunk
Added:
   branches/bcbboost/boost/asio/detail/dev_poll_reactor.hpp
      - copied unchanged from r39970, /trunk/boost/asio/detail/dev_poll_reactor.hpp
   branches/bcbboost/boost/asio/detail/dev_poll_reactor_fwd.hpp
      - copied unchanged from r39970, /trunk/boost/asio/detail/dev_poll_reactor_fwd.hpp
   branches/bcbboost/boost/math/distributions.hpp
      - copied unchanged from r39970, /trunk/boost/math/distributions.hpp
   branches/bcbboost/boost/math/special_functions.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions.hpp
   branches/bcbboost/boost/math/special_functions/bessel.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/bessel.hpp
   branches/bcbboost/boost/math/special_functions/beta.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/beta.hpp
   branches/bcbboost/boost/math/special_functions/binomial.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/binomial.hpp
   branches/bcbboost/boost/math/special_functions/cbrt.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/cbrt.hpp
   branches/bcbboost/boost/math/special_functions/cos_pi.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/cos_pi.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_i0.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_i0.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_i1.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_i1.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_ik.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_ik.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_j0.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_j0.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_j1.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_j1.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_jn.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_jn.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_jy.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_jy.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_jy_asym.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_jy_asym.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_k0.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_k0.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_k1.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_k1.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_kn.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_kn.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_y0.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_y0.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_y1.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_y1.hpp
   branches/bcbboost/boost/math/special_functions/detail/bessel_yn.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/bessel_yn.hpp
   branches/bcbboost/boost/math/special_functions/detail/erf_inv.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/erf_inv.hpp
   branches/bcbboost/boost/math/special_functions/detail/gamma_inva.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/gamma_inva.hpp
   branches/bcbboost/boost/math/special_functions/detail/ibeta_inv_ab.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/ibeta_inv_ab.hpp
   branches/bcbboost/boost/math/special_functions/detail/ibeta_inverse.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/ibeta_inverse.hpp
   branches/bcbboost/boost/math/special_functions/detail/igamma_inverse.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/igamma_inverse.hpp
   branches/bcbboost/boost/math/special_functions/detail/igamma_large.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/igamma_large.hpp
   branches/bcbboost/boost/math/special_functions/detail/lgamma_small.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/lgamma_small.hpp
   branches/bcbboost/boost/math/special_functions/detail/simple_complex.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/simple_complex.hpp
   branches/bcbboost/boost/math/special_functions/detail/t_distribution_inv.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/t_distribution_inv.hpp
   branches/bcbboost/boost/math/special_functions/detail/unchecked_factorial.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/detail/unchecked_factorial.hpp
   branches/bcbboost/boost/math/special_functions/digamma.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/digamma.hpp
   branches/bcbboost/boost/math/special_functions/ellint_1.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/ellint_1.hpp
   branches/bcbboost/boost/math/special_functions/ellint_2.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/ellint_2.hpp
   branches/bcbboost/boost/math/special_functions/ellint_3.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/ellint_3.hpp
   branches/bcbboost/boost/math/special_functions/ellint_rc.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/ellint_rc.hpp
   branches/bcbboost/boost/math/special_functions/ellint_rd.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/ellint_rd.hpp
   branches/bcbboost/boost/math/special_functions/ellint_rf.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/ellint_rf.hpp
   branches/bcbboost/boost/math/special_functions/ellint_rj.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/ellint_rj.hpp
   branches/bcbboost/boost/math/special_functions/erf.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/erf.hpp
   branches/bcbboost/boost/math/special_functions/factorials.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/factorials.hpp
   branches/bcbboost/boost/math/special_functions/fpclassify.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/fpclassify.hpp
   branches/bcbboost/boost/math/special_functions/gamma.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/gamma.hpp
   branches/bcbboost/boost/math/special_functions/hermite.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/hermite.hpp
   branches/bcbboost/boost/math/special_functions/laguerre.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/laguerre.hpp
   branches/bcbboost/boost/math/special_functions/lanczos.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/lanczos.hpp
   branches/bcbboost/boost/math/special_functions/legendre.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/legendre.hpp
   branches/bcbboost/boost/math/special_functions/math_fwd.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/math_fwd.hpp
   branches/bcbboost/boost/math/special_functions/powm1.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/powm1.hpp
   branches/bcbboost/boost/math/special_functions/sign.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/sign.hpp
   branches/bcbboost/boost/math/special_functions/sin_pi.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/sin_pi.hpp
   branches/bcbboost/boost/math/special_functions/spherical_harmonic.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/spherical_harmonic.hpp
   branches/bcbboost/boost/math/special_functions/sqrt1pm1.hpp
      - copied unchanged from r39970, /trunk/boost/math/special_functions/sqrt1pm1.hpp
   branches/bcbboost/boost/multi_index/global_fun.hpp
      - copied unchanged from r39970, /trunk/boost/multi_index/global_fun.hpp
   branches/bcbboost/boost/thread/detail/move.hpp
      - copied unchanged from r39970, /trunk/boost/thread/detail/move.hpp
   branches/bcbboost/boost/thread/pthread/shared_mutex.hpp
      - copied unchanged from r39970, /trunk/boost/thread/pthread/shared_mutex.hpp
   branches/bcbboost/boost/thread/shared_mutex.hpp
      - copied unchanged from r39970, /trunk/boost/thread/shared_mutex.hpp
   branches/bcbboost/boost/thread/win32/shared_mutex.hpp
      - copied unchanged from r39970, /trunk/boost/thread/win32/shared_mutex.hpp
   branches/bcbboost/libs/math/doc/complex/
      - copied from r39970, /trunk/libs/math/doc/complex/
   branches/bcbboost/libs/math/doc/complex/Jamfile.v2
      - copied unchanged from r39970, /trunk/libs/math/doc/complex/Jamfile.v2
   branches/bcbboost/libs/math/doc/complex/complex-tr1.qbk
      - copied unchanged from r39970, /trunk/libs/math/doc/complex/complex-tr1.qbk
   branches/bcbboost/libs/math/doc/complex/html/
      - copied from r39970, /trunk/libs/math/doc/complex/html/
   branches/bcbboost/libs/math/doc/complex/html/complex_number_tr1_algorithms/
      - copied from r39970, /trunk/libs/math/doc/complex/html/complex_number_tr1_algorithms/
   branches/bcbboost/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/
      - copied from r39970, /trunk/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/
   branches/bcbboost/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex.html
      - copied unchanged from r39970, /trunk/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex.html
   branches/bcbboost/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/acos.html
      - copied unchanged from r39970, /trunk/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/acos.html
   branches/bcbboost/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/acosh.html
      - copied unchanged from r39970, /trunk/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/acosh.html
   branches/bcbboost/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/asin.html
      - copied unchanged from r39970, /trunk/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/asin.html
   branches/bcbboost/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/asinh.html
      - copied unchanged from r39970, /trunk/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/asinh.html
   branches/bcbboost/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/atan.html
      - copied unchanged from r39970, /trunk/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/atan.html
   branches/bcbboost/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/atanh.html
      - copied unchanged from r39970, /trunk/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/atanh.html
   branches/bcbboost/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/history.html
      - copied unchanged from r39970, /trunk/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/history.html
   branches/bcbboost/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/implementation.html
      - copied unchanged from r39970, /trunk/libs/math/doc/complex/html/complex_number_tr1_algorithms/inverse_complex/implementation.html
   branches/bcbboost/libs/math/doc/complex/html/index.html
      - copied unchanged from r39970, /trunk/libs/math/doc/complex/html/index.html
   branches/bcbboost/libs/math/doc/gcd/
      - copied from r39970, /trunk/libs/math/doc/gcd/
   branches/bcbboost/libs/math/doc/gcd/Jamfile.v2
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/Jamfile.v2
   branches/bcbboost/libs/math/doc/gcd/html/
      - copied from r39970, /trunk/libs/math/doc/gcd/html/
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/
      - copied from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/
      - copied from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm.html
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm.html
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/compile_time.html
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/compile_time.html
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/credits.html
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/credits.html
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/demo.html
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/demo.html
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/gcd_function_object.html
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/gcd_function_object.html
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/header.html
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/header.html
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/history.html
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/history.html
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/introduction.html
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/introduction.html
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/lcm_function_object.html
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/lcm_function_object.html
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/rationale.html
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/rationale.html
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/run_time.html
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/run_time.html
   branches/bcbboost/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/synopsis.html
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/html/gcd_and_lcm/gcd_lcm/synopsis.html
   branches/bcbboost/libs/math/doc/gcd/html/index.html
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/html/index.html
   branches/bcbboost/libs/math/doc/gcd/math-gcd.qbk
      - copied unchanged from r39970, /trunk/libs/math/doc/gcd/math-gcd.qbk
   branches/bcbboost/libs/math/doc/html/
      - copied from r39970, /trunk/libs/math/doc/html/
   branches/bcbboost/libs/math/doc/html/index.html
      - copied unchanged from r39970, /trunk/libs/math/doc/html/index.html
   branches/bcbboost/libs/math/doc/octonion/
      - copied from r39970, /trunk/libs/math/doc/octonion/
   branches/bcbboost/libs/math/doc/octonion/Jamfile.v2
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/Jamfile.v2
   branches/bcbboost/libs/math/doc/octonion/html/
      - copied from r39970, /trunk/libs/math/doc/octonion/html/
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/
      - copied from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/
      - copied from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/acknowledgements.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/acknowledgements.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/header_file.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/header_file.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/history.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/history.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/non_mem.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/non_mem.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/oct_create.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/oct_create.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/octonion_member_functions.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/octonion_member_functions.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/octonion_member_typedefs.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/octonion_member_typedefs.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/octonion_specializations.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/octonion_specializations.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/octonion_value_operations.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/octonion_value_operations.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/octonions_transcendentals.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/octonions_transcendentals.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/overview.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/overview.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/synopsis.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/synopsis.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/template_class_octonion.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/template_class_octonion.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/test_program.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/test_program.html
   branches/bcbboost/libs/math/doc/octonion/html/boost_octonions/octonions/to_do.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/boost_octonions/octonions/to_do.html
   branches/bcbboost/libs/math/doc/octonion/html/index.html
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/html/index.html
   branches/bcbboost/libs/math/doc/octonion/math-octonion.qbk
      - copied unchanged from r39970, /trunk/libs/math/doc/octonion/math-octonion.qbk
   branches/bcbboost/libs/math/doc/quaternion/
      - copied from r39970, /trunk/libs/math/doc/quaternion/
   branches/bcbboost/libs/math/doc/quaternion/Jamfile.v2
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/Jamfile.v2
   branches/bcbboost/libs/math/doc/quaternion/html/
      - copied from r39970, /trunk/libs/math/doc/quaternion/html/
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/
      - copied from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/
      - copied from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/acknowledgements.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/acknowledgements.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/create.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/create.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/exp.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/exp.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/header_file.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/header_file.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/history.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/history.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/mem_fun.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/mem_fun.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/mem_typedef.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/mem_typedef.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/non_mem.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/non_mem.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/overview.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/overview.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/quat.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/quat.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/spec.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/spec.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/synopsis.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/synopsis.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/test_program.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/test_program.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/to_do.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/to_do.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/trans.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/trans.html
   branches/bcbboost/libs/math/doc/quaternion/html/boost_quaternions/quaternions/value_op.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/boost_quaternions/quaternions/value_op.html
   branches/bcbboost/libs/math/doc/quaternion/html/index.html
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/html/index.html
   branches/bcbboost/libs/math/doc/quaternion/math-quaternion.qbk
      - copied unchanged from r39970, /trunk/libs/math/doc/quaternion/math-quaternion.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/
      - copied from r39819, /trunk/libs/math/doc/sf_and_dist/
   branches/bcbboost/libs/math/doc/sf_and_dist/Jamfile.v2
      - copied, changed from r39819, /trunk/libs/math/doc/sf_and_dist/Jamfile.v2
   branches/bcbboost/libs/math/doc/sf_and_dist/background.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/background.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/bessel_ik.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/bessel_ik.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/bessel_introduction.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/bessel_introduction.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/bessel_jy.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/bessel_jy.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/bessel_spherical.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/bessel_spherical.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/beta.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/beta.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/beta_derivative.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/beta_derivative.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/common_overviews.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/common_overviews.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/compilers.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/compilers.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/concepts.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/concepts.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/contact_info.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/contact_info.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/credits.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/credits.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/digamma.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/digamma.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/dist_algorithms.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/dist_algorithms.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/dist_reference.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/dist_reference.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/dist_tutorial.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/dist_tutorial.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/
      - copied from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/bernoulli.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/bernoulli.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/beta.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/beta.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/binomial.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/binomial.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/binomial_example.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/binomial_example.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/cauchy.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/cauchy.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/chi_squared.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/chi_squared.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/chi_squared_examples.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/chi_squared_examples.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/distribution_construction.qbk
      - copied, changed from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/distribution_construction.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/error_handling_example.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/error_handling_example.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/exponential.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/exponential.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/extreme_value.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/extreme_value.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/f_dist_example.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/f_dist_example.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/find_location_and_scale.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/find_location_and_scale.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/fisher.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/fisher.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/gamma.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/gamma.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/lognormal.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/lognormal.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/nag_library.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/nag_library.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/negative_binomial.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/negative_binomial.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/negative_binomial_example.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/negative_binomial_example.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/non_members.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/non_members.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/normal.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/normal.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/normal_example.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/normal_example.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/pareto.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/pareto.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/poisson.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/poisson.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/rayleigh.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/rayleigh.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/students_t.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/students_t.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/students_t_examples.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/students_t_examples.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/triangular.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/triangular.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/uniform.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/uniform.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/weibull.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/weibull.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/ellint_carlson.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/ellint_carlson.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/ellint_introduction.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/ellint_introduction.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/ellint_legendre.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/ellint_legendre.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/
      - copied from r39819, /trunk/libs/math/doc/sf_and_dist/equations/
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel10.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel10.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel10.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel10.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel10.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel10.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel11.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel11.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel11.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel11.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel11.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel11.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel12.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel12.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel12.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel12.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel12.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel12.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel13.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel13.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel13.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel13.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel13.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel13.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel14.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel14.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel14.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel14.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel14.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel14.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel15.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel15.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel15.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel15.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel15.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel15.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel16.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel16.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel16.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel16.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel16.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel16.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel5.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel5.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel5.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel5.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel6.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel6.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel6.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel6.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel6.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel6.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel7.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel7.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel7.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel7.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel7.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel7.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel8.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel8.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel8.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel8.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel8.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel8.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel9.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel9.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel9.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel9.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/bessel9.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/bessel9.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta5.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta5.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta5.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta5.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta6.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta6.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta6.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta6.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta6.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta6.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta7.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta7.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta7.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta7.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta7.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta7.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta8.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta8.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta8.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta8.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta8.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta8.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta_dist_kurtosis.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta_dist_kurtosis.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta_dist_kurtosis.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta_dist_kurtosis.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/beta_dist_kurtosis.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/beta_dist_kurtosis.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/binomial_ref1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/binomial_ref1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/binomial_ref1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/binomial_ref1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/binomial_ref1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/binomial_ref1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/binomial_ref2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/binomial_ref2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/binomial_ref2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/binomial_ref2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/binomial_ref2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/binomial_ref2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/cauchy_ref1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/cauchy_ref1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/cauchy_ref1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/cauchy_ref1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/cauchy_ref1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/cauchy_ref1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chf.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chf.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chf.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chf.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chi_squ_ref1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chi_squ_ref1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chi_squ_ref1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chi_squ_ref1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chi_squ_ref1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chi_squ_ref1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chi_squ_tut1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chi_squ_tut1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chi_squ_tut1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chi_squ_tut1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chi_squ_tut1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chi_squ_tut1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chi_squ_tut2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chi_squ_tut2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chi_squ_tut2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chi_squ_tut2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chi_squ_tut2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chi_squ_tut2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chi_squ_tut3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chi_squ_tut3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chi_squ_tut3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chi_squ_tut3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/chi_squ_tut3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/chi_squ_tut3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/derivative1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/derivative1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/derivative1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/derivative1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/derivative1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/derivative1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/derivative2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/derivative2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/derivative2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/derivative2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/derivative2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/derivative2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/digamma1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/digamma1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/digamma1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/digamma1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/digamma1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/digamma1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/digamma2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/digamma2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/digamma2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/digamma2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/digamma2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/digamma2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/digamma3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/digamma3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/digamma3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/digamma3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/digamma3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/digamma3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/dist_tutorial1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/dist_tutorial1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/dist_tutorial1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/dist_tutorial1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/dist_tutorial1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/dist_tutorial1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/dist_tutorial2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/dist_tutorial2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/dist_tutorial2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/dist_tutorial2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/dist_tutorial2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/dist_tutorial2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/dist_tutorial3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/dist_tutorial3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/dist_tutorial3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/dist_tutorial3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/dist_tutorial3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/dist_tutorial3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/dist_tutorial4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/dist_tutorial4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/dist_tutorial4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/dist_tutorial4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/dist_tutorial4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/dist_tutorial4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint10.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint10.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint10.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint10.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint10.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint10.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint11.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint11.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint11.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint11.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint11.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint11.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint12.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint12.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint12.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint12.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint12.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint12.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint13.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint13.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint13.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint13.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint13.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint13.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint14.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint14.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint14.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint14.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint14.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint14.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint15.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint15.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint15.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint15.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint15.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint15.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint16.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint16.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint16.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint16.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint16.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint16.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint17.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint17.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint17.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint17.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint17.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint17.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint18.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint18.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint18.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint18.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint18.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint18.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint19.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint19.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint19.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint19.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint19.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint19.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint20.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint20.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint20.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint20.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint20.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint20.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint21.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint21.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint21.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint21.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint21.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint21.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint22.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint22.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint22.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint22.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint22.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint22.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint23.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint23.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint23.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint23.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint23.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint23.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint24.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint24.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint24.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint24.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint24.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint24.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint25.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint25.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint25.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint25.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint25.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint25.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint26.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint26.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint26.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint26.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint26.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint26.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint5.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint5.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint5.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint5.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint6.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint6.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint6.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint6.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint6.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint6.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint7.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint7.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint7.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint7.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint7.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint7.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint8.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint8.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint8.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint8.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint8.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint8.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint9.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint9.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint9.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint9.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ellint9.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ellint9.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/erf1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/erf1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/erf1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/erf1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/erf1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/erf1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/erf2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/erf2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/erf2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/erf2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/erf2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/erf2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/error1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/error1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/error1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/error1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/error1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/error1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/error2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/error2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/error2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/error2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/error2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/error2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/exponential_dist_ref1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/exponential_dist_ref1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/exponential_dist_ref1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/exponential_dist_ref1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/exponential_dist_ref1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/exponential_dist_ref1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fisher_pdf.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fisher_pdf.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fisher_pdf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fisher_pdf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fisher_pdf.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fisher_pdf.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fraction1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fraction1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fraction1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fraction1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fraction1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fraction1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fraction2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fraction2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fraction2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fraction2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fraction2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fraction2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fraction3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fraction3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fraction3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fraction3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fraction3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fraction3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fraction4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fraction4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fraction4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fraction4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/fraction4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/fraction4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm5.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm5.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamm5.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamm5.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamma_dist_ref1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamma_dist_ref1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamma_dist_ref1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamma_dist_ref1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamma_dist_ref1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamma_dist_ref1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamma_dist_ref2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamma_dist_ref2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamma_dist_ref2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamma_dist_ref2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamma_dist_ref2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamma_dist_ref2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamma_ratio0.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamma_ratio0.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamma_ratio0.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamma_ratio0.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamma_ratio0.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamma_ratio0.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamma_ratio1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamma_ratio1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamma_ratio1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamma_ratio1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/gamma_ratio1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/gamma_ratio1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hazard.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hazard.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hazard.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hazard.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hazard.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hazard.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hermite_0.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hermite_0.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hermite_0.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hermite_0.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hermite_0.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hermite_0.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hermite_1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hermite_1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hermite_1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hermite_1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hermite_1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hermite_1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hypot.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hypot.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hypot.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hypot.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hypot.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hypot.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hypot2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hypot2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hypot2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hypot2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/hypot2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/hypot2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta10.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta10.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta10.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta10.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta10.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta10.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta11.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta11.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta11.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta11.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta11.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta11.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta12.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta12.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta12.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta12.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta12.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta12.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta5.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta5.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta5.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta5.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta6.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta6.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta6.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta6.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta6.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta6.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta7.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta7.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta7.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta7.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta7.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta7.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta8.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta8.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta8.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta8.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta8.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta8.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta9.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta9.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta9.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta9.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv5.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv5.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv5.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv5.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv6.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv6.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv6.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv6.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv6.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv6.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv7.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv7.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv7.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv7.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv7.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv7.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv8.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv8.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv8.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv8.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/ibeta_inv8.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/ibeta_inv8.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma10.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma10.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma10.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma10.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma10.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma10.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma11.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma11.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma11.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma11.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma11.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma11.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma11b.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma11b.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma11b.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma11b.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma11b.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma11b.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma12.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma12.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma12.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma12.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma12.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma12.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma13.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma13.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma13.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma13.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma13.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma13.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma16.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma16.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma16.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma16.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma16.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma16.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma17.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma17.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma17.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma17.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma17.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma17.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma18.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma18.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma18.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma18.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma18.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma18.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma19.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma19.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma19.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma19.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma19.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma19.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma1f.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma1f.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma1f.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma1f.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma1f.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma1f.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma2f.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma2f.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma2f.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma2f.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma2f.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma2f.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma5.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma5.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma5.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma5.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma6.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma6.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma6.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma6.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma6.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma6.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma7.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma7.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma7.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma7.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma7.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma7.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma8.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma8.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma8.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma8.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma8.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma8.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma9.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma9.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma9.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma9.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/igamma9.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/igamma9.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/laguerre_0.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/laguerre_0.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/laguerre_0.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/laguerre_0.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/laguerre_0.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/laguerre_0.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/laguerre_1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/laguerre_1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/laguerre_1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/laguerre_1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/laguerre_1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/laguerre_1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/laguerre_2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/laguerre_2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/laguerre_2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/laguerre_2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/laguerre_2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/laguerre_2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/laguerre_3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/laguerre_3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/laguerre_3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/laguerre_3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/laguerre_3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/laguerre_3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos0.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos0.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos0.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos0.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos0.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos0.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos0a.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos0a.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos0a.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos0a.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos0a.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos0a.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos0b.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos0b.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos0b.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos0b.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos0b.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos0b.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos5.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos5.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos5.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos5.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos6.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos6.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos6.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos6.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos6.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos6.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos7.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos7.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos7.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos7.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lanczos7.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lanczos7.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_0.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_0.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_0.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_0.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_0.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_0.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_5.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_5.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/legendre_5.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/legendre_5.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm5.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm5.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm5.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm5.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm6.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm6.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm6.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm6.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lgamm6.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lgamm6.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/log1pseries.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/log1pseries.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/log1pseries.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/log1pseries.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/log1pseries.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/log1pseries.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lognormal_ref.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lognormal_ref.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lognormal_ref.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lognormal_ref.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/lognormal_ref.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/lognormal_ref.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel10.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel10.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel10.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel10.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel10.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel10.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel11.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel11.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel11.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel11.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel11.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel11.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel12.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel12.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel12.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel12.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel12.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel12.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel13.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel13.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel13.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel13.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel13.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel13.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel14.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel14.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel14.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel14.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel14.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel14.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel15.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel15.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel15.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel15.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel15.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel15.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel16.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel16.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel16.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel16.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel16.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel16.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel5.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel5.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel5.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel5.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel6.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel6.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel6.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel6.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel6.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel6.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel7.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel7.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel7.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel7.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel7.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel7.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel8.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel8.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel8.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel8.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel8.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel8.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel9.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel9.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel9.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel9.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/mbessel9.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/mbessel9.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/neg_binomial_ref.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/neg_binomial_ref.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/neg_binomial_ref.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/neg_binomial_ref.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/neg_binomial_ref.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/neg_binomial_ref.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/normal_ref1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/normal_ref1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/normal_ref1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/normal_ref1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/normal_ref1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/normal_ref1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/poisson_ref1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/poisson_ref1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/poisson_ref1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/poisson_ref1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/poisson_ref1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/poisson_ref1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/roots1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/roots1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/roots1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/roots1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/roots1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/roots1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/roots2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/roots2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/roots2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/roots2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/roots2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/roots2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/roots3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/roots3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/roots3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/roots3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/roots3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/roots3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/roots4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/roots4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/roots4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/roots4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/roots4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/roots4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel3.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel3.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel3.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel3.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel4.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel4.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel4.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel4.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel5.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel5.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/sbessel5.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/sbessel5.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb15.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb15.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb15.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb15.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb15.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb15.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb17.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb17.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb17.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb17.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb17.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb17.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb18.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb18.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb18.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb18.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb18.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb18.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb20.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb20.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb20.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb20.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb20.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb20.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb22.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb22.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb22.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb22.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb22.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb22.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb5.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb5.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb5.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb5.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb6.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb6.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb6.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb6.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb6.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb6.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb7.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb7.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb7.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb7.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/special_functions_blurb7.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/special_functions_blurb7.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/spherical_0.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/spherical_0.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/spherical_0.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/spherical_0.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/spherical_0.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/spherical_0.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/spherical_1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/spherical_1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/spherical_1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/spherical_1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/spherical_1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/spherical_1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/spherical_2.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/spherical_2.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/spherical_2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/spherical_2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/spherical_2.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/spherical_2.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/students_t_dist.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/students_t_dist.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/students_t_dist.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/students_t_dist.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/students_t_dist.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/students_t_dist.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/students_t_ref1.mml
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/students_t_ref1.mml
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/students_t_ref1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/students_t_ref1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/equations/students_t_ref1.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/equations/students_t_ref1.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/erf.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/erf.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/erf_inv.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/erf_inv.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/error.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/error.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/error_handling.qbk
      - copied, changed from r39819, /trunk/libs/math/doc/sf_and_dist/error_handling.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/factorials.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/factorials.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/fpclassify.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/fpclassify.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/fraction.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/fraction.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/gamma_derivatives.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/gamma_derivatives.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/gamma_ratios.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/gamma_ratios.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/
      - copied from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/bernoulli_cdf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/bernoulli_cdf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/bernoulli_pdf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/bernoulli_pdf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/bessel_i.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/bessel_i.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/bessel_jn.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/bessel_jn.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/bessel_jv.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/bessel_jv.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/bessel_k.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/bessel_k.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/bessel_yv.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/bessel_yv.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/beta-small.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/beta-small.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/beta.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/beta.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/beta_dist.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/beta_dist.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/beta_pdf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/beta_pdf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/binomial_pdf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/binomial_pdf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/binomial_pdf_1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/binomial_pdf_1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/binomial_pdf_2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/binomial_pdf_2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/binomial_pdf_3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/binomial_pdf_3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/binomial_quantile_1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/binomial_quantile_1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/cauchy1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/cauchy1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/cauchy2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/cauchy2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/cdf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/cdf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/chi_square.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/chi_square.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/digamma.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/digamma.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/ellint_1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/ellint_1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/ellint_2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/ellint_2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/ellint_3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/ellint_3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/ellint_c.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/ellint_c.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/erf1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/erf1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/erf2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/erf2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/erf_inv.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/erf_inv.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/erfc_inv.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/erfc_inv.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/exp_on_r.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/exp_on_r.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/exponential_dist.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/exponential_dist.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/extreme_val_dist.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/extreme_val_dist.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/extreme_val_dist2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/extreme_val_dist2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/fisher_f.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/fisher_f.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/gamma.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/gamma.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/gamma_dist1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/gamma_dist1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/gamma_dist2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/gamma_dist2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/gamma_p.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/gamma_p.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/gamma_q.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/gamma_q.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/hermite.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/hermite.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/hyperbolic.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/hyperbolic.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/ibeta.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/ibeta.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/im_exp_on_c.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/im_exp_on_c.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/laguerre.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/laguerre.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/legendre_p1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/legendre_p1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/legendre_q.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/legendre_q.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/lgamma-errors.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/lgamma-errors.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/lgamma.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/lgamma.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/lognormal1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/lognormal1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/lognormal2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/lognormal2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/neg_binomial_pdf1.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/neg_binomial_pdf1.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/neg_binomial_pdf2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/neg_binomial_pdf2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/normal.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/normal.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/pdf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/pdf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/poisson.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/poisson.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/quantile.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/quantile.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/rayleigh_cdf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/rayleigh_cdf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/rayleigh_pdf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/rayleigh_pdf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/re_exp_on_c.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/re_exp_on_c.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/remez-2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/remez-2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/remez-3.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/remez-3.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/remez-4.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/remez-4.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/remez-5.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/remez-5.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/sinc_pi_and_sinhc_pi_on_r.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/sinc_pi_and_sinhc_pi_on_r.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/sph_bessel_j.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/sph_bessel_j.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/sph_bessel_y.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/sph_bessel_y.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/students_t.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/students_t.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/survival.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/survival.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/survival_inv.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/survival_inv.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/triangular_cdf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/triangular_cdf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/triangular_pdf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/triangular_pdf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/trigonometric.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/trigonometric.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/uniform_cdf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/uniform_cdf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/uniform_pdf.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/uniform_pdf.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/weibull.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/weibull.png
   branches/bcbboost/libs/math/doc/sf_and_dist/graphs/weibull2.png
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/graphs/weibull2.png
   branches/bcbboost/libs/math/doc/sf_and_dist/hermite.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/hermite.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/html/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/index.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/index.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/implementation.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/implementation.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/lanczos.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/lanczos.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/refs.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/refs.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/relative_error.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/relative_error.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/remez.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/backgrounders/remez.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dist_algorithms.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dist_algorithms.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/bernoulli_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/bernoulli_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/beta_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/beta_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/binomial_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/binomial_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/cauchy_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/cauchy_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/chi_squared_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/chi_squared_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/exp_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/exp_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/extreme_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/extreme_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/f_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/f_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/gamma_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/gamma_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/lognormal_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/lognormal_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/negative_binomial_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/negative_binomial_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/normal_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/normal_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/pareto.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/pareto.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/poisson_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/poisson_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/rayleigh.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/rayleigh.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/students_t_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/students_t_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/triangular_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/triangular_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/uniform_dist.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/uniform_dist.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/weibull.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/dists/weibull.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/nmp.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref/nmp.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/future.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/future.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/dist_params.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/dist_params.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/overview.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/overview.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/variates.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/variates.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/binom_eg/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/binom_eg/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/binom_eg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/binom_eg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/binom_eg/binom_conf.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/binom_eg/binom_conf.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/binom_eg/binom_size_eg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/binom_eg/binom_size_eg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/binom_eg/binomial_coinflip_example.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/binom_eg/binomial_coinflip_example.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/binom_eg/binomial_quiz_example.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/binom_eg/binomial_quiz_example.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/cs_eg/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/cs_eg/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/cs_eg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/cs_eg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/cs_eg/chi_sq_intervals.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/cs_eg/chi_sq_intervals.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/cs_eg/chi_sq_size.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/cs_eg/chi_sq_size.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/cs_eg/chi_sq_test.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/cs_eg/chi_sq_test.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/dist_construct_eg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/dist_construct_eg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/error_eg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/error_eg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/f_eg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/f_eg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/find_eg/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/find_eg/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/find_eg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/find_eg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/find_eg/find_location_eg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/find_eg/find_location_eg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/find_eg/find_mean_and_sd_eg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/find_eg/find_mean_and_sd_eg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/find_eg/find_scale_eg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/find_eg/find_scale_eg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/nag_library.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/nag_library.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/neg_binom_eg/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/neg_binom_eg/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/neg_binom_eg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/neg_binom_eg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/neg_binom_eg/neg_binom_conf.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/neg_binom_eg/neg_binom_conf.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/neg_binom_eg/neg_binom_size_eg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/neg_binom_eg/neg_binom_size_eg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/neg_binom_eg/negative_binomial_example1.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/neg_binom_eg/negative_binomial_example1.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/neg_binom_eg/negative_binomial_example2.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/neg_binom_eg/negative_binomial_example2.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/normal_example/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/normal_example/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/normal_example.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/normal_example.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/normal_example/normal_misc.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/normal_example/normal_misc.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg/paired_st.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg/paired_st.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg/tut_mean_intervals.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg/tut_mean_intervals.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg/tut_mean_size.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg/tut_mean_size.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg/tut_mean_test.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg/tut_mean_test.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg/two_sample_students_t.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/st_eg/two_sample_students_t.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/contact.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/contact.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/directories.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/directories.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/error_handling.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/error_handling.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/history1.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/history1.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/intro.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/intro.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/namespaces.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/namespaces.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/navigation.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/navigation.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/perf_over.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/perf_over.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/pol_overview.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/pol_overview.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/result_type.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/result_type.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/threads.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/main_overview/threads.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/perf/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/perf/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/perf.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/perf.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/perf/comp_compilers.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/perf/comp_compilers.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/perf/comparisons.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/perf/comparisons.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/perf/getting_best.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/perf/getting_best.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/perf/interp.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/perf/interp.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/perf/perf_over.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/perf/perf_over.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/perf/perf_test_app.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/perf/perf_test_app.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/perf/tuning.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/perf/tuning.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_overview.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_overview.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/assert_undefined.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/assert_undefined.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/discrete_quant_ref.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/discrete_quant_ref.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/error_handling_policies.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/error_handling_policies.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/internal_promotion.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/internal_promotion.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/iteration_pol.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/iteration_pol.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/namespace_pol.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/namespace_pol.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/pol_ref_ref.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/pol_ref_ref.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/policy_defaults.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/policy_defaults.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/precision_pol.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_ref/precision_pol.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/ad_hoc_dist_policies.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/ad_hoc_dist_policies.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/ad_hoc_sf_policies.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/ad_hoc_sf_policies.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/changing_policy_defaults.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/changing_policy_defaults.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/namespace_policies.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/namespace_policies.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/policy_tut_defaults.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/policy_tut_defaults.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/policy_usage.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/policy_usage.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/understand_dis_quant.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/understand_dis_quant.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/user_def_err_pol.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/user_def_err_pol.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/what_is_a_policy.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/policy/pol_tutorial/what_is_a_policy.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/bessel.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/bessel.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/bessel_over.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/bessel_over.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/mbessel.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/mbessel.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/sph_bessel.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/sph_bessel.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_1.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_1.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_2.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_2.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_3.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_3.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_carlson.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_carlson.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_intro.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/ellint/ellint_intro.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/sf_binomial.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/sf_binomial.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/sf_double_factorial.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/sf_double_factorial.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/sf_factorial.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/sf_factorial.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/sf_falling_factorial.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/sf_falling_factorial.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/sf_rising_factorial.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/sf_rising_factorial.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/fpclass.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/fpclass.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/inv_hyper/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/inv_hyper/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/inv_hyper.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/inv_hyper.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/inv_hyper/acosh.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/inv_hyper/acosh.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/inv_hyper/asinh.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/inv_hyper/asinh.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/inv_hyper/atanh.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/inv_hyper/atanh.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/inv_hyper/inv_hyper_over.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/inv_hyper/inv_hyper_over.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/cbrt.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/cbrt.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/expm1.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/expm1.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/hypot.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/hypot.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/log1p.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/log1p.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/powm1.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/powm1.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/sqrt1pm1.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/sqrt1pm1.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta/beta_derivative.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta/beta_derivative.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta/beta_function.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta/beta_function.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta/ibeta_function.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta/ibeta_function.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta/ibeta_inv_function.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta/ibeta_inv_function.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_erf/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_erf/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_erf.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_erf.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_erf/error_function.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_erf/error_function.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_erf/error_inv.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_erf/error_inv.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/digamma.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/digamma.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/gamma_derivatives.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/gamma_derivatives.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/gamma_ratios.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/gamma_ratios.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/igamma.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/igamma.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/igamma_inv.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/igamma_inv.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/lgamma.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/lgamma.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/tgamma.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/tgamma.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/hermite.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/hermite.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/laguerre.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/laguerre.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/legendre.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/legendre.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/sph_harm.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/sph_harm.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sinc/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sinc/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sinc.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sinc.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sinc/sinc_overview.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sinc/sinc_overview.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sinc/sinc_pi.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sinc/sinc_pi.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/special/sinc/sinhc_pi.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/special/sinc/sinhc_pi.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/status/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/status/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/status.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/status.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/status/compilers.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/status/compilers.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/status/credits.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/status/credits.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/status/history1.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/status/history1.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/status/issues.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/status/issues.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/cf.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/cf.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/minima.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/minima.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/rational.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/rational.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/roots.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/roots.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/roots2.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/roots2.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/series_evaluation.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals1/series_evaluation.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/error_test.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/error_test.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/minimax.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/minimax.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/polynomials.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/polynomials.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/test_data.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/test_data.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals_overview.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals_overview.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/using_udt/
      - copied from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/using_udt/
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/using_udt.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/using_udt.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/using_udt/archetypes.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/using_udt/archetypes.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/using_udt/concepts.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/using_udt/concepts.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/using_udt/dist_concept.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/using_udt/dist_concept.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html/math_toolkit/using_udt/use_ntl.html
      - copied unchanged from r39970, /trunk/libs/math/doc/sf_and_dist/html/math_toolkit/using_udt/use_ntl.html
   branches/bcbboost/libs/math/doc/sf_and_dist/html4_symbols.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/html4_symbols.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/ibeta.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/ibeta.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/ibeta_inv.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/ibeta_inv.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/igamma.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/igamma.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/igamma_inv.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/igamma_inv.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/implementation.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/implementation.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/internals_overview.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/internals_overview.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/inv_hyper.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/inv_hyper.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/issues.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/issues.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/laguerre.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/laguerre.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/lanczos.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/lanczos.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/latin1_symbols.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/latin1_symbols.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/legendre.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/legendre.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/lgamma.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/lgamma.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/license.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/license.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/math.qbk
      - copied, changed from r39819, /trunk/libs/math/doc/sf_and_dist/math.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/minima.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/minima.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/minimax.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/minimax.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/overview.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/overview.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/pdf/
      - copied from r39819, /trunk/libs/math/doc/sf_and_dist/pdf/
   branches/bcbboost/libs/math/doc/sf_and_dist/pdf/math.pdf
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/pdf/math.pdf
   branches/bcbboost/libs/math/doc/sf_and_dist/performance.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/performance.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/poisson_optimisation.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/poisson_optimisation.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/policy.qbk
      - copied, changed from r39819, /trunk/libs/math/doc/sf_and_dist/policy.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/policy_tutorial.qbk
      - copied, changed from r39819, /trunk/libs/math/doc/sf_and_dist/policy_tutorial.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/polynomial.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/polynomial.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/powers.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/powers.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/rational.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/rational.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/references.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/references.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/relative_error.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/relative_error.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/remez.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/remez.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/result_type_calc.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/result_type_calc.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/roadmap.qbk
      - copied, changed from r39819, /trunk/libs/math/doc/sf_and_dist/roadmap.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/roots.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/roots.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/roots_without_derivatives.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/roots_without_derivatives.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/series.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/series.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/sinc.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/sinc.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/spherical_harmonic.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/spherical_harmonic.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/structure.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/structure.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/svg-admon/
      - copied from r39819, /trunk/libs/math/doc/sf_and_dist/svg-admon/
   branches/bcbboost/libs/math/doc/sf_and_dist/svg-admon/caution.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/svg-admon/caution.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/svg-admon/home.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/svg-admon/home.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/svg-admon/important.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/svg-admon/important.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/svg-admon/next.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/svg-admon/next.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/svg-admon/note.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/svg-admon/note.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/svg-admon/prev.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/svg-admon/prev.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/svg-admon/tip.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/svg-admon/tip.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/svg-admon/up.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/svg-admon/up.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/svg-admon/warning.svg
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/svg-admon/warning.svg
   branches/bcbboost/libs/math/doc/sf_and_dist/test_data.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/test_data.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/test_html4_symbols.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/test_html4_symbols.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/tgamma.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/tgamma.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/thread_safety.qbk
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/thread_safety.qbk
   branches/bcbboost/libs/math/doc/sf_and_dist/win32_nmake.mak
      - copied unchanged from r39819, /trunk/libs/math/doc/sf_and_dist/win32_nmake.mak
   branches/bcbboost/libs/math/doc/svg-admon/
      - copied from r39970, /trunk/libs/math/doc/svg-admon/
   branches/bcbboost/libs/math/doc/svg-admon/caution.svg
      - copied unchanged from r39970, /trunk/libs/math/doc/svg-admon/caution.svg
   branches/bcbboost/libs/math/doc/svg-admon/home.svg
      - copied unchanged from r39970, /trunk/libs/math/doc/svg-admon/home.svg
   branches/bcbboost/libs/math/doc/svg-admon/important.svg
      - copied unchanged from r39970, /trunk/libs/math/doc/svg-admon/important.svg
   branches/bcbboost/libs/math/doc/svg-admon/next.svg
      - copied unchanged from r39970, /trunk/libs/math/doc/svg-admon/next.svg
   branches/bcbboost/libs/math/doc/svg-admon/note.svg
      - copied unchanged from r39970, /trunk/libs/math/doc/svg-admon/note.svg
   branches/bcbboost/libs/math/doc/svg-admon/prev.svg
      - copied unchanged from r39970, /trunk/libs/math/doc/svg-admon/prev.svg
   branches/bcbboost/libs/math/doc/svg-admon/tip.svg
      - copied unchanged from r39970, /trunk/libs/math/doc/svg-admon/tip.svg
   branches/bcbboost/libs/math/doc/svg-admon/up.svg
      - copied unchanged from r39970, /trunk/libs/math/doc/svg-admon/up.svg
   branches/bcbboost/libs/math/doc/svg-admon/warning.svg
      - copied unchanged from r39970, /trunk/libs/math/doc/svg-admon/warning.svg
   branches/bcbboost/libs/math/example/
      - copied from r39819, /trunk/libs/math/example/
   branches/bcbboost/libs/math/example/Jamfile.v2
      - copied unchanged from r39819, /trunk/libs/math/example/Jamfile.v2
   branches/bcbboost/libs/math/example/binomial_coinflip_example.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/binomial_coinflip_example.cpp
   branches/bcbboost/libs/math/example/binomial_confidence_limits.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/binomial_confidence_limits.cpp
   branches/bcbboost/libs/math/example/binomial_example3.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/binomial_example3.cpp
   branches/bcbboost/libs/math/example/binomial_example_nag.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/binomial_example_nag.cpp
   branches/bcbboost/libs/math/example/binomial_quiz_example.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/binomial_quiz_example.cpp
   branches/bcbboost/libs/math/example/binomial_sample_sizes.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/binomial_sample_sizes.cpp
   branches/bcbboost/libs/math/example/c_error_policy_example.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/c_error_policy_example.cpp
   branches/bcbboost/libs/math/example/chi_square_std_dev_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/chi_square_std_dev_test.cpp
   branches/bcbboost/libs/math/example/distribution_construction.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/distribution_construction.cpp
   branches/bcbboost/libs/math/example/error_handling_example.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/error_handling_example.cpp
   branches/bcbboost/libs/math/example/error_policies_example.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/error_policies_example.cpp
   branches/bcbboost/libs/math/example/error_policy_example.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/error_policy_example.cpp
   branches/bcbboost/libs/math/example/f_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/f_test.cpp
   branches/bcbboost/libs/math/example/find_location_example.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/find_location_example.cpp
   branches/bcbboost/libs/math/example/find_mean_and_sd_normal.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/find_mean_and_sd_normal.cpp
   branches/bcbboost/libs/math/example/find_root_example.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/find_root_example.cpp
   branches/bcbboost/libs/math/example/find_scale_example.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/find_scale_example.cpp
   branches/bcbboost/libs/math/example/neg_binom_confidence_limits.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/neg_binom_confidence_limits.cpp
   branches/bcbboost/libs/math/example/neg_binomial_sample_sizes.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/neg_binomial_sample_sizes.cpp
   branches/bcbboost/libs/math/example/negative_binomial_example1.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/negative_binomial_example1.cpp
   branches/bcbboost/libs/math/example/negative_binomial_example2.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/negative_binomial_example2.cpp
   branches/bcbboost/libs/math/example/normal_misc_examples.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/normal_misc_examples.cpp
   branches/bcbboost/libs/math/example/policy_eg_1.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_eg_1.cpp
   branches/bcbboost/libs/math/example/policy_eg_10.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_eg_10.cpp
   branches/bcbboost/libs/math/example/policy_eg_2.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_eg_2.cpp
   branches/bcbboost/libs/math/example/policy_eg_3.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_eg_3.cpp
   branches/bcbboost/libs/math/example/policy_eg_4.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_eg_4.cpp
   branches/bcbboost/libs/math/example/policy_eg_5.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_eg_5.cpp
   branches/bcbboost/libs/math/example/policy_eg_6.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_eg_6.cpp
   branches/bcbboost/libs/math/example/policy_eg_7.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_eg_7.cpp
   branches/bcbboost/libs/math/example/policy_eg_8.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_eg_8.cpp
   branches/bcbboost/libs/math/example/policy_eg_9.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_eg_9.cpp
   branches/bcbboost/libs/math/example/policy_ref_snip1.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_ref_snip1.cpp
   branches/bcbboost/libs/math/example/policy_ref_snip10.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_ref_snip10.cpp
   branches/bcbboost/libs/math/example/policy_ref_snip11.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_ref_snip11.cpp
   branches/bcbboost/libs/math/example/policy_ref_snip12.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_ref_snip12.cpp
   branches/bcbboost/libs/math/example/policy_ref_snip13.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_ref_snip13.cpp
   branches/bcbboost/libs/math/example/policy_ref_snip2.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_ref_snip2.cpp
   branches/bcbboost/libs/math/example/policy_ref_snip3.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_ref_snip3.cpp
   branches/bcbboost/libs/math/example/policy_ref_snip4.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_ref_snip4.cpp
   branches/bcbboost/libs/math/example/policy_ref_snip5.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_ref_snip5.cpp
   branches/bcbboost/libs/math/example/policy_ref_snip6.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_ref_snip6.cpp
   branches/bcbboost/libs/math/example/policy_ref_snip7.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_ref_snip7.cpp
   branches/bcbboost/libs/math/example/policy_ref_snip8.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_ref_snip8.cpp
   branches/bcbboost/libs/math/example/policy_ref_snip9.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/policy_ref_snip9.cpp
   branches/bcbboost/libs/math/example/students_t_example1.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/students_t_example1.cpp
   branches/bcbboost/libs/math/example/students_t_example2.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/students_t_example2.cpp
   branches/bcbboost/libs/math/example/students_t_example3.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/students_t_example3.cpp
   branches/bcbboost/libs/math/example/students_t_single_sample.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/students_t_single_sample.cpp
   branches/bcbboost/libs/math/example/students_t_two_samples.cpp
      - copied unchanged from r39819, /trunk/libs/math/example/students_t_two_samples.cpp
   branches/bcbboost/libs/math/minimax/
      - copied from r39819, /trunk/libs/math/minimax/
   branches/bcbboost/libs/math/minimax/f.cpp
      - copied unchanged from r39819, /trunk/libs/math/minimax/f.cpp
   branches/bcbboost/libs/math/minimax/main.cpp
      - copied unchanged from r39819, /trunk/libs/math/minimax/main.cpp
   branches/bcbboost/libs/math/performance/
      - copied from r39819, /trunk/libs/math/performance/
   branches/bcbboost/libs/math/performance/Jamfile.v2
      - copied unchanged from r39819, /trunk/libs/math/performance/Jamfile.v2
   branches/bcbboost/libs/math/performance/distributions.cpp
      - copied unchanged from r39819, /trunk/libs/math/performance/distributions.cpp
   branches/bcbboost/libs/math/performance/gcc-3.4-w32.log
      - copied unchanged from r39819, /trunk/libs/math/performance/gcc-3.4-w32.log
   branches/bcbboost/libs/math/performance/gcc-4.2-linux.log
      - copied unchanged from r39819, /trunk/libs/math/performance/gcc-4.2-linux.log
   branches/bcbboost/libs/math/performance/gcc-4.2-long-double-linux.log
      - copied unchanged from r39819, /trunk/libs/math/performance/gcc-4.2-long-double-linux.log
   branches/bcbboost/libs/math/performance/intel-10-linux.log
      - copied unchanged from r39819, /trunk/libs/math/performance/intel-10-linux.log
   branches/bcbboost/libs/math/performance/intel-10-w32.log
      - copied unchanged from r39819, /trunk/libs/math/performance/intel-10-w32.log
   branches/bcbboost/libs/math/performance/main.cpp
      - copied unchanged from r39819, /trunk/libs/math/performance/main.cpp
   branches/bcbboost/libs/math/performance/msvc-8-debug.log
      - copied unchanged from r39819, /trunk/libs/math/performance/msvc-8-debug.log
   branches/bcbboost/libs/math/performance/msvc-8.log
      - copied unchanged from r39819, /trunk/libs/math/performance/msvc-8.log
   branches/bcbboost/libs/math/performance/performance_measure.hpp
      - copied unchanged from r39819, /trunk/libs/math/performance/performance_measure.hpp
   branches/bcbboost/libs/math/performance/required_defines.hpp
      - copied unchanged from r39819, /trunk/libs/math/performance/required_defines.hpp
   branches/bcbboost/libs/math/performance/test_erf.cpp
      - copied unchanged from r39819, /trunk/libs/math/performance/test_erf.cpp
   branches/bcbboost/libs/math/performance/test_gamma.cpp
      - copied unchanged from r39819, /trunk/libs/math/performance/test_gamma.cpp
   branches/bcbboost/libs/math/performance/test_ibeta.cpp
      - copied unchanged from r39819, /trunk/libs/math/performance/test_ibeta.cpp
   branches/bcbboost/libs/math/performance/test_igamma.cpp
      - copied unchanged from r39819, /trunk/libs/math/performance/test_igamma.cpp
   branches/bcbboost/libs/math/performance/test_polynomial.cpp
      - copied unchanged from r39819, /trunk/libs/math/performance/test_polynomial.cpp
   branches/bcbboost/libs/math/performance/test_reference.cpp
      - copied unchanged from r39819, /trunk/libs/math/performance/test_reference.cpp
   branches/bcbboost/libs/math/test/acosh_test.hpp
      - copied unchanged from r39819, /trunk/libs/math/test/acosh_test.hpp
   branches/bcbboost/libs/math/test/asinh_test.hpp
      - copied unchanged from r39819, /trunk/libs/math/test/asinh_test.hpp
   branches/bcbboost/libs/math/test/assoc_legendre_p.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/assoc_legendre_p.ipp
   branches/bcbboost/libs/math/test/atanh_test.hpp
      - copied unchanged from r39819, /trunk/libs/math/test/atanh_test.hpp
   branches/bcbboost/libs/math/test/bessel_i_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/bessel_i_data.ipp
   branches/bcbboost/libs/math/test/bessel_i_int_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/bessel_i_int_data.ipp
   branches/bcbboost/libs/math/test/bessel_j_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/bessel_j_data.ipp
   branches/bcbboost/libs/math/test/bessel_j_int_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/bessel_j_int_data.ipp
   branches/bcbboost/libs/math/test/bessel_j_large_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/bessel_j_large_data.ipp
   branches/bcbboost/libs/math/test/bessel_k_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/bessel_k_data.ipp
   branches/bcbboost/libs/math/test/bessel_k_int_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/bessel_k_int_data.ipp
   branches/bcbboost/libs/math/test/bessel_y01_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/bessel_y01_data.ipp
   branches/bcbboost/libs/math/test/bessel_yn_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/bessel_yn_data.ipp
   branches/bcbboost/libs/math/test/bessel_yv_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/bessel_yv_data.ipp
   branches/bcbboost/libs/math/test/beta_exp_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/beta_exp_data.ipp
   branches/bcbboost/libs/math/test/beta_med_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/beta_med_data.ipp
   branches/bcbboost/libs/math/test/beta_small_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/beta_small_data.ipp
   branches/bcbboost/libs/math/test/binomial_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/binomial_data.ipp
   branches/bcbboost/libs/math/test/binomial_large_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/binomial_large_data.ipp
   branches/bcbboost/libs/math/test/binomial_quantile.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/binomial_quantile.ipp
   branches/bcbboost/libs/math/test/cbrt_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/cbrt_data.ipp
   branches/bcbboost/libs/math/test/compile_test/
      - copied from r39819, /trunk/libs/math/test/compile_test/
   branches/bcbboost/libs/math/test/compile_test/dist_bernoulli_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_bernoulli_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_beta_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_beta_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_binomial_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_binomial_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_cauchy_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_cauchy_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_chi_squared_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_chi_squared_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_complement_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_complement_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_exponential_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_exponential_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_fisher_f_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_fisher_f_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_gamma_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_gamma_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_lognormal_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_lognormal_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_neg_binom_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_neg_binom_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_normal_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_normal_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_pareto_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_pareto_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_poisson_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_poisson_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_students_t_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_students_t_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_triangular_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_triangular_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_uniform_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_uniform_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/dist_weibull_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/dist_weibull_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/distribution_concept_check.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/distribution_concept_check.cpp
   branches/bcbboost/libs/math/test/compile_test/generate.sh
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/generate.sh
   branches/bcbboost/libs/math/test/compile_test/instantiate.hpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/instantiate.hpp
   branches/bcbboost/libs/math/test/compile_test/sf_bessel_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_bessel_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_beta_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_beta_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_binomial_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_binomial_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_cbrt_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_cbrt_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_cos_pi_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_cos_pi_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_digamma_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_digamma_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_ellint_1_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_ellint_1_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_ellint_2_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_ellint_2_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_ellint_3_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_ellint_3_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_ellint_rc_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_ellint_rc_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_ellint_rd_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_ellint_rd_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_ellint_rf_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_ellint_rf_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_ellint_rj_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_ellint_rj_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_erf_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_erf_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_expm1_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_expm1_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_factorials_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_factorials_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_fpclassify_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_fpclassify_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_gamma_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_gamma_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_hermite_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_hermite_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_hypot_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_hypot_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_laguerre_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_laguerre_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_lanczos_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_lanczos_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_legendre_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_legendre_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_log1p_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_log1p_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_math_fwd_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_math_fwd_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_powm1_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_powm1_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_sign_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_sign_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_sin_pi_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_sin_pi_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_sinc_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_sinc_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_sinhc_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_sinhc_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_sph_harm_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_sph_harm_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/sf_sqrt1pm1_incl_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/sf_sqrt1pm1_incl_test.cpp
   branches/bcbboost/libs/math/test/compile_test/std_real_concept_check.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/std_real_concept_check.cpp
   branches/bcbboost/libs/math/test/compile_test/test_compile_result.hpp
      - copied, changed from r39819, /trunk/libs/math/test/compile_test/test_compile_result.hpp
   branches/bcbboost/libs/math/test/compile_test/test_traits.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/test_traits.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_config_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_config_inc_test.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_fraction_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_fraction_inc_test.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_minima_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_minima_inc_test.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_polynomial_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_polynomial_inc_test.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_precision_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_precision_inc_test.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_rational_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_rational_inc_test.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_real_cast_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_real_cast_inc_test.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_remez_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_remez_inc_test.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_roots_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_roots_inc_test.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_series_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_series_inc_test.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_solve_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_solve_inc_test.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_stats_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_stats_inc_test.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_test_data_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_test_data_inc_test.cpp
   branches/bcbboost/libs/math/test/compile_test/tools_test_inc_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/compile_test/tools_test_inc_test.cpp
   branches/bcbboost/libs/math/test/digamma_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/digamma_data.ipp
   branches/bcbboost/libs/math/test/digamma_neg_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/digamma_neg_data.ipp
   branches/bcbboost/libs/math/test/digamma_root_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/digamma_root_data.ipp
   branches/bcbboost/libs/math/test/digamma_small_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/digamma_small_data.ipp
   branches/bcbboost/libs/math/test/ellint_e2_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ellint_e2_data.ipp
   branches/bcbboost/libs/math/test/ellint_e_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ellint_e_data.ipp
   branches/bcbboost/libs/math/test/ellint_f_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ellint_f_data.ipp
   branches/bcbboost/libs/math/test/ellint_k_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ellint_k_data.ipp
   branches/bcbboost/libs/math/test/ellint_pi2_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ellint_pi2_data.ipp
   branches/bcbboost/libs/math/test/ellint_pi3_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ellint_pi3_data.ipp
   branches/bcbboost/libs/math/test/ellint_pi3_large_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ellint_pi3_large_data.ipp
   branches/bcbboost/libs/math/test/ellint_rc_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ellint_rc_data.ipp
   branches/bcbboost/libs/math/test/ellint_rd_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ellint_rd_data.ipp
   branches/bcbboost/libs/math/test/ellint_rf_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ellint_rf_data.ipp
   branches/bcbboost/libs/math/test/ellint_rj_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ellint_rj_data.ipp
   branches/bcbboost/libs/math/test/erf_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/erf_data.ipp
   branches/bcbboost/libs/math/test/erf_inv_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/erf_inv_data.ipp
   branches/bcbboost/libs/math/test/erf_large_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/erf_large_data.ipp
   branches/bcbboost/libs/math/test/erf_small_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/erf_small_data.ipp
   branches/bcbboost/libs/math/test/erfc_inv_big_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/erfc_inv_big_data.ipp
   branches/bcbboost/libs/math/test/erfc_inv_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/erfc_inv_data.ipp
   branches/bcbboost/libs/math/test/functor.hpp
      - copied unchanged from r39970, /trunk/libs/math/test/functor.hpp
   branches/bcbboost/libs/math/test/gamma_inv_big_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/gamma_inv_big_data.ipp
   branches/bcbboost/libs/math/test/gamma_inv_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/gamma_inv_data.ipp
   branches/bcbboost/libs/math/test/gamma_inv_small_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/gamma_inv_small_data.ipp
   branches/bcbboost/libs/math/test/handle_test_result.hpp
      - copied unchanged from r39819, /trunk/libs/math/test/handle_test_result.hpp
   branches/bcbboost/libs/math/test/hermite.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/hermite.ipp
   branches/bcbboost/libs/math/test/ibeta_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ibeta_data.ipp
   branches/bcbboost/libs/math/test/ibeta_int_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ibeta_int_data.ipp
   branches/bcbboost/libs/math/test/ibeta_inv_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ibeta_inv_data.ipp
   branches/bcbboost/libs/math/test/ibeta_inva_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ibeta_inva_data.ipp
   branches/bcbboost/libs/math/test/ibeta_large_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ibeta_large_data.ipp
   branches/bcbboost/libs/math/test/ibeta_small_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/ibeta_small_data.ipp
   branches/bcbboost/libs/math/test/igamma_big_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/igamma_big_data.ipp
   branches/bcbboost/libs/math/test/igamma_int_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/igamma_int_data.ipp
   branches/bcbboost/libs/math/test/igamma_inva_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/igamma_inva_data.ipp
   branches/bcbboost/libs/math/test/igamma_med_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/igamma_med_data.ipp
   branches/bcbboost/libs/math/test/igamma_small_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/igamma_small_data.ipp
   branches/bcbboost/libs/math/test/laguerre2.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/laguerre2.ipp
   branches/bcbboost/libs/math/test/laguerre3.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/laguerre3.ipp
   branches/bcbboost/libs/math/test/legendre_p.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/legendre_p.ipp
   branches/bcbboost/libs/math/test/legendre_p_large.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/legendre_p_large.ipp
   branches/bcbboost/libs/math/test/log1p_expm1_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/log1p_expm1_data.ipp
   branches/bcbboost/libs/math/test/negative_binomial_quantile.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/negative_binomial_quantile.ipp
   branches/bcbboost/libs/math/test/poisson_quantile.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/poisson_quantile.ipp
   branches/bcbboost/libs/math/test/powm1_sqrtp1m1_test.cpp
      - copied, changed from r39819, /trunk/libs/math/test/powm1_sqrtp1m1_test.cpp
   branches/bcbboost/libs/math/test/sinc_test.hpp
      - copied unchanged from r39819, /trunk/libs/math/test/sinc_test.hpp
   branches/bcbboost/libs/math/test/sinhc_test.hpp
      - copied unchanged from r39819, /trunk/libs/math/test/sinhc_test.hpp
   branches/bcbboost/libs/math/test/special_functions_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/special_functions_test.cpp
   branches/bcbboost/libs/math/test/sph_bessel_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/sph_bessel_data.ipp
   branches/bcbboost/libs/math/test/sph_neumann_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/sph_neumann_data.ipp
   branches/bcbboost/libs/math/test/spherical_harmonic.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/spherical_harmonic.ipp
   branches/bcbboost/libs/math/test/std_real_concept_check.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/std_real_concept_check.cpp
   branches/bcbboost/libs/math/test/test_bernoulli.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_bernoulli.cpp
   branches/bcbboost/libs/math/test/test_bessel_hooks.hpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_bessel_hooks.hpp
   branches/bcbboost/libs/math/test/test_bessel_i.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_bessel_i.cpp
   branches/bcbboost/libs/math/test/test_bessel_j.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_bessel_j.cpp
   branches/bcbboost/libs/math/test/test_bessel_k.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_bessel_k.cpp
   branches/bcbboost/libs/math/test/test_bessel_y.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_bessel_y.cpp
   branches/bcbboost/libs/math/test/test_beta.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_beta.cpp
   branches/bcbboost/libs/math/test/test_beta_dist.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_beta_dist.cpp
   branches/bcbboost/libs/math/test/test_beta_hooks.hpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_beta_hooks.hpp
   branches/bcbboost/libs/math/test/test_binomial.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_binomial.cpp
   branches/bcbboost/libs/math/test/test_binomial_coeff.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_binomial_coeff.cpp
   branches/bcbboost/libs/math/test/test_carlson.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_carlson.cpp
   branches/bcbboost/libs/math/test/test_cauchy.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_cauchy.cpp
   branches/bcbboost/libs/math/test/test_cbrt.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_cbrt.cpp
   branches/bcbboost/libs/math/test/test_chi_squared.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_chi_squared.cpp
   branches/bcbboost/libs/math/test/test_classify.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_classify.cpp
   branches/bcbboost/libs/math/test/test_constants.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_constants.cpp
   branches/bcbboost/libs/math/test/test_digamma.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_digamma.cpp
   branches/bcbboost/libs/math/test/test_dist_overloads.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_dist_overloads.cpp
   branches/bcbboost/libs/math/test/test_ellint_1.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_ellint_1.cpp
   branches/bcbboost/libs/math/test/test_ellint_2.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_ellint_2.cpp
   branches/bcbboost/libs/math/test/test_ellint_3.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_ellint_3.cpp
   branches/bcbboost/libs/math/test/test_erf.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_erf.cpp
   branches/bcbboost/libs/math/test/test_erf_hooks.hpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_erf_hooks.hpp
   branches/bcbboost/libs/math/test/test_error_handling.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_error_handling.cpp
   branches/bcbboost/libs/math/test/test_exponential_dist.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_exponential_dist.cpp
   branches/bcbboost/libs/math/test/test_extreme_value.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_extreme_value.cpp
   branches/bcbboost/libs/math/test/test_factorials.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_factorials.cpp
   branches/bcbboost/libs/math/test/test_find_location.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_find_location.cpp
   branches/bcbboost/libs/math/test/test_find_scale.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_find_scale.cpp
   branches/bcbboost/libs/math/test/test_fisher_f.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_fisher_f.cpp
   branches/bcbboost/libs/math/test/test_gamma.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_gamma.cpp
   branches/bcbboost/libs/math/test/test_gamma_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/test_gamma_data.ipp
   branches/bcbboost/libs/math/test/test_gamma_dist.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_gamma_dist.cpp
   branches/bcbboost/libs/math/test/test_gamma_hooks.hpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_gamma_hooks.hpp
   branches/bcbboost/libs/math/test/test_hermite.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_hermite.cpp
   branches/bcbboost/libs/math/test/test_ibeta.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_ibeta.cpp
   branches/bcbboost/libs/math/test/test_ibeta_inv.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_ibeta_inv.cpp
   branches/bcbboost/libs/math/test/test_ibeta_inv_ab.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_ibeta_inv_ab.cpp
   branches/bcbboost/libs/math/test/test_igamma.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_igamma.cpp
   branches/bcbboost/libs/math/test/test_igamma_inv.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_igamma_inv.cpp
   branches/bcbboost/libs/math/test/test_igamma_inva.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_igamma_inva.cpp
   branches/bcbboost/libs/math/test/test_instantiate1.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_instantiate1.cpp
   branches/bcbboost/libs/math/test/test_instantiate2.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_instantiate2.cpp
   branches/bcbboost/libs/math/test/test_laguerre.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_laguerre.cpp
   branches/bcbboost/libs/math/test/test_legendre.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_legendre.cpp
   branches/bcbboost/libs/math/test/test_legendre_hooks.hpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_legendre_hooks.hpp
   branches/bcbboost/libs/math/test/test_lognormal.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_lognormal.cpp
   branches/bcbboost/libs/math/test/test_minima.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_minima.cpp
   branches/bcbboost/libs/math/test/test_negative_binomial.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_negative_binomial.cpp
   branches/bcbboost/libs/math/test/test_normal.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_normal.cpp
   branches/bcbboost/libs/math/test/test_pareto.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_pareto.cpp
   branches/bcbboost/libs/math/test/test_poisson.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_poisson.cpp
   branches/bcbboost/libs/math/test/test_policy.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_policy.cpp
   branches/bcbboost/libs/math/test/test_policy_sf.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_policy_sf.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/
      - copied from r39819, /trunk/libs/math/test/test_rational_instances/
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational.hpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational.hpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_double1.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_double1.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_double2.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_double2.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_double3.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_double3.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_double4.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_double4.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_double5.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_double5.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_float1.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_float1.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_float2.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_float2.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_float3.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_float3.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_float4.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_float4.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_ldouble1.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_ldouble1.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_ldouble2.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_ldouble2.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_ldouble3.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_ldouble3.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_ldouble4.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_ldouble4.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_ldouble5.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_ldouble5.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept1.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_real_concept1.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept2.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_real_concept2.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept3.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_real_concept3.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept4.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_real_concept4.cpp
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept5.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_real_concept5.cpp
   branches/bcbboost/libs/math/test/test_rationals.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rationals.cpp
   branches/bcbboost/libs/math/test/test_rayleigh.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_rayleigh.cpp
   branches/bcbboost/libs/math/test/test_remez.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_remez.cpp
   branches/bcbboost/libs/math/test/test_roots.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_roots.cpp
   branches/bcbboost/libs/math/test/test_spherical_harmonic.cpp
      - copied, changed from r39819, /trunk/libs/math/test/test_spherical_harmonic.cpp
   branches/bcbboost/libs/math/test/test_students_t.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_students_t.cpp
   branches/bcbboost/libs/math/test/test_tgamma_ratio.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_tgamma_ratio.cpp
   branches/bcbboost/libs/math/test/test_toms748_solve.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_toms748_solve.cpp
   branches/bcbboost/libs/math/test/test_triangular.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_triangular.cpp
   branches/bcbboost/libs/math/test/test_uniform.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_uniform.cpp
   branches/bcbboost/libs/math/test/test_weibull.cpp
      - copied unchanged from r39819, /trunk/libs/math/test/test_weibull.cpp
   branches/bcbboost/libs/math/test/tgamma_delta_ratio_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/tgamma_delta_ratio_data.ipp
   branches/bcbboost/libs/math/test/tgamma_delta_ratio_int.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/tgamma_delta_ratio_int.ipp
   branches/bcbboost/libs/math/test/tgamma_delta_ratio_int2.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/tgamma_delta_ratio_int2.ipp
   branches/bcbboost/libs/math/test/tgamma_ratio_data.ipp
      - copied unchanged from r39819, /trunk/libs/math/test/tgamma_ratio_data.ipp
   branches/bcbboost/libs/math/tools/bessel_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/bessel_data.cpp
   branches/bcbboost/libs/math/tools/beta_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/beta_data.cpp
   branches/bcbboost/libs/math/tools/carlson_ellint_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/carlson_ellint_data.cpp
   branches/bcbboost/libs/math/tools/cbrt_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/cbrt_data.cpp
   branches/bcbboost/libs/math/tools/digamma_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/digamma_data.cpp
   branches/bcbboost/libs/math/tools/ellint_e_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/ellint_e_data.cpp
   branches/bcbboost/libs/math/tools/ellint_f_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/ellint_f_data.cpp
   branches/bcbboost/libs/math/tools/ellint_k_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/ellint_k_data.cpp
   branches/bcbboost/libs/math/tools/ellint_pi2_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/ellint_pi2_data.cpp
   branches/bcbboost/libs/math/tools/ellint_pi3_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/ellint_pi3_data.cpp
   branches/bcbboost/libs/math/tools/erf_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/erf_data.cpp
   branches/bcbboost/libs/math/tools/factorial_tables.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/factorial_tables.cpp
   branches/bcbboost/libs/math/tools/gamma_P_inva_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/gamma_P_inva_data.cpp
   branches/bcbboost/libs/math/tools/generate_rational_code.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/generate_rational_code.cpp
   branches/bcbboost/libs/math/tools/generate_rational_test.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/generate_rational_test.cpp
   branches/bcbboost/libs/math/tools/hermite_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/hermite_data.cpp
   branches/bcbboost/libs/math/tools/ibeta_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/ibeta_data.cpp
   branches/bcbboost/libs/math/tools/ibeta_inv_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/ibeta_inv_data.cpp
   branches/bcbboost/libs/math/tools/ibeta_invab_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/ibeta_invab_data.cpp
   branches/bcbboost/libs/math/tools/igamma_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/igamma_data.cpp
   branches/bcbboost/libs/math/tools/igamma_temme_large_coef.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/igamma_temme_large_coef.cpp
   branches/bcbboost/libs/math/tools/laguerre_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/laguerre_data.cpp
   branches/bcbboost/libs/math/tools/lanczos_generator.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/lanczos_generator.cpp
   branches/bcbboost/libs/math/tools/legendre_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/legendre_data.cpp
   branches/bcbboost/libs/math/tools/log1p_expm1_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/log1p_expm1_data.cpp
   branches/bcbboost/libs/math/tools/ntl_rr_digamma.hpp
      - copied unchanged from r39819, /trunk/libs/math/tools/ntl_rr_digamma.hpp
   branches/bcbboost/libs/math/tools/ntl_rr_lanczos.hpp
      - copied unchanged from r39819, /trunk/libs/math/tools/ntl_rr_lanczos.hpp
   branches/bcbboost/libs/math/tools/process_perf_results.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/process_perf_results.cpp
   branches/bcbboost/libs/math/tools/rational_tests.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/rational_tests.cpp
   branches/bcbboost/libs/math/tools/spherical_harmonic_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/spherical_harmonic_data.cpp
   branches/bcbboost/libs/math/tools/tgamma_ratio_data.cpp
      - copied unchanged from r39819, /trunk/libs/math/tools/tgamma_ratio_data.cpp
   branches/bcbboost/libs/math/vc71_fix/
      - copied from r39819, /trunk/libs/math/vc71_fix/
   branches/bcbboost/libs/math/vc71_fix/Jamfile.v2
      - copied unchanged from r39819, /trunk/libs/math/vc71_fix/Jamfile.v2
   branches/bcbboost/libs/math/vc71_fix/instantiate_all.cpp
      - copied unchanged from r39819, /trunk/libs/math/vc71_fix/instantiate_all.cpp
   branches/bcbboost/libs/multi_index/example/fun_key.cpp
      - copied unchanged from r39970, /trunk/libs/multi_index/example/fun_key.cpp
   branches/bcbboost/libs/multi_index/example/ip_allocator.cpp
      - copied unchanged from r39970, /trunk/libs/multi_index/example/ip_allocator.cpp
   branches/bcbboost/libs/multi_index/test/non_std_allocator.hpp
      - copied unchanged from r39970, /trunk/libs/multi_index/test/non_std_allocator.hpp
   branches/bcbboost/libs/multi_index/test/test_serialization3.cpp
      - copied unchanged from r39970, /trunk/libs/multi_index/test/test_serialization3.cpp
   branches/bcbboost/libs/multi_index/test/test_serialization3.hpp
      - copied unchanged from r39970, /trunk/libs/multi_index/test/test_serialization3.hpp
   branches/bcbboost/libs/thread/test/test_lock_concept.cpp
      - copied unchanged from r39970, /trunk/libs/thread/test/test_lock_concept.cpp
   branches/bcbboost/libs/thread/test/test_shared_mutex.cpp
      - copied unchanged from r39970, /trunk/libs/thread/test/test_shared_mutex.cpp
   branches/bcbboost/libs/typeof/test/experimental_1.cpp
      - copied unchanged from r39819, /trunk/libs/typeof/test/experimental_1.cpp
   branches/bcbboost/libs/typeof/test/experimental_2.cpp
      - copied unchanged from r39819, /trunk/libs/typeof/test/experimental_2.cpp
   branches/bcbboost/libs/typeof/test/experimental_3.cpp
      - copied unchanged from r39819, /trunk/libs/typeof/test/experimental_3.cpp
   branches/bcbboost/libs/typeof/test/experimental_4.cpp
      - copied unchanged from r39819, /trunk/libs/typeof/test/experimental_4.cpp
   branches/bcbboost/libs/xpressive/doc/symbols.qbk
      - copied unchanged from r39970, /trunk/libs/xpressive/doc/symbols.qbk
   branches/bcbboost/libs/xpressive/example/numbers.cpp
      - copied, changed from r39819, /trunk/libs/xpressive/example/numbers.cpp
   branches/bcbboost/libs/xpressive/test/test_assert.cpp
      - copied unchanged from r39970, /trunk/libs/xpressive/test/test_assert.cpp
   branches/bcbboost/tools/build/v2/boost_build.png
      - copied unchanged from r39970, /trunk/tools/build/v2/boost_build.png
Removed:
   branches/bcbboost/boost/multi_index/detail/def_ctor_tuple_cons.hpp
   branches/bcbboost/libs/math/doc/math-background.qbk
   branches/bcbboost/libs/math/doc/math-gcd.qbk
   branches/bcbboost/libs/math/doc/math-octonion.qbk
   branches/bcbboost/libs/math/doc/math-quaternion.qbk
   branches/bcbboost/libs/math/doc/math-sf.qbk
   branches/bcbboost/libs/math/doc/math-tr1.qbk
   branches/bcbboost/libs/multi_index/example/memfun_key.cpp
   branches/bcbboost/libs/thread/src/mutex.cpp
   branches/bcbboost/libs/thread/src/mutex.inl
   branches/bcbboost/libs/thread/src/once.cpp
   branches/bcbboost/libs/thread/src/recursive_mutex.cpp
Properties modified:
   branches/bcbboost/boost/math/bindings/rr.hpp (props changed)
   branches/bcbboost/boost/math/distributions/find_location.hpp (props changed)
   branches/bcbboost/boost/math/distributions/find_scale.hpp (props changed)
   branches/bcbboost/boost/math/tools/traits.hpp (props changed)
   branches/bcbboost/boost/math/tools/workaround.hpp (props changed)
Text files modified:
   branches/bcbboost/boost/archive/codecvt_null.hpp | 5
   branches/bcbboost/boost/archive/detail/basic_oarchive.hpp | 7
   branches/bcbboost/boost/archive/detail/interface_iarchive.hpp | 6
   branches/bcbboost/boost/archive/detail/interface_oarchive.hpp | 6
   branches/bcbboost/boost/asio/datagram_socket_service.hpp | 3
   branches/bcbboost/boost/asio/deadline_timer_service.hpp | 3
   branches/bcbboost/boost/asio/detail/socket_ops.hpp | 7
   branches/bcbboost/boost/asio/impl/io_service.ipp | 1
   branches/bcbboost/boost/asio/io_service.hpp | 5
   branches/bcbboost/boost/asio/socket_acceptor_service.hpp | 3
   branches/bcbboost/boost/asio/stream_socket_service.hpp | 3
   branches/bcbboost/boost/detail/allocator_utilities.hpp | 12
   branches/bcbboost/boost/functional/hash/hash.hpp | 11
   branches/bcbboost/boost/graph/planar_detail/face_iterators.hpp | 13
   branches/bcbboost/boost/interprocess/detail/atomic.hpp | 2
   branches/bcbboost/boost/intrusive/list.hpp | 2
   branches/bcbboost/boost/math/concepts/real_concept.hpp | 16
   branches/bcbboost/boost/math/concepts/std_real_concept.hpp | 2
   branches/bcbboost/boost/math/distributions/bernoulli.hpp | 4
   branches/bcbboost/boost/math/distributions/beta.hpp | 4
   branches/bcbboost/boost/math/distributions/binomial.hpp | 4
   branches/bcbboost/boost/math/distributions/negative_binomial.hpp | 6
   branches/bcbboost/boost/math/distributions/pareto.hpp | 2
   branches/bcbboost/boost/math/distributions/poisson.hpp | 4
   branches/bcbboost/boost/math/special_functions/log1p.hpp | 2
   branches/bcbboost/boost/math/tools/config.hpp | 44 +-
   branches/bcbboost/boost/math/tools/test.hpp | 4
   branches/bcbboost/boost/multi_index/composite_key.hpp | 4
   branches/bcbboost/boost/multi_index/detail/auto_space.hpp | 26 +
   branches/bcbboost/boost/multi_index/detail/bidir_node_iterator.hpp | 16
   branches/bcbboost/boost/multi_index/detail/bucket_array.hpp | 33 +
   branches/bcbboost/boost/multi_index/detail/copy_map.hpp | 45 +-
   branches/bcbboost/boost/multi_index/detail/hash_index_args.hpp | 6
   branches/bcbboost/boost/multi_index/detail/hash_index_iterator.hpp | 16
   branches/bcbboost/boost/multi_index/detail/hash_index_node.hpp | 112 ++++-
   branches/bcbboost/boost/multi_index/detail/header_holder.hpp | 8
   branches/bcbboost/boost/multi_index/detail/index_base.hpp | 12
   branches/bcbboost/boost/multi_index/detail/index_loader.hpp | 4
   branches/bcbboost/boost/multi_index/detail/index_matcher.hpp | 4
   branches/bcbboost/boost/multi_index/detail/index_node_base.hpp | 13
   branches/bcbboost/boost/multi_index/detail/iter_adaptor.hpp | 54 +++
   branches/bcbboost/boost/multi_index/detail/modify_key_adaptor.hpp | 10
   branches/bcbboost/boost/multi_index/detail/node_type.hpp | 4
   branches/bcbboost/boost/multi_index/detail/ord_index_node.hpp | 340 ++++++++++++--------
   branches/bcbboost/boost/multi_index/detail/ord_index_ops.hpp | 80 +++-
   branches/bcbboost/boost/multi_index/detail/rnd_index_loader.hpp | 63 ++-
   branches/bcbboost/boost/multi_index/detail/rnd_index_node.hpp | 159 ++++++---
   branches/bcbboost/boost/multi_index/detail/rnd_index_ops.hpp | 64 ++-
   branches/bcbboost/boost/multi_index/detail/rnd_index_ptr_array.hpp | 34 +
   branches/bcbboost/boost/multi_index/detail/rnd_node_iterator.hpp | 44 +-
   branches/bcbboost/boost/multi_index/detail/seq_index_node.hpp | 138 +++++--
   branches/bcbboost/boost/multi_index/detail/seq_index_ops.hpp | 81 ++--
   branches/bcbboost/boost/multi_index/detail/uintptr_type.hpp | 11
   branches/bcbboost/boost/multi_index/detail/unbounded.hpp | 59 ++
   branches/bcbboost/boost/multi_index/detail/value_compare.hpp | 5
   branches/bcbboost/boost/multi_index/hashed_index.hpp | 217 +++++++++---
   branches/bcbboost/boost/multi_index/identity_fwd.hpp | 6
   branches/bcbboost/boost/multi_index/key_extractors.hpp | 3
   branches/bcbboost/boost/multi_index/mem_fun.hpp | 24 -
   branches/bcbboost/boost/multi_index/ordered_index.hpp | 306 ++++++++++++++----
   branches/bcbboost/boost/multi_index/random_access_index.hpp | 144 +++++++-
   branches/bcbboost/boost/multi_index/sequenced_index.hpp | 143 +++++++-
   branches/bcbboost/boost/multi_index_container.hpp | 90 ++++-
   branches/bcbboost/boost/range/as_literal.hpp | 17
   branches/bcbboost/boost/strong_typedef.hpp | 2
   branches/bcbboost/boost/thread/locks.hpp | 162 ++++++---
   branches/bcbboost/boost/thread/pthread/mutex.hpp | 10
   branches/bcbboost/boost/thread/pthread/recursive_mutex.hpp | 8
   branches/bcbboost/boost/thread/thread_time.hpp | 2
   branches/bcbboost/boost/thread/win32/thread_primitives.hpp | 3
   branches/bcbboost/boost/thread/xtime.hpp | 12
   branches/bcbboost/boost/type_traits/is_member_pointer.hpp | 3
   branches/bcbboost/boost/utility/typed_in_place_factory.hpp | 4
   branches/bcbboost/boost/xpressive/detail/core/linker.hpp | 2
   branches/bcbboost/boost/xpressive/detail/core/matcher/action_matcher.hpp | 2
   branches/bcbboost/boost/xpressive/detail/core/matcher/predicate_matcher.hpp | 37 +
   branches/bcbboost/boost/xpressive/detail/detail_fwd.hpp | 11
   branches/bcbboost/boost/xpressive/detail/static/placeholders.hpp | 21
   branches/bcbboost/boost/xpressive/detail/static/transforms/as_action.hpp | 11
   branches/bcbboost/boost/xpressive/detail/static/transforms/as_independent.hpp | 4
   branches/bcbboost/boost/xpressive/detail/static/transforms/as_set.hpp | 2
   branches/bcbboost/boost/xpressive/detail/utility/algorithm.hpp | 3
   branches/bcbboost/boost/xpressive/detail/utility/symbols.hpp | 25 +
   branches/bcbboost/boost/xpressive/proto/expr.hpp | 7
   branches/bcbboost/boost/xpressive/proto/matches.hpp | 9
   branches/bcbboost/boost/xpressive/proto/transform/fold.hpp | 8
   branches/bcbboost/boost/xpressive/regex_actions.hpp | 114 +++++-
   branches/bcbboost/boost/xpressive/regex_algorithms.hpp | 8
   branches/bcbboost/boost/xpressive/regex_iterator.hpp | 31 +
   branches/bcbboost/boost/xpressive/regex_token_iterator.hpp | 50 +++
   branches/bcbboost/boost/xpressive/traits/c_regex_traits.hpp | 6
   branches/bcbboost/doc/Jamfile.v2 | 3
   branches/bcbboost/doc/src/boost.xml | 3
   branches/bcbboost/libs/asio/test/Jamfile.v2 | 2
   branches/bcbboost/libs/circular_buffer/test/base_test.cpp | 60 +-
   branches/bcbboost/libs/functional/hash/test/hash_function_pointer_test.cpp | 13
   branches/bcbboost/libs/graph/test/Jamfile.v2 | 4
   branches/bcbboost/libs/libraries.htm | 31 +
   branches/bcbboost/libs/math/doc/Jamfile.v2 | 46 +-
   branches/bcbboost/libs/math/doc/common_factor.html | 5
   branches/bcbboost/libs/math/doc/index.html | 5
   branches/bcbboost/libs/math/doc/math.qbk | 232 +++++++++++---
   branches/bcbboost/libs/math/doc/sf_and_dist/Jamfile.v2 | 3
   branches/bcbboost/libs/math/doc/sf_and_dist/distributions/distribution_construction.qbk | 4
   branches/bcbboost/libs/math/doc/sf_and_dist/error_handling.qbk | 14
   branches/bcbboost/libs/math/doc/sf_and_dist/math.qbk | 2
   branches/bcbboost/libs/math/doc/sf_and_dist/policy.qbk | 2
   branches/bcbboost/libs/math/doc/sf_and_dist/policy_tutorial.qbk | 4
   branches/bcbboost/libs/math/doc/sf_and_dist/roadmap.qbk | 5
   branches/bcbboost/libs/math/index.html | 5
   branches/bcbboost/libs/math/test/Jamfile.v2 | 379 +++++++++++++++++++++++
   branches/bcbboost/libs/math/test/compile_test/test_compile_result.hpp | 3
   branches/bcbboost/libs/math/test/hypot_test.cpp | 2
   branches/bcbboost/libs/math/test/log1p_expm1_test.cpp | 643 ++++++---------------------------------
   branches/bcbboost/libs/math/test/powm1_sqrtp1m1_test.cpp | 15
   branches/bcbboost/libs/math/test/test_bernoulli.cpp | 1
   branches/bcbboost/libs/math/test/test_bessel_i.cpp | 16
   branches/bcbboost/libs/math/test/test_bessel_j.cpp | 32 -
   branches/bcbboost/libs/math/test/test_bessel_k.cpp | 22
   branches/bcbboost/libs/math/test/test_bessel_y.cpp | 50 +-
   branches/bcbboost/libs/math/test/test_beta.cpp | 20
   branches/bcbboost/libs/math/test/test_beta_dist.cpp | 1
   branches/bcbboost/libs/math/test/test_binomial.cpp | 16
   branches/bcbboost/libs/math/test/test_binomial_coeff.cpp | 17
   branches/bcbboost/libs/math/test/test_carlson.cpp | 37 -
   branches/bcbboost/libs/math/test/test_cauchy.cpp | 1
   branches/bcbboost/libs/math/test/test_cbrt.cpp | 23
   branches/bcbboost/libs/math/test/test_classify.cpp | 2
   branches/bcbboost/libs/math/test/test_digamma.cpp | 6
   branches/bcbboost/libs/math/test/test_factorials.cpp | 2
   branches/bcbboost/libs/math/test/test_gamma.cpp | 25 +
   branches/bcbboost/libs/math/test/test_hermite.cpp | 4
   branches/bcbboost/libs/math/test/test_ibeta.cpp | 51 ++
   branches/bcbboost/libs/math/test/test_ibeta_inv.cpp | 19 +
   branches/bcbboost/libs/math/test/test_ibeta_inv_ab.cpp | 18 +
   branches/bcbboost/libs/math/test/test_igamma.cpp | 31 +
   branches/bcbboost/libs/math/test/test_igamma_inv.cpp | 17
   branches/bcbboost/libs/math/test/test_igamma_inva.cpp | 15
   branches/bcbboost/libs/math/test/test_laguerre.cpp | 34 +
   branches/bcbboost/libs/math/test/test_legendre.cpp | 6
   branches/bcbboost/libs/math/test/test_negative_binomial.cpp | 15
   branches/bcbboost/libs/math/test/test_poisson.cpp | 15
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept1.cpp | 4
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept2.cpp | 4
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept3.cpp | 4
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept4.cpp | 4
   branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept5.cpp | 5
   branches/bcbboost/libs/math/test/test_spherical_harmonic.cpp | 4
   branches/bcbboost/libs/multi_index/doc/acknowledgements.html | 16
   branches/bcbboost/libs/multi_index/doc/examples.html | 40 +
   branches/bcbboost/libs/multi_index/doc/future_work.html | 18
   branches/bcbboost/libs/multi_index/doc/reference/hash_indices.html | 126 ++++++-
   branches/bcbboost/libs/multi_index/doc/reference/index.html | 8
   branches/bcbboost/libs/multi_index/doc/reference/key_extraction.html | 180 ++++++++++
   branches/bcbboost/libs/multi_index/doc/reference/multi_index_container.html | 30 +
   branches/bcbboost/libs/multi_index/doc/reference/ord_indices.html | 108 +++++-
   branches/bcbboost/libs/multi_index/doc/reference/rnd_indices.html | 63 +++
   branches/bcbboost/libs/multi_index/doc/reference/seq_indices.html | 59 +++
   branches/bcbboost/libs/multi_index/doc/release_notes.html | 69 ++++
   branches/bcbboost/libs/multi_index/doc/tests.html | 7
   branches/bcbboost/libs/multi_index/doc/tutorial/basics.html | 74 +++
   branches/bcbboost/libs/multi_index/doc/tutorial/creation.html | 57 +++
   branches/bcbboost/libs/multi_index/doc/tutorial/indices.html | 60 +++
   branches/bcbboost/libs/multi_index/doc/tutorial/key_extraction.html | 155 ++++++++
   branches/bcbboost/libs/multi_index/example/Jamfile.v2 | 13
   branches/bcbboost/libs/multi_index/example/composite_keys.cpp | 5
   branches/bcbboost/libs/multi_index/perf/test_perf.cpp | 5
   branches/bcbboost/libs/multi_index/test/Jamfile.v2 | 5
   branches/bcbboost/libs/multi_index/test/employee.hpp | 6
   branches/bcbboost/libs/multi_index/test/pair_of_ints.hpp | 17
   branches/bcbboost/libs/multi_index/test/test_capacity.cpp | 5
   branches/bcbboost/libs/multi_index/test/test_copy_assignment.cpp | 27 +
   branches/bcbboost/libs/multi_index/test/test_iterators.cpp | 34 +
   branches/bcbboost/libs/multi_index/test/test_key_extractors.cpp | 104 ++++++
   branches/bcbboost/libs/multi_index/test/test_modifiers.cpp | 32 +
   branches/bcbboost/libs/multi_index/test/test_range.cpp | 4
   branches/bcbboost/libs/multi_index/test/test_rearrange.cpp | 3
   branches/bcbboost/libs/multi_index/test/test_serialization.cpp | 4
   branches/bcbboost/libs/multi_index/test/test_serialization1.cpp | 8
   branches/bcbboost/libs/multi_index/test/test_serialization2.cpp | 89 -----
   branches/bcbboost/libs/multi_index/test/test_serialization_template.hpp | 12
   branches/bcbboost/libs/multi_index/test/test_update.cpp | 57 ++-
   branches/bcbboost/libs/serialization/src/codecvt_null.cpp | 1
   branches/bcbboost/libs/thread/build/Jamfile.v2 | 4
   branches/bcbboost/libs/thread/src/condition.cpp | 13
   branches/bcbboost/libs/thread/src/thread.cpp | 1
   branches/bcbboost/libs/thread/test/Jamfile.v2 | 3
   branches/bcbboost/libs/thread/test/test_mutex.cpp | 18
   branches/bcbboost/libs/thread/test/test_once.cpp | 99 ++++++
   branches/bcbboost/libs/wave/build/Jamfile.v2 | 1
   branches/bcbboost/libs/wave/samples/advanced_hooks/build/Jamfile.v2 | 2
   branches/bcbboost/libs/wave/samples/cpp_tokens/build/Jamfile.v2 | 4
   branches/bcbboost/libs/wave/samples/hannibal/build/Jamfile.v2 | 2
   branches/bcbboost/libs/wave/samples/lexed_tokens/build/Jamfile.v2 | 2
   branches/bcbboost/libs/wave/samples/list_includes/build/Jamfile.v2 | 4
   branches/bcbboost/libs/wave/samples/quick_start/build/Jamfile.v2 | 3
   branches/bcbboost/libs/wave/samples/real_positions/build/Jamfile.v2 | 1
   branches/bcbboost/libs/wave/samples/token_statistics/build/Jamfile.v2 | 3
   branches/bcbboost/libs/wave/samples/waveidl/build/Jamfile.v2 | 5
   branches/bcbboost/libs/wave/test/build/Jamfile.v2 | 4
   branches/bcbboost/libs/xpressive/doc/Jamfile.v2 | 3
   branches/bcbboost/libs/xpressive/doc/acknowledgements.qbk | 15
   branches/bcbboost/libs/xpressive/doc/actions.qbk | 404 ++++++++++++++++++++++++
   branches/bcbboost/libs/xpressive/doc/history.qbk | 7
   branches/bcbboost/libs/xpressive/doc/installation.qbk | 24
   branches/bcbboost/libs/xpressive/doc/traits.qbk | 2
   branches/bcbboost/libs/xpressive/doc/xpressive.qbk | 3
   branches/bcbboost/libs/xpressive/example/Jamfile.v2 | 7
   branches/bcbboost/libs/xpressive/example/numbers.cpp | 32 +
   branches/bcbboost/libs/xpressive/test/Jamfile.v2 | 5
   branches/bcbboost/libs/xpressive/test/test_actions.cpp | 36 +
   branches/bcbboost/more/formal_review_schedule.html | 4
   branches/bcbboost/status/Jamfile.v2 | 25
   branches/bcbboost/status/explicit-failures-markup.xml | 60 +--
   branches/bcbboost/tools/boostbook/doc/boostbook.xml | 4
   branches/bcbboost/tools/build/v2/changes.txt | 7
   branches/bcbboost/tools/build/v2/index.html | 19
   branches/bcbboost/tools/build/v2/roll.sh | 4
   branches/bcbboost/tools/build/v2/test/BoostBuild.py | 5
   branches/bcbboost/tools/build/v2/test/free_features_request.py | 5
   branches/bcbboost/tools/build/v2/test/library_chain.py | 3
   branches/bcbboost/tools/build/v2/test/searched_lib.py | 2
   branches/bcbboost/tools/jam/src/builtins.c | 34 ++
   branches/bcbboost/tools/jam/src/jam.c | 8
   branches/bcbboost/tools/wave/build/Jamfile.v2 | 1
   225 files changed, 5284 insertions(+), 2244 deletions(-)

Modified: branches/bcbboost/boost/archive/codecvt_null.hpp
==============================================================================
--- branches/bcbboost/boost/archive/codecvt_null.hpp (original)
+++ branches/bcbboost/boost/archive/codecvt_null.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -20,6 +20,7 @@
 #include <cstddef>
 
 #include <boost/config.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
 
 namespace std{
     #if defined(__LIBCOMO__)
@@ -58,7 +59,7 @@
 template<>
 class codecvt_null<wchar_t> : public std::codecvt<wchar_t, char, std::mbstate_t>
 {
- virtual std::codecvt_base::result
+ virtual BOOST_ARCHIVE_DECL(std::codecvt_base::result)
     do_out(
         std::mbstate_t & state,
         const wchar_t * first1,
@@ -68,7 +69,7 @@
         char * last2,
         char * & next2
     ) const;
- virtual std::codecvt_base::result
+ virtual BOOST_ARCHIVE_DECL(std::codecvt_base::result)
     do_in(
         std::mbstate_t & state,
         const char * first1,

Modified: branches/bcbboost/boost/archive/detail/basic_oarchive.hpp
==============================================================================
--- branches/bcbboost/boost/archive/detail/basic_oarchive.hpp (original)
+++ branches/bcbboost/boost/archive/detail/basic_oarchive.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -71,16 +71,15 @@
 public:
     // note: NOT part of the public interface
     void register_basic_serializer(
- const BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oserializer & bos
+ const basic_oserializer & bos
     );
     void save_object(
         const void *x,
- const BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oserializer & bos
+ const basic_oserializer & bos
     );
     void save_pointer(
         const void * t,
- const BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
- basic_pointer_oserializer * bpos_ptr
+ const basic_pointer_oserializer * bpos_ptr
     );
     void save_null_pointer(){
         vsave(NULL_POINTER_TAG);

Modified: branches/bcbboost/boost/archive/detail/interface_iarchive.hpp
==============================================================================
--- branches/bcbboost/boost/archive/detail/interface_iarchive.hpp (original)
+++ branches/bcbboost/boost/archive/detail/interface_iarchive.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -32,7 +32,7 @@
 namespace archive {
 namespace detail {
 
-class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer;
+class BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer;
 
 template<class Archive>
 class interface_iarchive
@@ -51,9 +51,9 @@
     }
 
     template<class T>
- const BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer *
+ const basic_pointer_iserializer *
     register_type(T * = NULL){
- const BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer & bpis =
+ const basic_pointer_iserializer & bpis =
             pointer_iserializer<Archive, T>::get_instance();
         this->This()->register_basic_serializer(bpis.get_basic_serializer());
         return & bpis;

Modified: branches/bcbboost/boost/archive/detail/interface_oarchive.hpp
==============================================================================
--- branches/bcbboost/boost/archive/detail/interface_oarchive.hpp (original)
+++ branches/bcbboost/boost/archive/detail/interface_oarchive.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -32,7 +32,7 @@
 namespace archive {
 namespace detail {
 
-class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer;
+class BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer;
 
 template<class Archive>
 class interface_oarchive
@@ -51,9 +51,9 @@
     }
 
     template<class T>
- const BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer *
+ const basic_pointer_oserializer *
     register_type(const T * = NULL){
- const BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer & bpos =
+ const basic_pointer_oserializer & bpos =
             pointer_oserializer<Archive, T>::get_instance();
         this->This()->register_basic_serializer(bpos.get_basic_serializer());
         return & bpos;

Modified: branches/bcbboost/boost/asio/datagram_socket_service.hpp
==============================================================================
--- branches/bcbboost/boost/asio/datagram_socket_service.hpp (original)
+++ branches/bcbboost/boost/asio/datagram_socket_service.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -65,6 +65,9 @@
 #elif defined(BOOST_ASIO_HAS_KQUEUE)
   typedef detail::reactive_socket_service<
       Protocol, detail::kqueue_reactor<false> > service_impl_type;
+#elif defined(BOOST_ASIO_HAS_DEV_POLL)
+ typedef detail::reactive_socket_service<
+ Protocol, detail::dev_poll_reactor<false> > service_impl_type;
 #else
   typedef detail::reactive_socket_service<
       Protocol, detail::select_reactor<false> > service_impl_type;

Modified: branches/bcbboost/boost/asio/deadline_timer_service.hpp
==============================================================================
--- branches/bcbboost/boost/asio/deadline_timer_service.hpp (original)
+++ branches/bcbboost/boost/asio/deadline_timer_service.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -70,6 +70,9 @@
 #elif defined(BOOST_ASIO_HAS_KQUEUE)
   typedef detail::deadline_timer_service<
     traits_type, detail::kqueue_reactor<false> > service_impl_type;
+#elif defined(BOOST_ASIO_HAS_DEV_POLL)
+ typedef detail::deadline_timer_service<
+ traits_type, detail::dev_poll_reactor<false> > service_impl_type;
 #else
   typedef detail::deadline_timer_service<
     traits_type, detail::select_reactor<false> > service_impl_type;

Modified: branches/bcbboost/boost/asio/detail/socket_ops.hpp
==============================================================================
--- branches/bcbboost/boost/asio/detail/socket_ops.hpp (original)
+++ branches/bcbboost/boost/asio/detail/socket_ops.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -542,8 +542,15 @@
       && timeout->tv_usec > 0 && timeout->tv_usec < 1000)
     timeout->tv_usec = 1000;
 #endif // defined(BOOST_WINDOWS) || defined(__CYGWIN__)
+
+#if defined(__hpux) && defined(__HP_aCC) && !defined(_XOPEN_SOURCE_EXTENDED)
+ return error_wrapper(::select(nfds,
+ reinterpret_cast<int*>(readfds), reinterpret_cast<int*>(writefds),
+ reinterpret_cast<int*>(exceptfds), timeout), ec);
+#else
   return error_wrapper(::select(nfds, readfds,
         writefds, exceptfds, timeout), ec);
+#endif
 }
 
 inline int poll_read(socket_type s, boost::system::error_code& ec)

Modified: branches/bcbboost/boost/asio/impl/io_service.ipp
==============================================================================
--- branches/bcbboost/boost/asio/impl/io_service.ipp (original)
+++ branches/bcbboost/boost/asio/impl/io_service.ipp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -21,6 +21,7 @@
 #include <limits>
 #include <boost/asio/detail/pop_options.hpp>
 
+#include <boost/asio/detail/dev_poll_reactor.hpp>
 #include <boost/asio/detail/epoll_reactor.hpp>
 #include <boost/asio/detail/kqueue_reactor.hpp>
 #include <boost/asio/detail/select_reactor.hpp>

Modified: branches/bcbboost/boost/asio/io_service.hpp
==============================================================================
--- branches/bcbboost/boost/asio/io_service.hpp (original)
+++ branches/bcbboost/boost/asio/io_service.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -26,6 +26,7 @@
 #include <boost/system/error_code.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
+#include <boost/asio/detail/dev_poll_reactor_fwd.hpp>
 #include <boost/asio/detail/epoll_reactor_fwd.hpp>
 #include <boost/asio/detail/kqueue_reactor_fwd.hpp>
 #include <boost/asio/detail/noncopyable.hpp>
@@ -112,6 +113,8 @@
   typedef detail::task_io_service<detail::epoll_reactor<false> > impl_type;
 #elif defined(BOOST_ASIO_HAS_KQUEUE)
   typedef detail::task_io_service<detail::kqueue_reactor<false> > impl_type;
+#elif defined(BOOST_ASIO_HAS_DEV_POLL)
+ typedef detail::task_io_service<detail::dev_poll_reactor<false> > impl_type;
 #else
   typedef detail::task_io_service<detail::select_reactor<false> > impl_type;
 #endif
@@ -379,7 +382,7 @@
 private:
 #if defined(BOOST_WINDOWS) || defined(__CYGWIN__)
   detail::winsock_init<> init_;
-#elif defined(__sun) || defined(__QNX__)
+#elif defined(__sun) || defined(__QNX__) || defined(__hpux) || defined(_AIX)
   detail::signal_init<> init_;
 #endif
 

Modified: branches/bcbboost/boost/asio/socket_acceptor_service.hpp
==============================================================================
--- branches/bcbboost/boost/asio/socket_acceptor_service.hpp (original)
+++ branches/bcbboost/boost/asio/socket_acceptor_service.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -61,6 +61,9 @@
 #elif defined(BOOST_ASIO_HAS_KQUEUE)
   typedef detail::reactive_socket_service<
       Protocol, detail::kqueue_reactor<false> > service_impl_type;
+#elif defined(BOOST_ASIO_HAS_DEV_POLL)
+ typedef detail::reactive_socket_service<
+ Protocol, detail::dev_poll_reactor<false> > service_impl_type;
 #else
   typedef detail::reactive_socket_service<
       Protocol, detail::select_reactor<false> > service_impl_type;

Modified: branches/bcbboost/boost/asio/stream_socket_service.hpp
==============================================================================
--- branches/bcbboost/boost/asio/stream_socket_service.hpp (original)
+++ branches/bcbboost/boost/asio/stream_socket_service.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -65,6 +65,9 @@
 #elif defined(BOOST_ASIO_HAS_KQUEUE)
   typedef detail::reactive_socket_service<
       Protocol, detail::kqueue_reactor<false> > service_impl_type;
+#elif defined(BOOST_ASIO_HAS_DEV_POLL)
+ typedef detail::reactive_socket_service<
+ Protocol, detail::dev_poll_reactor<false> > service_impl_type;
 #else
   typedef detail::reactive_socket_service<
       Protocol, detail::select_reactor<false> > service_impl_type;

Modified: branches/bcbboost/boost/detail/allocator_utilities.hpp
==============================================================================
--- branches/bcbboost/boost/detail/allocator_utilities.hpp (original)
+++ branches/bcbboost/boost/detail/allocator_utilities.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -30,13 +30,21 @@
 namespace allocator{
 
 /* partial_std_allocator_wrapper inherits the functionality of a std
- * allocator while providing a templatized ctor.
+ * allocator while providing a templatized ctor and other bits missing
+ * in some stdlib implementation or another.
  */
 
 template<typename Type>
 class partial_std_allocator_wrapper:public std::allocator<Type>
 {
 public:
+ /* Oddly enough, STLport does not define std::allocator<void>::value_type
+ * when configured to work without partial template specialization.
+ * No harm in supplying the definition here unconditionally.
+ */
+
+ typedef Type value_type;
+
   partial_std_allocator_wrapper(){};
 
   template<typename Other>

Modified: branches/bcbboost/boost/functional/hash/hash.hpp
==============================================================================
--- branches/bcbboost/boost/functional/hash/hash.hpp (original)
+++ branches/bcbboost/boost/functional/hash/hash.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -28,6 +28,10 @@
 #include <boost/type_traits/is_const.hpp>
 #endif
 
+#if BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590)
+#include <boost/type_traits/is_function.hpp>
+#endif
+
 namespace boost
 {
     std::size_t hash_value(bool);
@@ -209,8 +213,15 @@
     template <class T> std::size_t hash_value(T* v)
 #endif
     {
+#if !BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590)
         std::size_t x = static_cast<std::size_t>(
            reinterpret_cast<std::ptrdiff_t>(v));
+#else
+ std::size_t x = static_cast<std::size_t>(
+ boost::is_function<T>::value ?
+ reinterpret_cast<std::ptrdiff_t>((void*) v) :
+ reinterpret_cast<std::ptrdiff_t>(v));
+#endif
         return x + (x >> 3);
     }
 

Modified: branches/bcbboost/boost/graph/planar_detail/face_iterators.hpp
==============================================================================
--- branches/bcbboost/boost/graph/planar_detail/face_iterators.hpp (original)
+++ branches/bcbboost/boost/graph/planar_detail/face_iterators.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -10,6 +10,7 @@
 #define __FACE_ITERATORS_HPP__
 
 #include <boost/iterator/iterator_facade.hpp>
+#include <boost/mpl/bool.hpp>
 #include <boost/graph/graph_traits.hpp>
 
 namespace boost
@@ -61,18 +62,16 @@
   
 
 
- template <typename Graph, typename ValueType>
- struct edge_storage;
+ template <typename Graph, bool StoreEdge>
+ struct edge_storage
+ {};
 
   template <typename Graph>
- struct edge_storage <Graph, typename graph_traits<Graph>::edge_descriptor>
+ struct edge_storage <Graph, true>
   {
     typename graph_traits<Graph>::edge_descriptor value;
   };
 
- template <typename Graph>
- struct edge_storage <Graph, typename graph_traits<Graph>::vertex_descriptor>
- {};
 
 
 
@@ -271,7 +270,7 @@
 
     vertex_t m_lead;
     vertex_t m_follow;
- edge_storage<Graph, ValueType> m_edge;
+ edge_storage<Graph, boost::is_same<ValueType, edge_t>::value > m_edge;
     FaceHandlesMap m_face_handles;
   };
   

Modified: branches/bcbboost/boost/interprocess/detail/atomic.hpp
==============================================================================
--- branches/bcbboost/boost/interprocess/detail/atomic.hpp (original)
+++ branches/bcbboost/boost/interprocess/detail/atomic.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -343,7 +343,7 @@
 //! "mem": pointer to the atomic value
 //! Returns false if the value becomes zero on decrement, otherwise true
 inline bool atomic_dec32(volatile boost::uint32_t *mem)
-{ return !(atomic_add32(mem, boost::uint32_t(-1u)) - 1u); }
+{ return 0 != (atomic_add32(mem, boost::uint32_t(-1u)) - 1u); }
 
 //! Atomically read an boost::uint32_t from memory
 inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem)

Modified: branches/bcbboost/boost/intrusive/list.hpp
==============================================================================
--- branches/bcbboost/boost/intrusive/list.hpp (original)
+++ branches/bcbboost/boost/intrusive/list.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -859,7 +859,7 @@
    template<class Iterator, class Disposer>
    void dispose_and_assign(Disposer disposer, Iterator b, Iterator e)
    {
- this->clear(disposer);
+ this->clear_and_dispose(disposer);
       this->insert(this->end(), b, e);
    }
 

Modified: branches/bcbboost/boost/math/concepts/real_concept.hpp
==============================================================================
--- branches/bcbboost/boost/math/concepts/real_concept.hpp (original)
+++ branches/bcbboost/boost/math/concepts/real_concept.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -55,7 +55,7 @@
    real_concept(int c) : m_value(c){}
    real_concept(unsigned long c) : m_value(c){}
    real_concept(long c) : m_value(c){}
-#ifdef BOOST_HAS_LONG_LONG
+#if defined(BOOST_HAS_LONG_LONG) || defined(__DECCXX)
    real_concept(unsigned long long c) : m_value(static_cast<long double>(c)){}
    real_concept(long long c) : m_value(static_cast<long double>(c)){}
 #elif defined(BOOST_HAS_MS_INT64)
@@ -196,7 +196,7 @@
 inline real_concept ceil(real_concept a)
 { return std::ceil(a.value()); }
 inline real_concept fmod(real_concept a, real_concept b)
-{ return boost::math::tools::fmod_workaround(a.value(), b.value()); }
+{ return fmodl(a.value(), b.value()); }
 inline real_concept cosh(real_concept a)
 { return std::cosh(a.value()); }
 inline real_concept exp(real_concept a)
@@ -246,7 +246,15 @@
 template <class charT, class traits>
 inline std::basic_istream<charT, traits>& operator>>(std::basic_istream<charT, traits>& is, real_concept& a)
 {
+#if defined(BOOST_MSVC) && defined(__SGI_STL_PORT)
+ //
+ // STLPort 5.1.4 has a problem reading long doubles from strings,
+ // see http://sourceforge.net/tracker/index.php?func=detail&aid=1811043&group_id=146814&atid=766244
+ //
+ double v;
+#else
    long double v;
+#endif
    is >> v;
    a = v;
    return is;
@@ -323,7 +331,11 @@
 template <>
 inline concepts::real_concept epsilon(BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(concepts::real_concept))
 {
+#ifdef __SUNPRO_CC
+ return std::numeric_limits<long double>::epsilon();
+#else
    return tools::epsilon<long double>();
+#endif
 }
 
 template <>

Modified: branches/bcbboost/boost/math/concepts/std_real_concept.hpp
==============================================================================
--- branches/bcbboost/boost/math/concepts/std_real_concept.hpp (original)
+++ branches/bcbboost/boost/math/concepts/std_real_concept.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -195,7 +195,7 @@
 inline boost::math::concepts::std_real_concept ceil(boost::math::concepts::std_real_concept a)
 { return std::ceil(a.value()); }
 inline boost::math::concepts::std_real_concept fmod(boost::math::concepts::std_real_concept a, boost::math::concepts::std_real_concept b)
-{ return boost::math::tools::fmod_workaround(a.value(), b.value()); }
+{ return fmodl(a.value(), b.value()); }
 inline boost::math::concepts::std_real_concept cosh(boost::math::concepts::std_real_concept a)
 { return std::cosh(a.value()); }
 inline boost::math::concepts::std_real_concept exp(boost::math::concepts::std_real_concept a)

Modified: branches/bcbboost/boost/math/distributions/bernoulli.hpp
==============================================================================
--- branches/bcbboost/boost/math/distributions/bernoulli.hpp (original)
+++ branches/bcbboost/boost/math/distributions/bernoulli.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -149,7 +149,7 @@
     } // variance
 
     template <class RealType, class Policy>
- RealType pdf(const bernoulli_distribution<RealType, Policy>& dist, const RealType k)
+ RealType pdf(const bernoulli_distribution<RealType, Policy>& dist, const RealType& k)
     { // Probability Density/Mass Function.
       BOOST_FPU_EXCEPTION_GUARD
       // Error check:
@@ -174,7 +174,7 @@
     } // pdf
 
     template <class RealType, class Policy>
- inline RealType cdf(const bernoulli_distribution<RealType, Policy>& dist, const RealType k)
+ inline RealType cdf(const bernoulli_distribution<RealType, Policy>& dist, const RealType& k)
     { // Cumulative Distribution Function Bernoulli.
       RealType p = dist.success_fraction();
       // Error check:

Modified: branches/bcbboost/boost/math/distributions/beta.hpp
==============================================================================
--- branches/bcbboost/boost/math/distributions/beta.hpp (original)
+++ branches/bcbboost/boost/math/distributions/beta.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -364,7 +364,7 @@
     } // kurtosis
 
     template <class RealType, class Policy>
- inline RealType pdf(const beta_distribution<RealType, Policy>& dist, const RealType x)
+ inline RealType pdf(const beta_distribution<RealType, Policy>& dist, const RealType& x)
     { // Probability Density/Mass Function.
       BOOST_FPU_EXCEPTION_GUARD
 
@@ -389,7 +389,7 @@
     } // pdf
 
     template <class RealType, class Policy>
- inline RealType cdf(const beta_distribution<RealType, Policy>& dist, const RealType x)
+ inline RealType cdf(const beta_distribution<RealType, Policy>& dist, const RealType& x)
     { // Cumulative Distribution Function beta.
       BOOST_MATH_STD_USING // for ADL of std functions
 

Modified: branches/bcbboost/boost/math/distributions/binomial.hpp
==============================================================================
--- branches/bcbboost/boost/math/distributions/binomial.hpp (original)
+++ branches/bcbboost/boost/math/distributions/binomial.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -437,7 +437,7 @@
       } // variance
 
       template <class RealType, class Policy>
- RealType pdf(const binomial_distribution<RealType, Policy>& dist, const RealType k)
+ RealType pdf(const binomial_distribution<RealType, Policy>& dist, const RealType& k)
       { // Probability Density/Mass Function.
         BOOST_FPU_EXCEPTION_GUARD
 
@@ -498,7 +498,7 @@
       } // pdf
 
       template <class RealType, class Policy>
- inline RealType cdf(const binomial_distribution<RealType, Policy>& dist, const RealType k)
+ inline RealType cdf(const binomial_distribution<RealType, Policy>& dist, const RealType& k)
       { // Cumulative Distribution Function Binomial.
         // The random variate k is the number of successes in n trials.
         // k argument may be integral, signed, or unsigned, or floating point.

Modified: branches/bcbboost/boost/math/distributions/negative_binomial.hpp
==============================================================================
--- branches/bcbboost/boost/math/distributions/negative_binomial.hpp (original)
+++ branches/bcbboost/boost/math/distributions/negative_binomial.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -335,7 +335,7 @@
     // chf of Negative Binomial distribution provided by derived accessors.
 
     template <class RealType, class Policy>
- inline RealType pdf(const negative_binomial_distribution<RealType, Policy>& dist, const RealType k)
+ inline RealType pdf(const negative_binomial_distribution<RealType, Policy>& dist, const RealType& k)
     { // Probability Density/Mass Function.
       BOOST_FPU_EXCEPTION_GUARD
 
@@ -361,7 +361,7 @@
     } // negative_binomial_pdf
 
     template <class RealType, class Policy>
- inline RealType cdf(const negative_binomial_distribution<RealType, Policy>& dist, const RealType k)
+ inline RealType cdf(const negative_binomial_distribution<RealType, Policy>& dist, const RealType& k)
     { // Cumulative Distribution Function of Negative Binomial.
       static const char* function = "boost::math::cdf(const negative_binomial_distribution<%1%>&, %1%)";
       using boost::math::ibeta; // Regularized incomplete beta function.
@@ -527,7 +527,7 @@
           // since the probability of zero failures may be non-zero,
           return 0; // but zero is the best we can do:
        }
- if (-Q <= powm1(dist.success_fraction(), dist.successes(), Policy()))
+ if (-Q <= boost::math::powm1(dist.success_fraction(), dist.successes(), Policy()))
        { // q <= cdf(complement(dist, 0)) == pdf(dist, 0)
           return 0; //
        }

Modified: branches/bcbboost/boost/math/distributions/pareto.hpp
==============================================================================
--- branches/bcbboost/boost/math/distributions/pareto.hpp (original)
+++ branches/bcbboost/boost/math/distributions/pareto.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -212,7 +212,7 @@
       }
 
       // result = RealType(1) - pow((location / x), shape);
- result = -powm1(location/x, shape, Policy()); // should be more accurate.
+ result = -boost::math::powm1(location/x, shape, Policy()); // should be more accurate.
       return result;
     } // cdf
 

Modified: branches/bcbboost/boost/math/distributions/poisson.hpp
==============================================================================
--- branches/bcbboost/boost/math/distributions/poisson.hpp (original)
+++ branches/bcbboost/boost/math/distributions/poisson.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -306,7 +306,7 @@
     } // RealType kurtosis
 
     template <class RealType, class Policy>
- RealType pdf(const poisson_distribution<RealType, Policy>& dist, const RealType k)
+ RealType pdf(const poisson_distribution<RealType, Policy>& dist, const RealType& k)
     { // Probability Density/Mass Function.
       // Probability that there are EXACTLY k occurrences (or arrivals).
       BOOST_FPU_EXCEPTION_GUARD
@@ -353,7 +353,7 @@
     } // pdf
 
     template <class RealType, class Policy>
- RealType cdf(const poisson_distribution<RealType, Policy>& dist, const RealType k)
+ RealType cdf(const poisson_distribution<RealType, Policy>& dist, const RealType& k)
     { // Cumulative Distribution Function Poisson.
       // The random variate k is the number of occurrences(or arrivals)
       // k argument may be integral, signed, or unsigned, or floating point.

Modified: branches/bcbboost/boost/math/special_functions/log1p.hpp
==============================================================================
--- branches/bcbboost/boost/math/special_functions/log1p.hpp (original)
+++ branches/bcbboost/boost/math/special_functions/log1p.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -128,7 +128,7 @@
 #ifdef BOOST_HAS_LOG1P
 # if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)) \
    || defined(linux) || defined(__linux) || defined(__linux__) \
- || defined(__hpux)
+ || (defined(__hpux) && !defined(_PA_RISC1_1))
 template <class Policy>
 inline float log1p(float x, const Policy& pol)
 {

Modified: branches/bcbboost/boost/math/tools/config.hpp
==============================================================================
--- branches/bcbboost/boost/math/tools/config.hpp (original)
+++ branches/bcbboost/boost/math/tools/config.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,3 +1,8 @@
+// Copyright (c) 2006-7 John Maddock
+// 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_MATH_TOOLS_CONFIG_HPP
 #define BOOST_MATH_TOOLS_CONFIG_HPP
 
@@ -17,7 +22,22 @@
 # define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
 #endif
 #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+//
+// Borland post 5.8.2 uses Dinkumware's std C lib which
+// doesn't have true long double precision. Earlier
+// versions are problematic too:
+//
 # define BOOST_MATH_NO_REAL_CONCEPT_TESTS
+# define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+# define BOOST_MATH_CONTROL_FP _control87(MCW_EM,MCW_EM)
+# include <float.h>
+#endif
+#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) && ((LDBL_MANT_DIG == 106) || (__LDBL_MANT_DIG__ == 106))
+//
+// Darwin's rather strange "double double" is rather hard to
+// support, it should be possible given enough effort though...
+//
+# define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
 #endif
 
 #if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
@@ -65,6 +85,12 @@
 # define BOOST_MATH_INT_TABLE_TYPE(RT, IT) IT
 #endif
 //
+// Helper macro for controlling the FP behaviour:
+//
+#ifndef BOOST_MATH_CONTROL_FP
+# define BOOST_MATH_CONTROL_FP
+#endif
+//
 // Helper macro for using statements:
 //
 #define BOOST_MATH_STD_USING \
@@ -108,24 +134,6 @@
 {
    return (std::max)((std::max)(a, b), (std::max)(c, d));
 }
-//
-// We call this short forwarding function so that we can work around a bug
-// on Darwin that causes std::fmod to return a NaN. The test case is:
-// std::fmod(1185.0L, 1.5L);
-//
-template <class T>
-inline T fmod_workaround(T a, T b)
-{
- BOOST_MATH_STD_USING
- return fmod(a, b);
-}
-#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) && ((LDBL_MANT_DIG == 106) || (__LDBL_MANT_DIG__ == 106))
-template <>
-inline long double fmod_workaround(long double a, long double b)
-{
- return ::fmodl(a, b);
-}
-#endif
 } // namespace tools
 }} // namespace boost namespace math
 

Modified: branches/bcbboost/boost/math/tools/test.hpp
==============================================================================
--- branches/bcbboost/boost/math/tools/test.hpp (original)
+++ branches/bcbboost/boost/math/tools/test.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -75,9 +75,9 @@
    if((a != 0) && (b != 0))
    {
       // TODO: use isfinite:
- if(b > max_val)
+ if(fabs(b) >= max_val)
       {
- if(a > max_val)
+ if(fabs(a) >= max_val)
             return 0; // one infinity is as good as another!
       }
       // If the result is denormalised, treat all denorms as equivalent:

Modified: branches/bcbboost/boost/multi_index/composite_key.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/composite_key.hpp (original)
+++ branches/bcbboost/boost/multi_index/composite_key.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2006 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -14,6 +14,7 @@
 #endif
 
 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/functional/hash_fwd.hpp>
 #include <boost/multi_index/detail/access_specifier.hpp>
 #include <boost/multi_index/detail/prevent_eti.hpp>
 #include <boost/mpl/eval_if.hpp>
@@ -106,7 +107,6 @@
 namespace boost{
 
 template<class T> class reference_wrapper; /* fwd decl. */
-template<class T> struct hash; /* fwd decl. */
 
 namespace multi_index{
 

Modified: branches/bcbboost/boost/multi_index/detail/auto_space.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/auto_space.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/auto_space.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -16,6 +16,7 @@
 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
 #include <algorithm>
 #include <boost/detail/allocator_utilities.hpp>
+#include <boost/multi_index/detail/prevent_eti.hpp>
 #include <boost/noncopyable.hpp>
 #include <memory>
 
@@ -44,8 +45,15 @@
 template<typename T,typename Allocator=std::allocator<T> >
 struct auto_space:private noncopyable
 {
+ typedef typename prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,T
+ >::type
+ >::type::pointer pointer;
+
   explicit auto_space(const Allocator& al=Allocator(),std::size_t n=1):
- al_(al),n_(n),data_(n_?al_.allocate(n_):0)
+ al_(al),n_(n),data_(n_?al_.allocate(n_):pointer(0))
   {}
 
   ~auto_space()
@@ -55,10 +63,20 @@
 
   Allocator get_allocator()const{return al_;}
 
- T* data()const{return data_;}
+ pointer data()const{return data_;}
 
   void swap(auto_space& x)
   {
+ if(al_!=x.al_){
+
+#if defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
+ std::swap(al_,x.al_);
+#else
+ using std::swap;
+ swap(al_,x.al_);
+#endif
+
+ }
     std::swap(n_,x.n_);
     std::swap(data_,x.data_);
   }
@@ -67,7 +85,7 @@
   typename boost::detail::allocator::rebind_to<
     Allocator,T>::type al_;
   std::size_t n_;
- T* data_;
+ pointer data_;
 };
 
 template<typename T,typename Allocator>

Modified: branches/bcbboost/boost/multi_index/detail/bidir_node_iterator.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/bidir_node_iterator.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/bidir_node_iterator.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2006 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -49,12 +49,6 @@
     return node->value();
   }
 
- friend bool operator==(
- const bidir_node_iterator& x,const bidir_node_iterator& y)
- {
- return x.node==y.node;
- }
-
   bidir_node_iterator& operator++()
   {
     Node::increment(node);
@@ -102,6 +96,14 @@
   Node* node;
 };
 
+template<typename Node,typename Derived>
+bool operator==(
+ const bidir_node_iterator<Node,Derived>& x,
+ const bidir_node_iterator<Node,Derived>& y)
+{
+ return x.get_node()==y.get_node();
+}
+
 } /* namespace multi_index::detail */
 
 } /* namespace multi_index */

Modified: branches/bcbboost/boost/multi_index/detail/bucket_array.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/bucket_array.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/bucket_array.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -17,6 +17,7 @@
 #include <algorithm>
 #include <boost/multi_index/detail/auto_space.hpp>
 #include <boost/multi_index/detail/hash_index_node.hpp>
+#include <boost/multi_index/detail/prevent_eti.hpp>
 #include <boost/noncopyable.hpp>
 #include <cstddef>
 #include <limits.h>
@@ -84,8 +85,20 @@
 template<typename Allocator>
 class bucket_array:public bucket_array_base
 {
+ typedef typename prevent_eti<
+ Allocator,
+ hashed_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ Allocator,
+ void
+ >::type
+ >
+ >::type node_impl_type;
+
 public:
- bucket_array(const Allocator& al,hashed_index_node_impl* end_,std::size_t size):
+ typedef typename node_impl_type::pointer pointer;
+
+ bucket_array(const Allocator& al,pointer end_,std::size_t size):
     size_(bucket_array_base::next_prime(size)),
     spc(al,size_+1)
   {
@@ -104,21 +117,21 @@
     return hash%size_;
   }
 
- hashed_index_node_impl* begin()const{return &buckets()[0];}
- hashed_index_node_impl* end()const{return &buckets()[size_];}
- hashed_index_node_impl* at(std::size_t n)const{return &buckets()[n];}
+ pointer begin()const{return buckets();}
+ pointer end()const{return buckets()+size_;}
+ pointer at(std::size_t n)const{return buckets()+n;}
 
   std::size_t first_nonempty(std::size_t n)const
   {
     for(;;++n){
- hashed_index_node_impl* x=at(n);
+ pointer x=at(n);
       if(x->next()!=x)return n;
     }
   }
 
   void clear()
   {
- for(hashed_index_node_impl* x=begin(),*y=end();x!=y;++x)x->next()=x;
+ for(pointer x=begin(),y=end();x!=y;++x)x->next()=x;
   }
 
   void swap(bucket_array& x)
@@ -128,10 +141,10 @@
   }
 
 private:
- std::size_t size_;
- auto_space<hashed_index_node_impl,Allocator> spc;
+ std::size_t size_;
+ auto_space<node_impl_type,Allocator> spc;
 
- hashed_index_node_impl* buckets()const
+ pointer buckets()const
   {
     return spc.data();
   }

Modified: branches/bcbboost/boost/multi_index/detail/copy_map.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/copy_map.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/copy_map.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -17,6 +17,7 @@
 #include <algorithm>
 #include <boost/detail/no_exceptions_support.hpp>
 #include <boost/multi_index/detail/auto_space.hpp>
+#include <boost/multi_index/detail/prevent_eti.hpp>
 #include <boost/noncopyable.hpp>
 #include <cstddef>
 #include <functional>
@@ -69,31 +70,31 @@
   {
     if(!released){
       for(std::size_t i=0;i<n;++i){
- boost::detail::allocator::destroy(&spc.data()[i].second->value());
- deallocate(spc.data()[i].second);
+ boost::detail::allocator::destroy(&(spc.data()+i)->second->value());
+ deallocate((spc.data()+i)->second);
       }
     }
   }
 
- const_iterator begin()const{return spc.data();}
- const_iterator end()const{return spc.data()+n;}
+ const_iterator begin()const{return &*spc.data();}
+ const_iterator end()const{return &*(spc.data()+n);}
 
   void clone(Node* node)
   {
- spc.data()[n].first=node;
- spc.data()[n].second=al_.allocate(1);
+ (spc.data()+n)->first=node;
+ (spc.data()+n)->second=&*al_.allocate(1);
     BOOST_TRY{
       boost::detail::allocator::construct(
- &spc.data()[n].second->value(),node->value());
+ &(spc.data()+n)->second->value(),node->value());
     }
     BOOST_CATCH(...){
- deallocate(spc.data()[n].second);
+ deallocate((spc.data()+n)->second);
       BOOST_RETHROW;
     }
     BOOST_CATCH_END
     ++n;
 
- if(n==size_)std::sort(spc.data(),spc.data()+size_);
+ if(n==size_)std::sort(&*spc.data(),&*spc.data()+size_);
   }
 
   Node* find(Node* node)const
@@ -109,18 +110,24 @@
   }
 
 private:
- typename boost::detail::allocator::rebind_to<
- Allocator,Node>::type al_;
- std::size_t size_;
- auto_space<copy_map_entry<Node>,Allocator> spc;
- std::size_t n;
- Node* header_org_;
- Node* header_cpy_;
- bool released;
+ typedef typename prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,Node>::type
+ >::type allocator_type;
+ typedef typename allocator_type::pointer allocator_pointer;
+
+ allocator_type al_;
+ std::size_t size_;
+ auto_space<copy_map_entry<Node>,Allocator> spc;
+ std::size_t n;
+ Node* header_org_;
+ Node* header_cpy_;
+ bool released;
 
   void deallocate(Node* node)
   {
- al_.deallocate(node,1);
+ al_.deallocate(static_cast<allocator_pointer>(node),1);
   }
 };
 

Deleted: branches/bcbboost/boost/multi_index/detail/def_ctor_tuple_cons.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/def_ctor_tuple_cons.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
+++ (empty file)
@@ -1,59 +0,0 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
- * Distributed under 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)
- *
- * See http://www.boost.org/libs/multi_index for library home page.
- */
-
-#ifndef BOOST_MULTI_INDEX_DETAIL_DEF_CTOR_TUPLE_CONS_HPP
-#define BOOST_MULTI_INDEX_DETAIL_DEF_CTOR_TUPLE_CONS_HPP
-
-#if defined(_MSC_VER)&&(_MSC_VER>=1200)
-#pragma once
-#endif
-
-#include <boost/config.hpp>
-
-#if defined(BOOST_MSVC)
-/* In MSVC, tuples::cons is not default constructible. We provide a
- * tiny wrapper around tuple::cons filling that hole.
- */
-
-#include <boost/tuple/tuple.hpp>
-
-namespace boost{
-
-namespace multi_index{
-
-namespace detail{
-
-template<typename Cons>
-struct default_constructible_tuple_cons:Cons
-{
- default_constructible_tuple_cons():
- Cons(
- Cons::head_type(),
- static_cast<const Cons::tail_type&>(
- default_constructible_tuple_cons<Cons::tail_type>()))
- {}
-
- default_constructible_tuple_cons(const Cons& cons):Cons(cons){}
-};
-
-template<>
-struct default_constructible_tuple_cons<tuples::null_type>:tuples::null_type
-{
- default_constructible_tuple_cons(){}
- default_constructible_tuple_cons(const tuples::null_type&){}
-};
-
-} /* namespace multi_index::detail */
-
-} /* namespace multi_index */
-
-} /* namespace boost */
-
-#endif /* BOOST_MSVC */
-
-#endif

Modified: branches/bcbboost/boost/multi_index/detail/hash_index_args.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/hash_index_args.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/hash_index_args.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -14,7 +14,7 @@
 #endif
 
 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
-#include <boost/functional/hash/hash.hpp>
+#include <boost/functional/hash.hpp>
 #include <boost/mpl/aux_/na.hpp>
 #include <boost/mpl/eval_if.hpp>
 #include <boost/mpl/identity.hpp>
@@ -26,8 +26,6 @@
 
 namespace boost{
 
-template<class T> struct hash; /* fwd decl. */
-
 namespace multi_index{
 
 namespace detail{

Modified: branches/bcbboost/boost/multi_index/detail/hash_index_iterator.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/hash_index_iterator.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/hash_index_iterator.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2006 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -50,12 +50,6 @@
     return node->value();
   }
 
- friend bool operator==(
- const hashed_index_iterator& x,const hashed_index_iterator& y)
- {
- return x.node==y.node;
- }
-
   hashed_index_iterator& operator++()
   {
     Node::increment(node,buckets->begin(),buckets->end());
@@ -100,6 +94,14 @@
   BucketArray* buckets;
 };
 
+template<typename Node,typename BucketArray,typename Derived>
+bool operator==(
+ const hashed_index_iterator<Node,BucketArray,Derived>& x,
+ const hashed_index_iterator<Node,BucketArray,Derived>& y)
+{
+ return x.get_node()==y.get_node();
+}
+
 } /* namespace multi_index::detail */
 
 } /* namespace multi_index */

Modified: branches/bcbboost/boost/multi_index/detail/hash_index_node.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/hash_index_node.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/hash_index_node.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2006 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -14,6 +14,8 @@
 #endif
 
 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/multi_index/detail/prevent_eti.hpp>
 #include <functional>
 
 namespace boost{
@@ -24,18 +26,30 @@
 
 /* singly-linked node for use by hashed_index */
 
+template<typename Allocator>
 struct hashed_index_node_impl
 {
- hashed_index_node_impl*& next(){return next_;}
- hashed_index_node_impl* next()const{return next_;}
+ typedef typename prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,hashed_index_node_impl
+ >::type
+ >::type::pointer pointer;
+ typedef typename prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,hashed_index_node_impl
+ >::type
+ >::type::const_pointer const_pointer;
+
+ pointer& next(){return next_;}
+ pointer next()const{return next_;}
 
   /* algorithmic stuff */
 
- static void increment(
- hashed_index_node_impl*& x,
- hashed_index_node_impl* bbegin,hashed_index_node_impl* bbend)
+ static void increment(pointer& x,pointer bbegin,pointer bbend)
   {
- std::less_equal<hashed_index_node_impl*> leq;
+ std::less_equal<pointer> leq;
 
     x=x->next();
     if(leq(bbegin,x)&&leq(x,bbend)){ /* bucket node */
@@ -46,66 +60,100 @@
     }
   }
 
- static void link(
- hashed_index_node_impl* x,hashed_index_node_impl* pos)
+ static void link(pointer x,pointer pos)
   {
     x->next()=pos->next();
     pos->next()=x;
   };
 
- static void unlink(hashed_index_node_impl* x)
+ static void unlink(pointer x)
   {
- hashed_index_node_impl* y=x->next();
+ pointer y=x->next();
     while(y->next()!=x){y=y->next();}
     y->next()=x->next();
   }
 
- static hashed_index_node_impl* prev(hashed_index_node_impl* x)
+ static pointer prev(pointer x)
   {
- hashed_index_node_impl* y=x->next();
+ pointer y=x->next();
     while(y->next()!=x){y=y->next();}
     return y;
   }
 
- static void unlink_next(hashed_index_node_impl* x)
+ static void unlink_next(pointer x)
   {
     x->next()=x->next()->next();
   }
 
 private:
- hashed_index_node_impl* next_;
+ pointer next_;
 };
 
 template<typename Super>
-struct hashed_index_node_trampoline:hashed_index_node_impl{};
+struct hashed_index_node_trampoline:
+ prevent_eti<
+ Super,
+ hashed_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ void
+ >::type
+ >
+ >::type
+{
+ typedef typename prevent_eti<
+ Super,
+ hashed_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ void
+ >::type
+ >
+ >::type impl_type;
+};
 
 template<typename Super>
 struct hashed_index_node:Super,hashed_index_node_trampoline<Super>
 {
- hashed_index_node_impl* impl()
- {return static_cast<impl_type*>(this);}
- const hashed_index_node_impl* impl()const
- {return static_cast<const impl_type*>(this);}
-
- static hashed_index_node* from_impl(hashed_index_node_impl *x)
- {return static_cast<hashed_index_node*>(static_cast<impl_type*>(x));}
- static const hashed_index_node* from_impl(const hashed_index_node_impl* x)
+private:
+ typedef hashed_index_node_trampoline<Super> trampoline;
+
+public:
+ typedef typename trampoline::impl_type impl_type;
+ typedef typename trampoline::pointer impl_pointer;
+ typedef typename trampoline::const_pointer const_impl_pointer;
+
+ impl_pointer impl()
+ {
+ return static_cast<impl_pointer>(
+ static_cast<impl_type*>(static_cast<trampoline*>(this)));
+ }
+
+ const_impl_pointer impl()const
+ {
+ return static_cast<const_impl_pointer>(
+ static_cast<const impl_type*>(static_cast<const trampoline*>(this)));
+ }
+
+ static hashed_index_node* from_impl(impl_pointer x)
+ {
+ return static_cast<hashed_index_node*>(
+ static_cast<trampoline*>(&*x));
+ }
+
+ static const hashed_index_node* from_impl(const_impl_pointer x)
   {
     return static_cast<const hashed_index_node*>(
- static_cast<const impl_type*>(x));
+ static_cast<const trampoline*>(&*x));
   }
 
   static void increment(
- hashed_index_node*& x,
- hashed_index_node_impl* bbegin,hashed_index_node_impl* bend)
+ hashed_index_node*& x,impl_pointer bbegin,impl_pointer bend)
   {
- hashed_index_node_impl* xi=x->impl();
- impl_type::increment(xi,bbegin,bend);
+ impl_pointer xi=x->impl();
+ trampoline::increment(xi,bbegin,bend);
     x=from_impl(xi);
   }
-
-private:
- typedef hashed_index_node_trampoline<Super> impl_type;
 };
 
 } /* namespace multi_index::detail */

Modified: branches/bcbboost/boost/multi_index/detail/header_holder.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/header_holder.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/header_holder.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -29,13 +29,13 @@
  * to the base from member trick.
  */
 
-template<typename NodeType,typename Final>
+template<typename NodeTypePtr,typename Final>
 struct header_holder:private noncopyable
 {
   header_holder():member(final().allocate_node()){}
- ~header_holder(){final().deallocate_node(member);}
+ ~header_holder(){final().deallocate_node(&*member);}
 
- NodeType* member;
+ NodeTypePtr member;
 
 private:
   Final& final(){return *static_cast<Final*>(this);}

Modified: branches/bcbboost/boost/multi_index/detail/index_base.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/index_base.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/index_base.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -46,7 +46,7 @@
 class index_base
 {
 protected:
- typedef index_node_base<Value> node_type;
+ typedef index_node_base<Value,Allocator> node_type;
   typedef typename multi_index_node_type<
     Value,IndexSpecifierList,Allocator>::type final_node_type;
   typedef multi_index_container<
@@ -117,6 +117,8 @@
 
   bool modify_(node_type*){return true;}
 
+ bool modify_rollback_(node_type*){return true;}
+
 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
   /* serialization */
 
@@ -162,9 +164,13 @@
     {return final().replace_(k,x);}
 
   template<typename Modifier>
- bool final_modify_(Modifier mod,final_node_type* x)
+ bool final_modify_(Modifier& mod,final_node_type* x)
     {return final().modify_(mod,x);}
 
+ template<typename Modifier,typename Rollback>
+ bool final_modify_(Modifier& mod,Rollback& back,final_node_type* x)
+ {return final().modify_(mod,back,x);}
+
 #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
   void final_check_invariant_()const{final().check_invariant_();}
 #endif

Modified: branches/bcbboost/boost/multi_index/detail/index_loader.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/index_loader.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/index_loader.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -91,7 +91,7 @@
   }
 
 private:
- Node** entries()const{return spc.data();}
+ Node** entries()const{return &*spc.data();}
 
   /* We try to delay sorting as much as possible just in case it
    * is not necessary, hence this version of load_node.

Modified: branches/bcbboost/boost/multi_index/detail/index_matcher.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/index_matcher.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/index_matcher.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -179,7 +179,7 @@
   }
 
 private:
- entry* entries()const{return spc.data();}
+ entry* entries()const{return &*spc.data();}
 
   auto_space<entry,Allocator> spc;
   std::size_t size_;

Modified: branches/bcbboost/boost/multi_index/detail/index_node_base.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/index_node_base.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/index_node_base.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2006 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -42,11 +42,12 @@
>::type space;
 };
 
-template<typename Value>
+template<typename Value,typename Allocator>
 struct index_node_base:private pod_value_holder<Value>
 {
   typedef index_node_base base_type; /* used for serialization purposes */
   typedef Value value_type;
+ typedef Allocator allocator_type;
 
   value_type& value()
   {
@@ -88,7 +89,9 @@
   const Value* p
   BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
 {
- return static_cast<Node*>(index_node_base<Value>::from_value(p));
+ typedef typename Node::allocator_type allocator_type;
+ return static_cast<Node*>(
+ index_node_base<Value,allocator_type>::from_value(p));
 }
 
 } /* namespace multi_index::detail */
@@ -109,9 +112,9 @@
 namespace detail{
 #endif
 
-template<class Archive,typename Value>
+template<class Archive,typename Value,typename Allocator>
 inline void load_construct_data(
- Archive&,boost::multi_index::detail::index_node_base<Value>*,
+ Archive&,boost::multi_index::detail::index_node_base<Value,Allocator>*,
   const unsigned int)
 {
   throw_exception(

Modified: branches/bcbboost/boost/multi_index/detail/iter_adaptor.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/iter_adaptor.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/iter_adaptor.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -30,6 +30,12 @@
  * for internal consumption.
  */
 
+/* NB. The purpose of the (non-inclass) global operators ==, < and - defined
+ * above is to partially alleviate a problem of MSVC++ 6.0 by * which
+ * friend-injected operators on T are not visible if T is instantiated only
+ * in template code where T is a dependent type.
+ */
+
 class iter_adaptor_access
 {
 public:
@@ -107,6 +113,15 @@
   const Derived& final()const{return *static_cast<const Derived*>(this);}
 };
 
+template<class Derived,class Base>
+bool operator==(
+ const forward_iter_adaptor_base<Derived,Base>& x,
+ const forward_iter_adaptor_base<Derived,Base>& y)
+{
+ return iter_adaptor_access::equal(
+ static_cast<const Derived&>(x),static_cast<const Derived&>(y));
+}
+
 template<>
 struct iter_adaptor_selector<std::forward_iterator_tag>
 {
@@ -156,6 +171,15 @@
   const Derived& final()const{return *static_cast<const Derived*>(this);}
 };
 
+template<class Derived,class Base>
+bool operator==(
+ const bidirectional_iter_adaptor_base<Derived,Base>& x,
+ const bidirectional_iter_adaptor_base<Derived,Base>& y)
+{
+ return iter_adaptor_access::equal(
+ static_cast<const Derived&>(x),static_cast<const Derived&>(y));
+}
+
 template<>
 struct iter_adaptor_selector<std::bidirectional_iterator_tag>
 {
@@ -228,6 +252,34 @@
   const Derived& final()const{return *static_cast<const Derived*>(this);}
 };
 
+template<class Derived,class Base>
+bool operator==(
+ const random_access_iter_adaptor_base<Derived,Base>& x,
+ const random_access_iter_adaptor_base<Derived,Base>& y)
+{
+ return iter_adaptor_access::equal(
+ static_cast<const Derived&>(x),static_cast<const Derived&>(y));
+}
+
+template<class Derived,class Base>
+bool operator<(
+ const random_access_iter_adaptor_base<Derived,Base>& x,
+ const random_access_iter_adaptor_base<Derived,Base>& y)
+{
+ return iter_adaptor_access::distance_to(
+ static_cast<const Derived&>(x),static_cast<const Derived&>(y))>0;
+}
+
+template<class Derived,class Base>
+typename random_access_iter_adaptor_base<Derived,Base>::difference_type
+operator-(
+ const random_access_iter_adaptor_base<Derived,Base>& x,
+ const random_access_iter_adaptor_base<Derived,Base>& y)
+{
+ return iter_adaptor_access::distance_to(
+ static_cast<const Derived&>(y),static_cast<const Derived&>(x));
+}
+
 template<>
 struct iter_adaptor_selector<std::random_access_iterator_tag>
 {

Modified: branches/bcbboost/boost/multi_index/detail/modify_key_adaptor.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/modify_key_adaptor.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/modify_key_adaptor.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -24,19 +24,19 @@
  * with references to references, dealing with function pointers, etc.
  */
 
-template<typename Modifier,typename Value,typename KeyFromValue>
+template<typename Fun,typename Value,typename KeyFromValue>
 struct modify_key_adaptor
 {
 
- modify_key_adaptor(Modifier mod_,KeyFromValue kfv_):mod(mod_),kfv(kfv_){}
+ modify_key_adaptor(Fun f_,KeyFromValue kfv_):f(f_),kfv(kfv_){}
 
   void operator()(Value& x)
   {
- mod(kfv(x));
+ f(kfv(x));
   }
 
 private:
- Modifier mod;
+ Fun f;
   KeyFromValue kfv;
 };
 

Modified: branches/bcbboost/boost/multi_index/detail/node_type.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/node_type.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/node_type.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -65,7 +65,7 @@
 
   typedef typename mpl::reverse_iter_fold<
     IndexSpecifierList,
- index_node_base<Value>,
+ index_node_base<Value,Allocator>,
     mpl::bind2<index_node_applier,mpl::_2,mpl::_1>
>::type type;
 };

Modified: branches/bcbboost/boost/multi_index/detail/ord_index_node.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/ord_index_node.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/ord_index_node.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -42,12 +42,15 @@
 
 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
 #include <cstddef>
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/multi_index/detail/prevent_eti.hpp>
 
 #if !defined(BOOST_MULTI_INDEX_DISABLE_COMPRESSED_ORDERED_INDEX_NODES)
 #include <boost/mpl/and.hpp>
 #include <boost/mpl/if.hpp>
 #include <boost/multi_index/detail/uintptr_type.hpp>
 #include <boost/type_traits/alignment_of.hpp>
+#include <boost/type_traits/is_same.hpp>
 #endif
 
 namespace boost{
@@ -61,27 +64,43 @@
 enum ordered_index_color{red=false,black=true};
 enum ordered_index_side{to_left=false,to_right=true};
 
+template<typename Allocator>
 struct ordered_index_node_impl; /* fwd decl. */
 
+template<typename Allocator>
 struct ordered_index_node_std_base
 {
- typedef ordered_index_color& color_ref;
- typedef ordered_index_node_impl*& parent_ref;
-
- ordered_index_color& color(){return color_;}
- ordered_index_color color()const{return color_;}
- ordered_index_node_impl*& parent(){return parent_;}
- ordered_index_node_impl* parent()const{return parent_;}
- ordered_index_node_impl*& left(){return left_;}
- ordered_index_node_impl* left()const{return left_;}
- ordered_index_node_impl*& right(){return right_;}
- ordered_index_node_impl* right()const{return right_;}
+ typedef typename prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,
+ ordered_index_node_impl<Allocator>
+ >::type
+ >::type::pointer pointer;
+ typedef typename prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,
+ ordered_index_node_impl<Allocator>
+ >::type
+ >::type::const_pointer const_pointer;
+ typedef ordered_index_color& color_ref;
+ typedef pointer& parent_ref;
+
+ ordered_index_color& color(){return color_;}
+ ordered_index_color color()const{return color_;}
+ pointer& parent(){return parent_;}
+ pointer parent()const{return parent_;}
+ pointer& left(){return left_;}
+ pointer left()const{return left_;}
+ pointer& right(){return right_;}
+ pointer right()const{return right_;}
 
 private:
- ordered_index_color color_;
- ordered_index_node_impl* parent_;
- ordered_index_node_impl* left_;
- ordered_index_node_impl* right_;
+ ordered_index_color color_;
+ pointer parent_;
+ pointer left_;
+ pointer right_;
 };
 
 #if !defined(BOOST_MULTI_INDEX_DISABLE_COMPRESSED_ORDERED_INDEX_NODES)
@@ -102,8 +121,12 @@
 #pragma warning(disable:4312 4311)
 #endif
 
+template<typename Allocator>
 struct ordered_index_node_compressed_base
 {
+ typedef ordered_index_node_impl<Allocator>* pointer;
+ typedef const ordered_index_node_impl<Allocator>* const_pointer;
+
   struct color_ref
   {
     color_ref(uintptr_type* r_):r(r_){}
@@ -133,12 +156,12 @@
   {
     parent_ref(uintptr_type* r_):r(r_){}
     
- operator ordered_index_node_impl*()const
+ operator pointer()const
     {
- return (ordered_index_node_impl*)(void*)(*r&~uintptr_type(1));
+ return (pointer)(void*)(*r&~uintptr_type(1));
     }
     
- parent_ref& operator=(ordered_index_node_impl* p)
+ parent_ref& operator=(pointer p)
     {
       *r=((uintptr_type)(void*)p)|(*r&uintptr_type(1));
       return *this;
@@ -146,69 +169,92 @@
     
     parent_ref& operator=(const parent_ref& x)
     {
- return operator=(x.operator ordered_index_node_impl*());
+ return operator=(x.operator pointer());
     }
 
- ordered_index_node_impl* operator->()const
+ pointer operator->()const
     {
- return operator ordered_index_node_impl*();
+ return operator pointer();
     }
 
   private:
     uintptr_type* r;
   };
   
- color_ref color(){return color_ref(&parentcolor_);}
- ordered_index_color color()const
+ color_ref color(){return color_ref(&parentcolor_);}
+ ordered_index_color color()const
   {
     return ordered_index_color(parentcolor_&std::size_t(1ul));
   }
 
- parent_ref parent(){return parent_ref(&parentcolor_);}
- ordered_index_node_impl* parent()const
+ parent_ref parent(){return parent_ref(&parentcolor_);}
+ pointer parent()const
   {
- return (ordered_index_node_impl*)(void*)(parentcolor_&~uintptr_type(1));
+ return (pointer)(void*)(parentcolor_&~uintptr_type(1));
   }
 
- ordered_index_node_impl*& left(){return left_;}
- ordered_index_node_impl* left()const{return left_;}
- ordered_index_node_impl*& right(){return right_;}
- ordered_index_node_impl* right()const{return right_;}
+ pointer& left(){return left_;}
+ pointer left()const{return left_;}
+ pointer& right(){return right_;}
+ pointer right()const{return right_;}
 
 private:
- uintptr_type parentcolor_;
- ordered_index_node_impl* left_;
- ordered_index_node_impl* right_;
+ uintptr_type parentcolor_;
+ pointer left_;
+ pointer right_;
 };
 #if defined(BOOST_MSVC)
 #pragma warning(pop)
 #endif
 #endif
 
-struct ordered_index_node_impl:
+template<typename Allocator>
+struct ordered_index_node_impl_base:
 
 #if !defined(BOOST_MULTI_INDEX_DISABLE_COMPRESSED_ORDERED_INDEX_NODES)
   mpl::if_c<
     !(has_uintptr_type::value)||
- (alignment_of<ordered_index_node_compressed_base>::value%2),
- ordered_index_node_std_base,
- ordered_index_node_compressed_base
+ (alignment_of<ordered_index_node_compressed_base<Allocator> >::value%2)||
+ !(is_same<
+ typename prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,
+ ordered_index_node_impl<Allocator>
+ >::type
+ >::type::pointer,
+ ordered_index_node_impl<Allocator>*>::value),
+ ordered_index_node_std_base<Allocator>,
+ ordered_index_node_compressed_base<Allocator>
>::type
 #else
- ordered_index_node_std_base
+ ordered_index_node_std_base<Allocator>
 #endif
 
+{};
+
+template<typename Allocator>
+struct ordered_index_node_impl:ordered_index_node_impl_base<Allocator>
 {
+private:
+ typedef ordered_index_node_impl_base<Allocator> super;
+
+public:
+ typedef typename super::color_ref color_ref;
+ typedef typename super::parent_ref parent_ref;
+ typedef typename super::pointer pointer;
+ typedef typename super::const_pointer const_pointer;
+
   /* interoperability with bidir_node_iterator */
 
- static void increment(ordered_index_node_impl*& x)
+ static void increment(pointer& x)
   {
- if(x->right()){
+ if(x->right()!=pointer(0)){
       x=x->right();
- while(x->left())x=x->left();
+ while(x->left()!=pointer(0))x=x->left();
     }
     else{
- ordered_index_node_impl* y=x->parent();
+ pointer y=x->parent();
       while(x==y->right()){
         x=y;
         y=y->parent();
@@ -217,17 +263,17 @@
     }
   }
 
- static void decrement(ordered_index_node_impl*& x)
+ static void decrement(pointer& x)
   {
     if(x->color()==red&&x->parent()->parent()==x){
       x=x->right();
     }
- else if(x->left()){
- ordered_index_node_impl* y=x->left();
- while(y->right())y=y->right();
+ else if(x->left()!=pointer(0)){
+ pointer y=x->left();
+ while(y->right()!=pointer(0))y=y->right();
       x=y;
     }else{
- ordered_index_node_impl* y=x->parent();
+ pointer y=x->parent();
       while(x==y->left()){
         x=y;
         y=y->parent();
@@ -238,12 +284,11 @@
 
   /* algorithmic stuff */
 
- static void rotate_left(
- ordered_index_node_impl* x,parent_ref root)
+ static void rotate_left(pointer x,parent_ref root)
   {
- ordered_index_node_impl* y=x->right();
+ pointer y=x->right();
     x->right()=y->left();
- if(y->left())y->left()->parent()=x;
+ if(y->left()!=pointer(0))y->left()->parent()=x;
     y->parent()=x->parent();
     
     if(x==root) root=y;
@@ -253,24 +298,23 @@
     x->parent()=y;
   }
 
- static ordered_index_node_impl* minimum(ordered_index_node_impl* x)
+ static pointer minimum(pointer x)
   {
- while(x->left())x=x->left();
+ while(x->left()!=pointer(0))x=x->left();
     return x;
   }
 
- static ordered_index_node_impl* maximum(ordered_index_node_impl* x)
+ static pointer maximum(pointer x)
   {
- while(x->right())x=x->right();
+ while(x->right()!=pointer(0))x=x->right();
     return x;
   }
 
- static void rotate_right(
- ordered_index_node_impl* x,parent_ref root)
+ static void rotate_right(pointer x,parent_ref root)
   {
- ordered_index_node_impl* y=x->left();
+ pointer y=x->left();
     x->left()=y->right();
- if(y->right())y->right()->parent()=x;
+ if(y->right()!=pointer(0))y->right()->parent()=x;
     y->parent()=x->parent();
 
     if(x==root) root=y;
@@ -280,14 +324,13 @@
     x->parent()=y;
   }
 
- static void rebalance(
- ordered_index_node_impl* x,parent_ref root)
+ static void rebalance(pointer x,parent_ref root)
   {
     x->color()=red;
     while(x!=root&&x->parent()->color()==red){
       if(x->parent()==x->parent()->parent()->left()){
- ordered_index_node_impl* y=x->parent()->parent()->right();
- if(y&&y->color()==red){
+ pointer y=x->parent()->parent()->right();
+ if(y!=pointer(0)&&y->color()==red){
           x->parent()->color()=black;
           y->color()=black;
           x->parent()->parent()->color()=red;
@@ -304,8 +347,8 @@
         }
       }
       else{
- ordered_index_node_impl* y=x->parent()->parent()->left();
- if(y&&y->color()==red){
+ pointer y=x->parent()->parent()->left();
+ if(y!=pointer(0)&&y->color()==red){
           x->parent()->color()=black;
           y->color()=black;
           x->parent()->parent()->color()=red;
@@ -326,9 +369,7 @@
   }
 
   static void link(
- ordered_index_node_impl* x,
- ordered_index_side side,ordered_index_node_impl* position,
- ordered_index_node_impl* header)
+ pointer x,ordered_index_side side,pointer position,pointer header)
   {
     if(side==to_left){
       position->left()=x; /* also makes leftmost=x when parent==header */
@@ -347,28 +388,27 @@
       }
     }
     x->parent()=position;
- x->left()=0;
- x->right()=0;
+ x->left()=pointer(0);
+ x->right()=pointer(0);
     ordered_index_node_impl::rebalance(x,header->parent());
   }
 
- static ordered_index_node_impl* rebalance_for_erase(
- ordered_index_node_impl* z,parent_ref root,
- ordered_index_node_impl*& leftmost,ordered_index_node_impl*& rightmost)
- {
- ordered_index_node_impl* y=z;
- ordered_index_node_impl* x=0;
- ordered_index_node_impl* x_parent=0;
- if(y->left()==0){ /* z has at most one non-null child. y==z. */
- x=y->right(); /* x might be null */
+ static pointer rebalance_for_erase(
+ pointer z,parent_ref root,pointer& leftmost,pointer& rightmost)
+ {
+ pointer y=z;
+ pointer x=pointer(0);
+ pointer x_parent=pointer(0);
+ if(y->left()==pointer(0)){ /* z has at most one non-null child. y==z. */
+ x=y->right(); /* x might be null */
     }
     else{
- if(y->right()==0) { /* z has exactly one non-null child. y==z. */
- x=y->left(); /* x is not null */
+ if(y->right()==pointer(0)){ /* z has exactly one non-null child. y==z. */
+ x=y->left(); /* x is not null */
       }
- else{ /* z has two non-null children. Set y to */
- y=y->right(); /* z's successor. x might be null. */
- while(y->left())y=y->left();
+ else{ /* z has two non-null children. Set y to */
+ y=y->right(); /* z's successor. x might be null. */
+ while(y->left()!=pointer(0))y=y->left();
         x=y->right();
       }
     }
@@ -377,7 +417,7 @@
       y->left()=z->left();
       if(y!=z->right()){
         x_parent=y->parent();
- if(x) x->parent()=y->parent();
+ if(x!=pointer(0))x->parent()=y->parent();
         y->parent()->left()=x; /* y must be a child of left */
         y->right()=z->right();
         z->right()->parent()=y;
@@ -397,7 +437,7 @@
     }
     else{ /* y==z */
       x_parent=y->parent();
- if(x)x->parent()=y->parent();
+ if(x!=pointer(0))x->parent()=y->parent();
       if(root==z){
         root=x;
       }
@@ -406,15 +446,15 @@
         else z->parent()->right()=x;
       }
       if(leftmost==z){
- if(z->right()==0){ /* z->left() must be null also */
+ if(z->right()==pointer(0)){ /* z->left() must be null also */
           leftmost=z->parent();
         }
         else{
- leftmost=minimum(x); /* makes leftmost==header if z==root */
+ leftmost=minimum(x); /* makes leftmost==header if z==root */
         }
       }
       if(rightmost==z){
- if(z->left()==0){ /* z->right() must be null also */
+ if(z->left()==pointer(0)){ /* z->right() must be null also */
           rightmost=z->parent();
         }
         else{ /* x==z->left() */
@@ -423,75 +463,73 @@
       }
     }
     if(y->color()!=red){
- while(x!=root&&(x==0 || x->color()==black)){
+ while(x!=root&&(x==pointer(0)|| x->color()==black)){
         if(x==x_parent->left()){
- ordered_index_node_impl* w=x_parent->right();
+ pointer w=x_parent->right();
           if(w->color()==red){
             w->color()=black;
             x_parent->color()=red;
             rotate_left(x_parent,root);
             w=x_parent->right();
           }
- if((w->left()==0||w->left()->color()==black) &&
- (w->right()==0||w->right()->color()==black)){
+ if((w->left()==pointer(0)||w->left()->color()==black) &&
+ (w->right()==pointer(0)||w->right()->color()==black)){
             w->color()=red;
             x=x_parent;
             x_parent=x_parent->parent();
           }
           else{
- if(w->right()==0
+ if(w->right()==pointer(0 )
                 || w->right()->color()==black){
- if(w->left()) w->left()->color()=black;
+ if(w->left()!=pointer(0)) w->left()->color()=black;
               w->color()=red;
               rotate_right(w,root);
               w=x_parent->right();
             }
             w->color()=x_parent->color();
             x_parent->color()=black;
- if(w->right())w->right()->color()=black;
+ if(w->right()!=pointer(0))w->right()->color()=black;
             rotate_left(x_parent,root);
             break;
           }
         }
         else{ /* same as above,with right <-> left */
- ordered_index_node_impl* w=x_parent->left();
+ pointer w=x_parent->left();
           if(w->color()==red){
             w->color()=black;
             x_parent->color()=red;
             rotate_right(x_parent,root);
             w=x_parent->left();
           }
- if((w->right()==0||w->right()->color()==black) &&
- (w->left()==0||w->left()->color()==black)){
+ if((w->right()==pointer(0)||w->right()->color()==black) &&
+ (w->left()==pointer(0)||w->left()->color()==black)){
             w->color()=red;
             x=x_parent;
             x_parent=x_parent->parent();
           }
           else{
- if(w->left()==0||w->left()->color()==black){
- if(w->right())w->right()->color()=black;
+ if(w->left()==pointer(0)||w->left()->color()==black){
+ if(w->right()!=pointer(0))w->right()->color()=black;
               w->color()=red;
               rotate_left(w,root);
               w=x_parent->left();
             }
             w->color()=x_parent->color();
             x_parent->color()=black;
- if(w->left())w->left()->color()=black;
+ if(w->left()!=pointer(0))w->left()->color()=black;
             rotate_right(x_parent,root);
             break;
           }
         }
       }
- if(x)x->color()=black;
+ if(x!=pointer(0))x->color()=black;
     }
     return y;
   }
 
- static void restore(
- ordered_index_node_impl* x,ordered_index_node_impl* position,
- ordered_index_node_impl* header)
+ static void restore(pointer x,pointer position,pointer header)
   {
- if(position->left()==0||position->left()==header){
+ if(position->left()==pointer(0)||position->left()==header){
       link(x,to_left,position,header);
     }
     else{
@@ -503,10 +541,9 @@
 #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
   /* invariant stuff */
 
- static std::size_t black_count(
- ordered_index_node_impl* node,ordered_index_node_impl* root)
+ static std::size_t black_count(pointer node,pointer root)
   {
- if(!node)return 0;
+ if(node==pointer(0))return 0;
     std::size_t sum=0;
     for(;;){
       if(node->color()==black)++sum;
@@ -519,54 +556,87 @@
 };
 
 template<typename Super>
-struct ordered_index_node_trampoline:ordered_index_node_impl{};
+struct ordered_index_node_trampoline:
+ prevent_eti<
+ Super,
+ ordered_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ void
+ >::type
+ >
+ >::type
+{
+ typedef typename prevent_eti<
+ Super,
+ ordered_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ void
+ >::type
+ >
+ >::type impl_type;
+};
 
 template<typename Super>
 struct ordered_index_node:Super,ordered_index_node_trampoline<Super>
 {
 private:
- typedef ordered_index_node_trampoline<Super> impl_type;
- typedef typename impl_type::color_ref color_ref;
- typedef typename impl_type::parent_ref parent_ref;
+ typedef ordered_index_node_trampoline<Super> trampoline;
 
 public:
- color_ref color(){return impl_type::color();}
- ordered_index_color color()const{return impl_type::color();}
- parent_ref parent(){return impl_type::parent();}
- ordered_index_node_impl* parent()const{return impl_type::parent();}
- ordered_index_node_impl*& left(){return impl_type::left();}
- ordered_index_node_impl* left()const{return impl_type::left();}
- ordered_index_node_impl*& right(){return impl_type::right();}
- ordered_index_node_impl* right()const{return impl_type::right();}
-
- ordered_index_node_impl* impl(){return static_cast<impl_type*>(this);}
- const ordered_index_node_impl* impl()const
- {return static_cast<const impl_type*>(this);}
+ typedef typename trampoline::impl_type impl_type;
+ typedef typename trampoline::color_ref impl_color_ref;
+ typedef typename trampoline::parent_ref impl_parent_ref;
+ typedef typename trampoline::pointer impl_pointer;
+ typedef typename trampoline::const_pointer const_impl_pointer;
+
+ impl_color_ref color(){return trampoline::color();}
+ ordered_index_color color()const{return trampoline::color();}
+ impl_parent_ref parent(){return trampoline::parent();}
+ impl_pointer parent()const{return trampoline::parent();}
+ impl_pointer& left(){return trampoline::left();}
+ impl_pointer left()const{return trampoline::left();}
+ impl_pointer& right(){return trampoline::right();}
+ impl_pointer right()const{return trampoline::right();}
 
- static ordered_index_node* from_impl(ordered_index_node_impl *x)
+ impl_pointer impl()
   {
- return static_cast<ordered_index_node*>(static_cast<impl_type*>(x));
+ return static_cast<impl_pointer>(
+ static_cast<impl_type*>(static_cast<trampoline*>(this)));
   }
-
- static const ordered_index_node* from_impl(const ordered_index_node_impl* x)
+
+ const_impl_pointer impl()const
+ {
+ return static_cast<const_impl_pointer>(
+ static_cast<const impl_type*>(static_cast<const trampoline*>(this)));
+ }
+
+ static ordered_index_node* from_impl(impl_pointer x)
+ {
+ return static_cast<ordered_index_node*>(
+ static_cast<trampoline*>(&*x));
+ }
+
+ static const ordered_index_node* from_impl(const_impl_pointer x)
   {
     return static_cast<const ordered_index_node*>(
- static_cast<const impl_type*>(x));
+ static_cast<const trampoline*>(&*x));
   }
 
   /* interoperability with bidir_node_iterator */
 
   static void increment(ordered_index_node*& x)
   {
- ordered_index_node_impl* xi=x->impl();
- impl_type::increment(xi);
+ impl_pointer xi=x->impl();
+ trampoline::increment(xi);
     x=from_impl(xi);
   }
 
   static void decrement(ordered_index_node*& x)
   {
- ordered_index_node_impl* xi=x->impl();
- impl_type::decrement(xi);
+ impl_pointer xi=x->impl();
+ trampoline::decrement(xi);
     x=from_impl(xi);
   }
 };

Modified: branches/bcbboost/boost/multi_index/detail/ord_index_ops.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/ord_index_ops.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/ord_index_ops.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -40,6 +40,9 @@
 #pragma once
 #endif
 
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <utility>
+
 namespace boost{
 
 namespace multi_index{
@@ -55,21 +58,20 @@
   typename CompatibleKey,typename CompatibleCompare
>
 inline Node* ordered_index_find(
- Node* header,const KeyFromValue& key,const CompatibleKey& x,
+ Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x,
   const CompatibleCompare& comp)
 {
- Node* y=header;
- Node* z=Node::from_impl(header->parent());
-
- while (z){
- if(!comp(key(z->value()),x)){
- y=z;
- z=Node::from_impl(z->left());
+ Node* y0=y;
+
+ while (top){
+ if(!comp(key(top->value()),x)){
+ y=top;
+ top=Node::from_impl(top->left());
     }
- else z=Node::from_impl(z->right());
+ else top=Node::from_impl(top->right());
   }
     
- return (y==header||comp(x,key(y->value())))?header:y;
+ return (y==y0||comp(x,key(y->value())))?y0:y;
 }
 
 template<
@@ -77,18 +79,15 @@
   typename CompatibleKey,typename CompatibleCompare
>
 inline Node* ordered_index_lower_bound(
- Node* header,const KeyFromValue& key,const CompatibleKey& x,
+ Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x,
   const CompatibleCompare& comp)
 {
- Node* y=header;
- Node* z=Node::from_impl(header->parent());
-
- while(z){
- if(!comp(key(z->value()),x)){
- y=z;
- z=Node::from_impl(z->left());
+ while(top){
+ if(!comp(key(top->value()),x)){
+ y=top;
+ top=Node::from_impl(top->left());
     }
- else z=Node::from_impl(z->right());
+ else top=Node::from_impl(top->right());
   }
 
   return y;
@@ -99,23 +98,46 @@
   typename CompatibleKey,typename CompatibleCompare
>
 inline Node* ordered_index_upper_bound(
- Node* header,const KeyFromValue& key,const CompatibleKey& x,
+ Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x,
   const CompatibleCompare& comp)
 {
- Node* y=header;
- Node* z=Node::from_impl(header->parent());
-
- while(z){
- if(comp(x,key(z->value()))){
- y=z;
- z=Node::from_impl(z->left());
+ while(top){
+ if(comp(x,key(top->value()))){
+ y=top;
+ top=Node::from_impl(top->left());
     }
- else z=Node::from_impl(z->right());
+ else top=Node::from_impl(top->right());
   }
 
   return y;
 }
 
+template<
+ typename Node,typename KeyFromValue,
+ typename CompatibleKey,typename CompatibleCompare
+>
+inline std::pair<Node*,Node*> ordered_index_equal_range(
+ Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x,
+ const CompatibleCompare& comp)
+{
+ while(top){
+ if(comp(key(top->value()),x)){
+ top=Node::from_impl(top->right());
+ }
+ else if(comp(x,key(top->value()))){
+ y=top;
+ top=Node::from_impl(top->left());
+ }
+ else{
+ return std::pair<Node*,Node*>(
+ ordered_index_lower_bound(Node::from_impl(top->left()),top,key,x,comp),
+ ordered_index_upper_bound(Node::from_impl(top->right()),y,key,x,comp));
+ }
+ }
+
+ return std::pair<Node*,Node*>(y,y);
+}
+
 } /* namespace multi_index::detail */
 
 } /* namespace multi_index */

Modified: branches/bcbboost/boost/multi_index/detail/rnd_index_loader.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/rnd_index_loader.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/rnd_index_loader.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2006 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -15,7 +15,9 @@
 
 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
 #include <algorithm>
+#include <boost/detail/allocator_utilities.hpp>
 #include <boost/multi_index/detail/auto_space.hpp>
+#include <boost/multi_index/detail/prevent_eti.hpp>
 #include <boost/multi_index/detail/rnd_index_ptr_array.hpp>
 #include <boost/noncopyable.hpp>
 #include <cstddef>
@@ -43,10 +45,19 @@
 class random_access_index_loader_base:private noncopyable
 {
 protected:
- typedef random_access_index_node_impl node_type;
- typedef random_access_index_ptr_array<Allocator> ptr_array_type;
+ typedef typename prevent_eti<
+ Allocator,
+ random_access_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ Allocator,
+ void
+ >::type
+ >
+ >::type node_impl_type;
+ typedef typename node_impl_type::pointer node_impl_pointer;
+ typedef random_access_index_ptr_array<Allocator> ptr_array;
 
- random_access_index_loader_base(const Allocator& al_,ptr_array_type& ptrs_):
+ random_access_index_loader_base(const Allocator& al_,ptr_array& ptrs_):
     al(al_),
     ptrs(ptrs_),
     header(*ptrs.end()),
@@ -58,14 +69,14 @@
   {
     if(preprocessed)
     {
- node_type* n=header;
+ node_impl_pointer n=header;
       next(n)=n;
 
       for(std::size_t i=ptrs.size();i--;){
         n=prev(n);
         std::size_t d=position(n);
         if(d!=i){
- node_type* m=prev(next_at(i));
+ node_impl_pointer m=prev(next_at(i));
           std::swap(m->up(),n->up());
           next_at(d)=next_at(i);
           std::swap(prev_at(d),prev_at(i));
@@ -75,10 +86,10 @@
     }
   }
 
- void rearrange(node_type* position,node_type *x)
+ void rearrange(node_impl_pointer position,node_impl_pointer x)
   {
     preprocess(); /* only incur this penalty if rearrange() is ever called */
- if(!position)position=header;
+ if(position==node_impl_pointer(0))position=header;
     next(prev(x))=next(x);
     prev(next(x))=prev(x);
     prev(x)=position;
@@ -91,49 +102,50 @@
   {
     if(!preprocessed){
       /* get space for the auxiliary prev array */
- auto_space<node_type*,Allocator> tmp(al,ptrs.size()+1);
+ auto_space<node_impl_pointer,Allocator> tmp(al,ptrs.size()+1);
       prev_spc.swap(tmp);
 
       /* prev_spc elements point to the prev nodes */
- std::rotate_copy(ptrs.begin(),ptrs.end(),ptrs.end()+1,prev_spc.data());
+ std::rotate_copy(
+ &*ptrs.begin(),&*ptrs.end(),&*ptrs.end()+1,&*prev_spc.data());
 
       /* ptrs elements point to the next nodes */
- std::rotate(ptrs.begin(),ptrs.begin()+1,ptrs.end()+1);
+ std::rotate(&*ptrs.begin(),&*ptrs.begin()+1,&*ptrs.end()+1);
 
       preprocessed=true;
     }
   }
 
- std::size_t position(node_type* x)const
+ std::size_t position(node_impl_pointer x)const
   {
     return (std::size_t)(x->up()-ptrs.begin());
   }
 
- node_type*& next_at(std::size_t n)const
+ node_impl_pointer& next_at(std::size_t n)const
   {
     return *ptrs.at(n);
   }
 
- node_type*& prev_at(std::size_t n)const
+ node_impl_pointer& prev_at(std::size_t n)const
   {
- return prev_spc.data()[n];
+ return *(prev_spc.data()+n);
   }
 
- node_type*& next(node_type* x)const
+ node_impl_pointer& next(node_impl_pointer x)const
   {
     return *(x->up());
   }
 
- node_type*& prev(node_type* x)const
+ node_impl_pointer& prev(node_impl_pointer x)const
   {
     return prev_at(position(x));
   }
 
- Allocator al;
- ptr_array_type& ptrs;
- node_type* header;
- auto_space<node_type*,Allocator> prev_spc;
- bool preprocessed;
+ Allocator al;
+ ptr_array& ptrs;
+ node_impl_pointer header;
+ auto_space<node_impl_pointer,Allocator> prev_spc;
+ bool preprocessed;
 };
 
 template<typename Node,typename Allocator>
@@ -141,16 +153,17 @@
   private random_access_index_loader_base<Allocator>
 {
   typedef random_access_index_loader_base<Allocator> super;
- typedef typename super::ptr_array_type ptr_array_type;
+ typedef typename super::node_impl_pointer node_impl_pointer;
+ typedef typename super::ptr_array ptr_array;
 
 public:
- random_access_index_loader(const Allocator& al_,ptr_array_type& ptrs_):
+ random_access_index_loader(const Allocator& al_,ptr_array& ptrs_):
     super(al_,ptrs_)
   {}
 
   void rearrange(Node* position,Node *x)
   {
- super::rearrange(position?position->impl():0,x->impl());
+ super::rearrange(position?position->impl():node_impl_pointer(0),x->impl());
   }
 };
 

Modified: branches/bcbboost/boost/multi_index/detail/rnd_index_node.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/rnd_index_node.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/rnd_index_node.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2006 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -15,7 +15,9 @@
 
 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
 #include <algorithm>
+#include <boost/detail/allocator_utilities.hpp>
 #include <boost/math/common_factor_rt.hpp>
+#include <boost/multi_index/detail/prevent_eti.hpp>
 #include <cstddef>
 #include <functional>
 
@@ -25,42 +27,58 @@
 
 namespace detail{
 
+template<typename Allocator>
 struct random_access_index_node_impl
 {
- random_access_index_node_impl**& up(){return up_;}
- random_access_index_node_impl** up()const{return up_;}
+ typedef typename prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,random_access_index_node_impl
+ >::type
+ >::type::pointer pointer;
+ typedef typename prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,random_access_index_node_impl
+ >::type
+ >::type::const_pointer const_pointer;
+ typedef typename prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,pointer
+ >::type
+ >::type::pointer ptr_pointer;
+
+ ptr_pointer& up(){return up_;}
+ ptr_pointer up()const{return up_;}
 
   /* interoperability with rnd_node_iterator */
 
- static void increment(random_access_index_node_impl*& x)
+ static void increment(pointer& x)
   {
     x=*(x->up()+1);
   }
 
- static void decrement(random_access_index_node_impl*& x)
+ static void decrement(pointer& x)
   {
     x=*(x->up()-1);
   }
 
- static void advance(
- random_access_index_node_impl*& x,std::ptrdiff_t n)
+ static void advance(pointer& x,std::ptrdiff_t n)
   {
     x=*(x->up()+n);
   }
 
- static std::ptrdiff_t distance(
- random_access_index_node_impl* x,random_access_index_node_impl* y)
+ static std::ptrdiff_t distance(pointer x,pointer y)
   {
     return y->up()-x->up();
   }
 
   /* algorithmic stuff */
 
- static void relocate(
- random_access_index_node_impl** pos,
- random_access_index_node_impl** x)
+ static void relocate(ptr_pointer pos,ptr_pointer x)
   {
- random_access_index_node_impl* n=*x;
+ pointer n=*x;
     if(x<pos){
       extract(x,pos);
       *(pos-1)=n;
@@ -77,12 +95,9 @@
     }
   };
 
- static void relocate(
- random_access_index_node_impl** pos,
- random_access_index_node_impl** first,
- random_access_index_node_impl** last)
+ static void relocate(ptr_pointer pos,ptr_pointer first,ptr_pointer last)
   {
- random_access_index_node_impl** begin,**middle,**end;
+ ptr_pointer begin,middle,end;
     if(pos<first){
       begin=pos;
       middle=first;
@@ -100,38 +115,36 @@
     std::ptrdiff_t p=math::gcd(n,m);
 
     for(std::ptrdiff_t i=0;i<p;++i){
- random_access_index_node_impl* tmp=begin[i];
+ pointer tmp=begin[i];
       for(std::ptrdiff_t j=i,k;;){
         if(j<n_m)k=j+m;
         else k=j-n_m;
         if(k==i){
- begin[j]=tmp;
- begin[j]->up()=&begin[j];
+ *(begin+j)=tmp;
+ (*(begin+j))->up()=begin+j;
           break;
         }
         else{
- begin[j]=begin[k];
- begin[j]->up()=&begin[j];
+ *(begin+j)=*(begin+k);
+ (*(begin+j))->up()=begin+j;
         }
 
         if(k<n_m)j=k+m;
         else j=k-n_m;
         if(j==i){
- begin[k]=tmp;
- begin[k]->up()=&begin[k];
+ *(begin+k)=tmp;
+ (*(begin+k))->up()=begin+k;
           break;
         }
         else{
- begin[k]=begin[j];
- begin[k]->up()=&begin[k];
+ *(begin+k)=*(begin+j);
+ (*(begin+k))->up()=begin+k;
         }
       }
     }
   };
 
- static void extract(
- random_access_index_node_impl** x,
- random_access_index_node_impl** pend)
+ static void extract(ptr_pointer x,ptr_pointer pend)
   {
     --pend;
     while(x!=pend){
@@ -142,9 +155,7 @@
   }
 
   static void transfer(
- random_access_index_node_impl** pbegin0,
- random_access_index_node_impl** pend0,
- random_access_index_node_impl** pbegin1)
+ ptr_pointer pbegin0,ptr_pointer pend0,ptr_pointer pbegin1)
   {
     while(pbegin0!=pend0){
       *pbegin1=*pbegin0++;
@@ -153,9 +164,7 @@
     }
   }
 
- static void reverse(
- random_access_index_node_impl** pbegin,
- random_access_index_node_impl** pend)
+ static void reverse(ptr_pointer pbegin,ptr_pointer pend)
   {
     std::ptrdiff_t d=(pend-pbegin)/2;
     for(std::ptrdiff_t i=0;i<d;++i){
@@ -167,68 +176,100 @@
   }
 
 private:
- random_access_index_node_impl** up_;
+ ptr_pointer up_;
 };
 
 template<typename Super>
-struct random_access_index_node_trampoline:random_access_index_node_impl{};
+struct random_access_index_node_trampoline:
+ prevent_eti<
+ Super,
+ random_access_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ void
+ >::type
+ >
+ >::type
+{
+ typedef typename prevent_eti<
+ Super,
+ random_access_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ void
+ >::type
+ >
+ >::type impl_type;
+};
 
 template<typename Super>
 struct random_access_index_node:
   Super,random_access_index_node_trampoline<Super>
 {
- random_access_index_node_impl**& up(){return impl_type::up();}
- random_access_index_node_impl** up()const{return impl_type::up();}
+private:
+ typedef random_access_index_node_trampoline<Super> trampoline;
+
+public:
+ typedef typename trampoline::impl_type impl_type;
+ typedef typename trampoline::pointer impl_pointer;
+ typedef typename trampoline::const_pointer const_impl_pointer;
+ typedef typename trampoline::ptr_pointer impl_ptr_pointer;
+
+ impl_ptr_pointer& up(){return trampoline::up();}
+ impl_ptr_pointer up()const{return trampoline::up();}
 
- random_access_index_node_impl* impl()
- {return static_cast<impl_type*>(this);}
- const random_access_index_node_impl* impl()const
- {return static_cast<const impl_type*>(this);}
+ impl_pointer impl()
+ {
+ return static_cast<impl_pointer>(
+ static_cast<impl_type*>(static_cast<trampoline*>(this)));
+ }
 
- static random_access_index_node* from_impl(random_access_index_node_impl *x)
+ const_impl_pointer impl()const
+ {
+ return static_cast<const_impl_pointer>(
+ static_cast<const impl_type*>(static_cast<const trampoline*>(this)));
+ }
+
+ static random_access_index_node* from_impl(impl_pointer x)
   {
     return static_cast<random_access_index_node*>(
- static_cast<impl_type*>(x));
+ static_cast<trampoline*>(&*x));
   }
 
- static const random_access_index_node* from_impl(
- const random_access_index_node_impl* x)
+ static const random_access_index_node* from_impl(const_impl_pointer x)
   {
     return static_cast<const random_access_index_node*>(
- static_cast<const impl_type*>(x));
+ static_cast<const trampoline*>(&*x));
   }
 
   /* interoperability with rnd_node_iterator */
 
   static void increment(random_access_index_node*& x)
   {
- random_access_index_node_impl* xi=x->impl();
- impl_type::increment(xi);
+ impl_pointer xi=x->impl();
+ trampoline::increment(xi);
     x=from_impl(xi);
   }
 
   static void decrement(random_access_index_node*& x)
   {
- random_access_index_node_impl* xi=x->impl();
- impl_type::decrement(xi);
+ impl_pointer xi=x->impl();
+ trampoline::decrement(xi);
     x=from_impl(xi);
   }
 
   static void advance(random_access_index_node*& x,std::ptrdiff_t n)
   {
- random_access_index_node_impl* xi=x->impl();
- impl_type::advance(xi,n);
+ impl_pointer xi=x->impl();
+ trampoline::advance(xi,n);
     x=from_impl(xi);
   }
 
   static std::ptrdiff_t distance(
     random_access_index_node* x,random_access_index_node* y)
   {
- return impl_type::distance(x->impl(),y->impl());
+ return trampoline::distance(x->impl(),y->impl());
   }
-
-private:
- typedef random_access_index_node_trampoline<Super> impl_type;
 };
 
 } /* namespace multi_index::detail */

Modified: branches/bcbboost/boost/multi_index/detail/rnd_index_ops.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/rnd_index_ops.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/rnd_index_ops.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -34,10 +34,11 @@
   BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
 {
   typedef typename Node::value_type value_type;
+ typedef typename Node::impl_ptr_pointer impl_ptr_pointer;
 
- random_access_index_node_impl** first=ptrs.begin(),
- ** res=first,
- ** last=ptrs.end();
+ impl_ptr_pointer first=ptrs.begin(),
+ res=first,
+ last=ptrs.end();
   for(;first!=last;++first){
     if(!pred(
         const_cast<const value_type&>(Node::from_impl(*first)->value()))){
@@ -57,11 +58,12 @@
   random_access_index_ptr_array<Allocator>& ptrs,BinaryPredicate binary_pred
   BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
 {
- typedef typename Node::value_type value_type;
+ typedef typename Node::value_type value_type;
+ typedef typename Node::impl_ptr_pointer impl_ptr_pointer;
 
- random_access_index_node_impl** first=ptrs.begin(),
- ** res=first,
- ** last=ptrs.end();
+ impl_ptr_pointer first=ptrs.begin(),
+ res=first,
+ last=ptrs.end();
   if(first!=last){
     for(;++first!=last;){
       if(!binary_pred(
@@ -84,17 +86,19 @@
 void random_access_index_inplace_merge(
   const Allocator& al,
   random_access_index_ptr_array<Allocator>& ptrs,
- random_access_index_node_impl** first1,Compare comp
+ BOOST_DEDUCED_TYPENAME Node::impl_ptr_pointer first1,Compare comp
   BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
 {
- typedef typename Node::value_type value_type;
-
- auto_space<random_access_index_node_impl*,Allocator> spc(al,ptrs.size());
-
- random_access_index_node_impl** first0=ptrs.begin(),
- ** last0=first1,
- ** last1=ptrs.end(),
- ** out=spc.data();
+ typedef typename Node::value_type value_type;
+ typedef typename Node::impl_pointer impl_pointer;
+ typedef typename Node::impl_ptr_pointer impl_ptr_pointer;
+
+ auto_space<impl_pointer,Allocator> spc(al,ptrs.size());
+
+ impl_ptr_pointer first0=ptrs.begin(),
+ last0=first1,
+ last1=ptrs.end(),
+ out=spc.data();
   while(first0!=last0&&first1!=last1){
     if(comp(
         const_cast<const value_type&>(Node::from_impl(*first1)->value()),
@@ -105,8 +109,8 @@
       *out++=*first0++;
     }
   }
- std::copy(first0,last0,out);
- std::copy(first1,last1,out);
+ std::copy(&*first0,&*last0,&*out);
+ std::copy(&*first1,&*last1,&*out);
 
   first1=ptrs.begin();
   out=spc.data();
@@ -124,13 +128,13 @@
 template<typename Node,typename Compare>
 struct random_access_index_sort_compare:
   std::binary_function<
- const typename Node::value_type*,const typename Node::value_type*,bool>
+ typename Node::impl_pointer,
+ typename Node::impl_pointer,bool>
 {
   random_access_index_sort_compare(Compare comp_=Compare()):comp(comp_){}
 
   bool operator()(
- random_access_index_node_impl* x,
- random_access_index_node_impl* y)const
+ typename Node::impl_pointer x,typename Node::impl_pointer y)const
   {
     typedef typename Node::value_type value_type;
 
@@ -171,18 +175,20 @@
    */
 
   typedef typename Node::value_type value_type;
+ typedef typename Node::impl_pointer impl_pointer;
+ typedef typename Node::impl_ptr_pointer impl_ptr_pointer;
   typedef random_access_index_sort_compare<
     Node,Compare> ptr_compare;
   
- random_access_index_node_impl** first=ptrs.begin();
- random_access_index_node_impl** last=ptrs.end();
+ impl_ptr_pointer first=ptrs.begin();
+ impl_ptr_pointer last=ptrs.end();
   auto_space<
- random_access_index_node_impl*,
- Allocator> spc(al,ptrs.size());
- random_access_index_node_impl** buf=spc.data();
+ impl_pointer,
+ Allocator> spc(al,ptrs.size());
+ impl_ptr_pointer buf=spc.data();
 
- std::copy(first,last,buf);
- std::stable_sort(buf,buf+ptrs.size(),ptr_compare(comp));
+ std::copy(&*first,&*last,&*buf);
+ std::stable_sort(&*buf,&*buf+ptrs.size(),ptr_compare(comp));
 
   while(first!=last){
     *first=*buf++;

Modified: branches/bcbboost/boost/multi_index/detail/rnd_index_ptr_array.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/rnd_index_ptr_array.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/rnd_index_ptr_array.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -15,7 +15,9 @@
 
 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
 #include <algorithm>
+#include <boost/detail/allocator_utilities.hpp>
 #include <boost/multi_index/detail/auto_space.hpp>
+#include <boost/multi_index/detail/prevent_eti.hpp>
 #include <boost/multi_index/detail/rnd_index_node.hpp>
 #include <boost/noncopyable.hpp>
 #include <cstddef>
@@ -31,8 +33,24 @@
 template<typename Allocator>
 class random_access_index_ptr_array:private noncopyable
 {
+ typedef typename prevent_eti<
+ Allocator,
+ random_access_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ Allocator,
+ void
+ >::type
+ >
+ >::type node_impl_type;
+
 public:
- typedef random_access_index_node_impl* value_type;
+ typedef typename node_impl_type::pointer value_type;
+ typedef typename prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,value_type
+ >::type
+ >::type::pointer pointer;
 
   random_access_index_ptr_array(
     const Allocator& al,value_type end_,std::size_t size):
@@ -58,15 +76,15 @@
   {
     if(c>capacity_){
       auto_space<value_type,Allocator> spc1(spc.get_allocator(),c+1);
- random_access_index_node_impl::transfer(begin(),end()+1,spc1.data());
+ node_impl_type::transfer(begin(),end()+1,spc1.data());
       spc.swap(spc1);
       capacity_=c;
     }
   }
 
- value_type* begin()const{return &ptrs()[0];}
- value_type* end()const{return &ptrs()[size_];}
- value_type* at(std::size_t n)const{return &ptrs()[n];}
+ pointer begin()const{return ptrs();}
+ pointer end()const{return ptrs()+size_;}
+ pointer at(std::size_t n)const{return ptrs()+n;}
 
   void push_back(value_type x)
   {
@@ -79,7 +97,7 @@
 
   void erase(value_type x)
   {
- random_access_index_node_impl::extract(x->up(),end()+1);
+ node_impl_type::extract(x->up(),end()+1);
     --size_;
   }
 
@@ -102,7 +120,7 @@
   std::size_t capacity_;
   auto_space<value_type,Allocator> spc;
 
- value_type* ptrs()const
+ pointer ptrs()const
   {
     return spc.data();
   }

Modified: branches/bcbboost/boost/multi_index/detail/rnd_node_iterator.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/rnd_node_iterator.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/rnd_node_iterator.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2006 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -47,18 +47,6 @@
     return node->value();
   }
 
- friend bool operator==(
- const rnd_node_iterator& x,const rnd_node_iterator& y)
- {
- return x.node==y.node;
- }
-
- friend bool operator<(
- const rnd_node_iterator& x,const rnd_node_iterator& y)
- {
- return Node::distance(x.node,y.node)>0;
- }
-
   rnd_node_iterator& operator++()
   {
     Node::increment(node);
@@ -83,12 +71,6 @@
     return *this;
   }
 
- friend std::ptrdiff_t operator-(
- const rnd_node_iterator& x,const rnd_node_iterator& y)
- {
- return Node::distance(y.node,x.node);
- }
-
 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
   /* Serialization. As for why the following is public,
    * see explanation in safe_mode_iterator notes in safe_mode.hpp.
@@ -124,6 +106,30 @@
   Node* node;
 };
 
+template<typename Node,typename Derived>
+bool operator==(
+ const rnd_node_iterator<Node,Derived>& x,
+ const rnd_node_iterator<Node,Derived>& y)
+{
+ return x.get_node()==y.get_node();
+}
+
+template<typename Node,typename Derived>
+bool operator<(
+ const rnd_node_iterator<Node,Derived>& x,
+ const rnd_node_iterator<Node,Derived>& y)
+{
+ return Node::distance(x.get_node(),y.get_node())>0;
+}
+
+template<typename Node,typename Derived>
+std::ptrdiff_t operator-(
+ const rnd_node_iterator<Node,Derived>& x,
+ const rnd_node_iterator<Node,Derived>& y)
+{
+ return Node::distance(y.get_node(),x.get_node());
+}
+
 } /* namespace multi_index::detail */
 
 } /* namespace multi_index */

Modified: branches/bcbboost/boost/multi_index/detail/seq_index_node.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/seq_index_node.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/seq_index_node.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2006 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -13,7 +13,10 @@
 #pragma once
 #endif
 
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
 #include <algorithm>
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/multi_index/detail/prevent_eti.hpp>
 
 namespace boost{
 
@@ -23,36 +26,48 @@
 
 /* doubly-linked node for use by sequenced_index */
 
+template<typename Allocator>
 struct sequenced_index_node_impl
 {
- sequenced_index_node_impl*& prior(){return prior_;}
- sequenced_index_node_impl* prior()const{return prior_;}
- sequenced_index_node_impl*& next(){return next_;}
- sequenced_index_node_impl* next()const{return next_;}
+ typedef typename prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,sequenced_index_node_impl
+ >::type
+ >::type::pointer pointer;
+ typedef typename prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,sequenced_index_node_impl
+ >::type
+ >::type::const_pointer const_pointer;
+
+ pointer& prior(){return prior_;}
+ pointer prior()const{return prior_;}
+ pointer& next(){return next_;}
+ pointer next()const{return next_;}
 
   /* interoperability with bidir_node_iterator */
 
- static void increment(sequenced_index_node_impl*& x){x=x->next();}
- static void decrement(sequenced_index_node_impl*& x){x=x->prior();}
+ static void increment(pointer& x){x=x->next();}
+ static void decrement(pointer& x){x=x->prior();}
 
   /* algorithmic stuff */
 
- static void link(
- sequenced_index_node_impl* x,sequenced_index_node_impl* header)
+ static void link(pointer x,pointer header)
   {
     x->prior()=header->prior();
     x->next()=header;
     x->prior()->next()=x->next()->prior()=x;
   };
 
- static void unlink(sequenced_index_node_impl* x)
+ static void unlink(pointer x)
   {
     x->prior()->next()=x->next();
     x->next()->prior()=x->prior();
   }
 
- static void relink(
- sequenced_index_node_impl* position,sequenced_index_node_impl* x)
+ static void relink(pointer position,pointer x)
   {
     unlink(x);
     x->prior()=position->prior();
@@ -60,14 +75,12 @@
     x->prior()->next()=x->next()->prior()=x;
   }
 
- static void relink(
- sequenced_index_node_impl* position,
- sequenced_index_node_impl* x,sequenced_index_node_impl* y)
+ static void relink(pointer position,pointer x,pointer y)
   {
     /* position is assumed not to be in [x,y) */
 
     if(x!=y){
- sequenced_index_node_impl* z=y->prior();
+ pointer z=y->prior();
       x->prior()->next()=y;
       y->prior()=x->prior();
       x->prior()=position->prior();
@@ -77,17 +90,17 @@
     }
   }
 
- static void reverse(sequenced_index_node_impl* header)
+ static void reverse(pointer header)
   {
- sequenced_index_node_impl* x=header;
+ pointer x=header;
     do{
- sequenced_index_node_impl* y=x->next();
+ pointer y=x->next();
       std::swap(x->prior(),x->next());
       x=y;
     }while(x!=header);
   }
 
- static void swap(sequenced_index_node_impl* x,sequenced_index_node_impl* y)
+ static void swap(pointer x,pointer y)
   {
     /* This swap function does not exchange the header nodes,
      * but rather their pointers. This is *not* used for implementing
@@ -117,53 +130,88 @@
   }
 
 private:
- sequenced_index_node_impl* prior_;
- sequenced_index_node_impl* next_;
+ pointer prior_;
+ pointer next_;
 };
 
 template<typename Super>
-struct sequenced_index_node_trampoline:sequenced_index_node_impl{};
+struct sequenced_index_node_trampoline:
+ prevent_eti<
+ Super,
+ sequenced_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ void
+ >::type
+ >
+ >::type
+{
+ typedef typename prevent_eti<
+ Super,
+ sequenced_index_node_impl<
+ typename boost::detail::allocator::rebind_to<
+ typename Super::allocator_type,
+ void
+ >::type
+ >
+ >::type impl_type;
+};
 
 template<typename Super>
 struct sequenced_index_node:Super,sequenced_index_node_trampoline<Super>
 {
- sequenced_index_node_impl*& prior(){return impl_type::prior();}
- sequenced_index_node_impl* prior()const{return impl_type::prior();}
- sequenced_index_node_impl*& next(){return impl_type::next();}
- sequenced_index_node_impl* next()const{return impl_type::next();}
-
- sequenced_index_node_impl* impl()
- {return static_cast<impl_type*>(this);}
- const sequenced_index_node_impl* impl()const
- {return static_cast<const impl_type*>(this);}
-
- static sequenced_index_node* from_impl(sequenced_index_node_impl *x)
- {return static_cast<sequenced_index_node*>(static_cast<impl_type*>(x));}
- static const sequenced_index_node* from_impl(
- const sequenced_index_node_impl* x)
+private:
+ typedef sequenced_index_node_trampoline<Super> trampoline;
+
+public:
+ typedef typename trampoline::impl_type impl_type;
+ typedef typename trampoline::pointer impl_pointer;
+ typedef typename trampoline::const_pointer const_impl_pointer;
+
+ impl_pointer& prior(){return trampoline::prior();}
+ impl_pointer prior()const{return trampoline::prior();}
+ impl_pointer& next(){return trampoline::next();}
+ impl_pointer next()const{return trampoline::next();}
+
+ impl_pointer impl()
+ {
+ return static_cast<impl_pointer>(
+ static_cast<impl_type*>(static_cast<trampoline*>(this)));
+ }
+
+ const_impl_pointer impl()const
+ {
+ return static_cast<const_impl_pointer>(
+ static_cast<const impl_type*>(static_cast<const trampoline*>(this)));
+ }
+
+ static sequenced_index_node* from_impl(impl_pointer x)
+ {
+ return static_cast<sequenced_index_node*>(
+ static_cast<trampoline*>(&*x));
+ }
+
+ static const sequenced_index_node* from_impl(const_impl_pointer x)
   {
     return static_cast<const sequenced_index_node*>(
- static_cast<const impl_type*>(x));
+ static_cast<const trampoline*>(&*x));
   }
 
   /* interoperability with bidir_node_iterator */
 
   static void increment(sequenced_index_node*& x)
   {
- sequenced_index_node_impl* xi=x->impl();
- impl_type::increment(xi);
+ impl_pointer xi=x->impl();
+ trampoline::increment(xi);
     x=from_impl(xi);
   }
 
   static void decrement(sequenced_index_node*& x)
   {
- sequenced_index_node_impl* xi=x->impl();
- impl_type::decrement(xi);
+ impl_pointer xi=x->impl();
+ trampoline::decrement(xi);
     x=from_impl(xi);
   }
-
-private:
- typedef sequenced_index_node_trampoline<Super> impl_type;
 };
 
 } /* namespace multi_index::detail */

Modified: branches/bcbboost/boost/multi_index/detail/seq_index_ops.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/seq_index_ops.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/seq_index_ops.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2006 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -77,23 +77,28 @@
 
 template<typename Node,typename Compare>
 void sequenced_index_collate(
- sequenced_index_node_impl* x,sequenced_index_node_impl* y,Compare comp
+ BOOST_DEDUCED_TYPENAME Node::impl_type* x,
+ BOOST_DEDUCED_TYPENAME Node::impl_type* y,
+ Compare comp
   BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
 {
- sequenced_index_node_impl* first0=x->next();
- sequenced_index_node_impl* last0=x;
- sequenced_index_node_impl* first1=y->next();
- sequenced_index_node_impl* last1=y;
+ typedef typename Node::impl_type impl_type;
+ typedef typename Node::impl_pointer impl_pointer;
+
+ impl_pointer first0=x->next();
+ impl_pointer last0=x;
+ impl_pointer first1=y->next();
+ impl_pointer last1=y;
   while(first0!=last0&&first1!=last1){
     if(comp(
         Node::from_impl(first1)->value(),Node::from_impl(first0)->value())){
- sequenced_index_node_impl* tmp=first1->next();
- sequenced_index_node_impl::relink(first0,first1);
+ impl_pointer tmp=first1->next();
+ impl_type::relink(first0,first1);
       first1=tmp;
     }
     else first0=first0->next();
   }
- sequenced_index_node_impl::relink(last0,first1,last1);
+ impl_type::relink(last0,first1,last1);
 }
 
 /* Some versions of CGG require a bogus typename in counter_spc
@@ -122,54 +127,64 @@
   if(header->next()==header->impl()||
      header->next()->next()==header->impl())return;
 
- aligned_storage<
- sizeof(sequenced_index_node_impl),
- alignment_of<
- sequenced_index_node_impl>::value
- >::type carry_spc;
- sequenced_index_node_impl& carry=
- *static_cast<sequenced_index_node_impl*>(static_cast<void*>(&carry_spc));
- aligned_storage<
+ typedef typename Node::impl_type impl_type;
+ typedef typename Node::impl_pointer impl_pointer;
+
+ typedef typename aligned_storage<
+ sizeof(impl_type),
+ alignment_of<impl_type>::value
+ >::type carry_spc_type;
+ carry_spc_type carry_spc;
+ impl_type& carry=
+ *static_cast<impl_type*>(static_cast<void*>(&carry_spc));
+ typedef typename aligned_storage<
     sizeof(
- sequenced_index_node_impl
+ impl_type
         [sequenced_index_sort_max_fill]),
     alignment_of<
- sequenced_index_node_impl
+ impl_type
         [sequenced_index_sort_max_fill]
>::value
- >::type counter_spc;
- sequenced_index_node_impl* counter=
- static_cast<sequenced_index_node_impl*>(static_cast<void*>(&counter_spc));
- std::size_t fill=0;
+ >::type counter_spc_type;
+ counter_spc_type counter_spc;
+ impl_type* counter=
+ static_cast<impl_type*>(static_cast<void*>(&counter_spc));
+ std::size_t fill=0;
 
- carry.prior()=carry.next()=&carry;
- counter[0].prior()=counter[0].next()=&counter[0];
+ carry.prior()=carry.next()=static_cast<impl_pointer>(&carry);
+ counter[0].prior()=counter[0].next()=static_cast<impl_pointer>(&counter[0]);
 
   BOOST_TRY{
     while(header->next()!=header->impl()){
- sequenced_index_node_impl::relink(carry.next(),header->next());
+ impl_type::relink(carry.next(),header->next());
       std::size_t i=0;
- while(i<fill&&counter[i].next()!=&counter[i]){
+ while(i<fill&&counter[i].next()!=static_cast<impl_pointer>(&counter[i])){
         sequenced_index_collate<Node>(&carry,&counter[i++],comp);
       }
- sequenced_index_node_impl::swap(&carry,&counter[i]);
+ impl_type::swap(
+ static_cast<impl_pointer>(&carry),
+ static_cast<impl_pointer>(&counter[i]));
       if(i==fill){
         ++fill;
- counter[fill].prior()=counter[fill].next()=&counter[fill];
+ counter[fill].prior()=counter[fill].next()=
+ static_cast<impl_pointer>(&counter[fill]);
       }
     }
 
     for(std::size_t i=1;i<fill;++i){
       sequenced_index_collate<Node>(&counter[i],&counter[i-1],comp);
     }
- sequenced_index_node_impl::swap(header->impl(),&counter[fill-1]);
+ impl_type::swap(
+ header->impl(),static_cast<impl_pointer>(&counter[fill-1]));
   }
   BOOST_CATCH(...)
   {
- sequenced_index_node_impl::relink(header->impl(),carry.next(),&carry);
+ impl_type::relink(
+ header->impl(),carry.next(),static_cast<impl_pointer>(&carry));
     for(std::size_t i=0;i<=fill;++i){
- sequenced_index_node_impl::relink(
- header->impl(),counter[i].next(),&counter[i]);
+ impl_type::relink(
+ header->impl(),counter[i].next(),
+ static_cast<impl_pointer>(&counter[i]));
     }
     BOOST_RETHROW;
   }

Modified: branches/bcbboost/boost/multi_index/detail/uintptr_type.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/uintptr_type.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/uintptr_type.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -44,13 +44,20 @@
 template<>struct uintptr_candidates<3> {typedef unsigned int type;};
 #endif
 
+#if defined(BOOST_HAS_MS_INT64)
+template<>struct uintptr_candidates<4> {typedef unsigned __int64 type;};
+#else
+template<>struct uintptr_candidates<4> {typedef unsigned int type;};
+#endif
+
 struct uintptr_aux
 {
   BOOST_STATIC_CONSTANT(int,index=
     sizeof(void*)==sizeof(uintptr_candidates<0>::type)?0:
     sizeof(void*)==sizeof(uintptr_candidates<1>::type)?1:
     sizeof(void*)==sizeof(uintptr_candidates<2>::type)?2:
- sizeof(void*)==sizeof(uintptr_candidates<3>::type)?3:-1);
+ sizeof(void*)==sizeof(uintptr_candidates<3>::type)?3:
+ sizeof(void*)==sizeof(uintptr_candidates<4>::type)?4:-1);
 
   BOOST_STATIC_CONSTANT(bool,has_uintptr_type=(index>=0));
 

Modified: branches/bcbboost/boost/multi_index/detail/unbounded.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/unbounded.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/unbounded.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2006 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -22,28 +22,59 @@
 
 /* dummy type and variable for use in ordered_index::range() */
 
-namespace detail{
-
-struct unbounded_type{};
-
-} /* namespace multi_index::detail */
-
-namespace{
-
 #if BOOST_WORKAROUND(BOOST_MSVC,<1300)
 /* The default branch actually works for MSVC 6.0, but seems like
- * the const qualifier reduces the performance of ordered indices! This
- * behavior is hard to explain and probably a test artifact, but it
- * does not hurt to have the workaround anyway.
+ * this implementation of unbounded improves the performance of ordered
+ * indices! This behavior is hard to explain and probably a test artifact,
+ * but it does not hurt to have the workaround anyway.
  */
 
+namespace detail{struct unbounded_type{};}
+
+namespace{
+
 static detail::unbounded_type unbounded_obj=detail::unbounded_type();
 static detail::unbounded_type& unbounded=unbounded_obj;
+
+} /* unnamed */
 #else
-const detail::unbounded_type unbounded=detail::unbounded_type();
+/* ODR-abiding technique shown at the example attached to
+ * http://lists.boost.org/Archives/boost/2006/07/108355.php
+ */
+
+namespace detail{class unbounded_helper;}
+
+detail::unbounded_helper unbounded(detail::unbounded_helper);
+
+namespace detail{
+
+class unbounded_helper
+{
+ unbounded_helper(){}
+ unbounded_helper(const unbounded_helper&){}
+ friend unbounded_helper multi_index::unbounded(unbounded_helper);
+};
+
+typedef unbounded_helper (*unbounded_type)(unbounded_helper);
+
+} /* namespace multi_index::detail */
+
+inline detail::unbounded_helper unbounded(detail::unbounded_helper)
+{
+ return detail::unbounded_helper();
+}
 #endif
 
-} /* unnamed */
+/* tags used in the implementation of range */
+
+namespace detail{
+
+struct none_unbounded_tag{};
+struct lower_unbounded_tag{};
+struct upper_unbounded_tag{};
+struct both_unbounded_tag{};
+
+} /* namespace multi_index::detail */
 
 } /* namespace multi_index */
 

Modified: branches/bcbboost/boost/multi_index/detail/value_compare.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/detail/value_compare.hpp (original)
+++ branches/bcbboost/boost/multi_index/detail/value_compare.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -26,7 +26,8 @@
 template<typename Value,typename KeyFromValue,typename Compare>
 struct value_comparison:std::binary_function<Value,Value,bool>
 {
- value_comparison(KeyFromValue key_=KeyFromValue(),Compare comp_=Compare()):
+ value_comparison(
+ const KeyFromValue& key_=KeyFromValue(),const Compare& comp_=Compare()):
     key(key_),comp(comp_)
   {
   }

Modified: branches/bcbboost/boost/multi_index/hashed_index.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/hashed_index.hpp (original)
+++ branches/bcbboost/boost/multi_index/hashed_index.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -100,6 +100,10 @@
 protected:
   typedef hashed_index_node<
     typename super::node_type> node_type;
+
+private:
+ typedef typename node_type::impl_type node_impl_type;
+ typedef typename node_impl_type::pointer node_impl_pointer;
   typedef bucket_array<
     typename super::final_allocator_type> bucket_array_type;
 
@@ -172,8 +176,7 @@
 #if BOOST_WORKAROUND(BOOST_MSVC,<1300)
   typedef safe_ctr_proxy_impl<
     hashed_index_iterator<
- node_type,
- bucket_array_type>,
+ node_type,bucket_array_type>,
     hashed_index> safe_super;
 #else
   typedef safe_mode::safe_container<
@@ -227,6 +230,19 @@
   iterator end(){return make_iterator(header());}
   const_iterator end()const{return make_iterator(header());}
 
+ const_iterator cbegin()const{return begin();}
+ const_iterator cend()const{return end();}
+
+ iterator iterator_to(const value_type& x)
+ {
+ return make_iterator(node_from_value<node_type>(&x));
+ }
+
+ const_iterator iterator_to(const value_type& x)const
+ {
+ return make_iterator(node_from_value<node_type>(&x));
+ }
+
   /* modifiers */
 
   std::pair<iterator,bool> insert(value_param_type x)
@@ -268,15 +284,15 @@
   {
     BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
 
- size_type s=0;
- std::size_t buc=buckets.position(hash(k));
- hashed_index_node_impl* x=buckets.at(buc);
- hashed_index_node_impl* y=x->next();
+ size_type s=0;
+ std::size_t buc=buckets.position(hash(k));
+ node_impl_pointer x=buckets.at(buc);
+ node_impl_pointer y=x->next();
     while(y!=x){
       if(eq(k,key(node_type::from_impl(y)->value()))){
         bool b;
         do{
- hashed_index_node_impl* z=y->next();
+ node_impl_pointer z=y->next();
           b=z!=x&&eq(
             key(node_type::from_impl(y)->value()),
             key(node_type::from_impl(z)->value()));
@@ -337,6 +353,27 @@
       mod,static_cast<final_node_type*>(position.get_node()));
   }
 
+ template<typename Modifier,typename Rollback>
+ bool modify(iterator position,Modifier mod,Rollback back)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ /* MSVC++ 6.0 optimizer on safe mode code chokes if this
+ * this is not added. Left it for all compilers as it does no
+ * harm.
+ */
+
+ position.detach();
+#endif
+
+ return this->final_modify_(
+ mod,back,static_cast<final_node_type*>(position.get_node()));
+ }
+
   template<typename Modifier>
   bool modify_key(iterator position,Modifier mod)
   {
@@ -348,6 +385,19 @@
       position,modify_key_adaptor<Modifier,value_type,KeyFromValue>(mod,key));
   }
 
+ template<typename Modifier,typename Rollback>
+ bool modify_key(iterator position,Modifier mod,Rollback back)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ return modify(
+ position,
+ modify_key_adaptor<Modifier,value_type,KeyFromValue>(mod,key),
+ modify_key_adaptor<Modifier,value_type,KeyFromValue>(back,key));
+ }
+
   void clear()
   {
     BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
@@ -385,9 +435,9 @@
     const CompatibleKey& k,
     const CompatibleHash& hash,const CompatiblePred& eq)const
   {
- std::size_t buc=buckets.position(hash(k));
- hashed_index_node_impl* x=buckets.at(buc);
- hashed_index_node_impl* y=x->next();
+ std::size_t buc=buckets.position(hash(k));
+ node_impl_pointer x=buckets.at(buc);
+ node_impl_pointer y=x->next();
     while(y!=x){
       if(eq(k,key(node_type::from_impl(y)->value()))){
         return make_iterator(node_type::from_impl(y));
@@ -410,10 +460,10 @@
     const CompatibleKey& k,
     const CompatibleHash& hash,const CompatiblePred& eq)const
   {
- size_type res=0;
- std::size_t buc=buckets.position(hash(k));
- hashed_index_node_impl* x=buckets.at(buc);
- hashed_index_node_impl* y=x->next();
+ size_type res=0;
+ std::size_t buc=buckets.position(hash(k));
+ node_impl_pointer x=buckets.at(buc);
+ node_impl_pointer y=x->next();
     while(y!=x){
       if(eq(k,key(node_type::from_impl(y)->value()))){
         do{
@@ -440,12 +490,12 @@
     const CompatibleKey& k,
     const CompatibleHash& hash,const CompatiblePred& eq)const
   {
- std::size_t buc=buckets.position(hash(k));
- hashed_index_node_impl* x=buckets.at(buc);
- hashed_index_node_impl* y=x->next();
+ std::size_t buc=buckets.position(hash(k));
+ node_impl_pointer x=buckets.at(buc);
+ node_impl_pointer y=x->next();
     while(y!=x){
       if(eq(k,key(node_type::from_impl(y)->value()))){
- hashed_index_node_impl* y0=y;
+ node_impl_pointer y0=y;
         do{
           y=y->next();
         }while(y!=x&&eq(k,key(node_type::from_impl(y)->value())));
@@ -471,9 +521,9 @@
 
   size_type bucket_size(size_type n)const
   {
- size_type res=0;
- hashed_index_node_impl* x=buckets.at(n);
- hashed_index_node_impl* y=x->next();
+ size_type res=0;
+ node_impl_pointer x=buckets.at(n);
+ node_impl_pointer y=x->next();
     while(y!=x){
       ++res;
       y=y->next();
@@ -493,8 +543,8 @@
 
   const_local_iterator begin(size_type n)const
   {
- hashed_index_node_impl* x=buckets.at(n);
- hashed_index_node_impl* y=x->next();
+ node_impl_pointer x=buckets.at(n);
+ node_impl_pointer y=x->next();
     if(y==x)return end();
     return make_iterator(node_type::from_impl(y));
   }
@@ -506,7 +556,7 @@
 
   const_local_iterator end(size_type n)const
   {
- hashed_index_node_impl* x=buckets.at(n);
+ node_impl_pointer x=buckets.at(n);
     if(x==x->next())return end();
     do{
       ++x;
@@ -514,6 +564,19 @@
     return make_iterator(node_type::from_impl(x->next()));
   }
 
+ const_local_iterator cbegin(size_type n)const{return begin(n);}
+ const_local_iterator cend(size_type n)const{return end(n);}
+
+ local_iterator local_iterator_to(const value_type& x)
+ {
+ return make_iterator(node_from_value<node_type>(&x));
+ }
+
+ const_local_iterator local_iterator_to(const value_type& x)const
+ {
+ return make_iterator(node_from_value<node_type>(&x));
+ }
+
   /* hash policy */
 
   float load_factor()const{return static_cast<float>(size())/bucket_count();}
@@ -602,13 +665,13 @@
     const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x,
     const copy_map_type& map)
   {
- for(hashed_index_node_impl* begin_org=x.buckets.begin(),
- * begin_cpy=buckets.begin(),
- * end_org=x.buckets.end();
+ for(node_impl_pointer begin_org=x.buckets.begin(),
+ begin_cpy=buckets.begin(),
+ end_org=x.buckets.end();
         begin_org!=end_org;++begin_org,++begin_cpy){
 
- hashed_index_node_impl* next_org=begin_org->next();
- hashed_index_node_impl* cpy=begin_cpy;
+ node_impl_pointer next_org=begin_org->next();
+ node_impl_pointer cpy=begin_cpy;
       while(next_org!=begin_org){
         cpy->next()=
           static_cast<node_type*>(
@@ -628,8 +691,8 @@
   {
     reserve(size()+1);
 
- std::size_t buc=find_bucket(v);
- hashed_index_node_impl* pos=buckets.at(buc);
+ std::size_t buc=find_bucket(v);
+ node_impl_pointer pos=buckets.at(buc);
     if(!link_point(v,pos,Category()))return node_type::from_impl(pos);
 
     node_type* res=static_cast<node_type*>(super::insert_(v,x));
@@ -644,8 +707,8 @@
   {
     reserve(size()+1);
 
- std::size_t buc=find_bucket(v);
- hashed_index_node_impl* pos=buckets.at(buc);
+ std::size_t buc=find_bucket(v);
+ node_impl_pointer pos=buckets.at(buc);
     if(!link_point(v,pos,Category()))return node_type::from_impl(pos);
 
     node_type* res=static_cast<node_type*>(super::insert_(v,position,x));
@@ -669,11 +732,11 @@
 
   void delete_all_nodes_()
   {
- for(hashed_index_node_impl* x=buckets.begin(),*x_end=buckets.end();
+ for(node_impl_pointer x=buckets.begin(),x_end=buckets.end();
         x!=x_end;++x){
- hashed_index_node_impl* y=x->next();
+ node_impl_pointer y=x->next();
       while(y!=x){
- hashed_index_node_impl* z=y->next();
+ node_impl_pointer z=y->next();
         this->final_delete_node_(
           static_cast<final_node_type*>(node_type::from_impl(y)));
         y=z;
@@ -716,12 +779,12 @@
       return super::replace_(v,x);
     }
 
- hashed_index_node_impl* y=prev(x);
+ node_impl_pointer y=prev(x);
     unlink_next(y);
 
     BOOST_TRY{
- std::size_t buc=find_bucket(v);
- hashed_index_node_impl* pos=buckets.at(buc);
+ std::size_t buc=find_bucket(v);
+ node_impl_pointer pos=buckets.at(buc);
       if(link_point(v,pos,Category())&&super::replace_(v,x)){
         link(x,pos);
         if(first_bucket>buc){
@@ -746,8 +809,8 @@
   {
     unlink(x);
 
- std::size_t buc;
- hashed_index_node_impl* pos;
+ std::size_t buc;
+ node_impl_pointer pos;
     BOOST_TRY
     {
       buc=find_bucket(x->value());
@@ -806,6 +869,34 @@
     BOOST_CATCH_END
   }
 
+ bool modify_rollback_(node_type* x)
+ {
+ node_impl_pointer y=prev(x);
+ unlink_next(y);
+
+ BOOST_TRY{
+ std::size_t buc=find_bucket(x->value());
+ node_impl_pointer pos=buckets.at(buc);
+ if(link_point(x->value(),pos,Category())&&super::modify_rollback_(x)){
+ link(x,pos);
+ if(first_bucket>buc){
+ first_bucket=buc;
+ }
+ else if(first_bucket<buc){
+ first_bucket=buckets.first_nonempty(first_bucket);
+ }
+ return true;
+ }
+ link(x,y);
+ return false;
+ }
+ BOOST_CATCH(...){
+ link(x,y);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
   /* serialization */
 
@@ -872,9 +963,9 @@
   }
 
   bool link_point(
- value_param_type v,hashed_index_node_impl*& pos,hashed_unique_tag)
+ value_param_type v,node_impl_pointer& pos,hashed_unique_tag)
   {
- hashed_index_node_impl* x=pos->next();
+ node_impl_pointer x=pos->next();
     while(x!=pos){
       if(eq(key(v),key(node_type::from_impl(x)->value()))){
         pos=x;
@@ -886,10 +977,10 @@
   }
 
   bool link_point(
- value_param_type v,hashed_index_node_impl*& pos,hashed_non_unique_tag)
+ value_param_type v,node_impl_pointer& pos,hashed_non_unique_tag)
   {
- hashed_index_node_impl* prev=pos;
- hashed_index_node_impl* x=pos->next();
+ node_impl_pointer prev=pos;
+ node_impl_pointer x=pos->next();
     while(x!=pos){
       if(eq(key(v),key(node_type::from_impl(x)->value()))){
         pos=prev;
@@ -901,29 +992,29 @@
     return true;
   }
   
- void link(node_type* x,hashed_index_node_impl* pos)
+ void link(node_type* x,node_impl_pointer pos)
   {
- hashed_index_node_impl::link(x->impl(),pos);
+ node_impl_type::link(x->impl(),pos);
   };
 
- void link(hashed_index_node_impl* x,hashed_index_node_impl* pos)
+ void link(node_impl_pointer x,node_impl_pointer pos)
   {
- hashed_index_node_impl::link(x,pos);
+ node_impl_type::link(x,pos);
   };
 
   void unlink(node_type* x)
   {
- hashed_index_node_impl::unlink(x->impl());
+ node_impl_type::unlink(x->impl());
   };
 
- static hashed_index_node_impl* prev(node_type* x)
+ static node_impl_pointer prev(node_type* x)
   {
- return hashed_index_node_impl::prev(x->impl());
+ return node_impl_type::prev(x->impl());
   }
 
- static void unlink_next(hashed_index_node_impl* x)
+ static void unlink_next(node_impl_pointer x)
   {
- hashed_index_node_impl::unlink_next(x);
+ node_impl_type::unlink_next(x);
   }
 
   void calculate_max_load()
@@ -949,10 +1040,10 @@
     auto_space<std::size_t,allocator_type> hashes(get_allocator(),size());
 
     std::size_t i=0;
- hashed_index_node_impl* x=buckets.begin();
- hashed_index_node_impl* x_end=buckets.end();
+ node_impl_pointer x=buckets.begin();
+ node_impl_pointer x_end=buckets.end();
     for(;x!=x_end;++x){
- hashed_index_node_impl* y=x->next();
+ node_impl_pointer y=x->next();
       while(y!=x){
         hashes.data()[i++]=hash(key(node_type::from_impl(y)->value()));
         y=y->next();
@@ -962,11 +1053,11 @@
     i=0;
     x=buckets.begin();
     for(;x!=x_end;++x){
- hashed_index_node_impl* y=x->next();
+ node_impl_pointer y=x->next();
       while(y!=x){
- hashed_index_node_impl* z=y->next();
- std::size_t buc1=buckets1.position(hashes.data()[i++]);
- hashed_index_node_impl* x1=buckets1.at(buc1);
+ node_impl_pointer z=y->next();
+ std::size_t buc1=buckets1.position(hashes.data()[i++]);
+ node_impl_pointer x1=buckets1.at(buc1);
         link(y,x1);
         y=z;
       }
@@ -1014,7 +1105,7 @@
 
 } /* namespace multi_index::detail */
 
-/* sequenced index specifiers */
+/* hashed index specifiers */
 
 template<typename Arg1,typename Arg2,typename Arg3,typename Arg4>
 struct hashed_unique

Modified: branches/bcbboost/boost/multi_index/identity_fwd.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/identity_fwd.hpp (original)
+++ branches/bcbboost/boost/multi_index/identity_fwd.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -6,8 +6,8 @@
  * See http://www.boost.org/libs/multi_index for library home page.
  */
 
-#ifndef BOOST_MULTI_INDEX_IDENTITY_HPP
-#define BOOST_MULTI_INDEX_IDENTITY_HPP
+#ifndef BOOST_MULTI_INDEX_IDENTITY_FWD_HPP
+#define BOOST_MULTI_INDEX_IDENTITY_FWD_HPP
 
 #if defined(_MSC_VER)&&(_MSC_VER>=1200)
 #pragma once

Modified: branches/bcbboost/boost/multi_index/key_extractors.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/key_extractors.hpp (original)
+++ branches/bcbboost/boost/multi_index/key_extractors.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2005 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -15,6 +15,7 @@
 
 #include <boost/multi_index/composite_key.hpp>
 #include <boost/multi_index/identity.hpp>
+#include <boost/multi_index/global_fun.hpp>
 #include <boost/multi_index/member.hpp>
 #include <boost/multi_index/mem_fun.hpp>
 

Modified: branches/bcbboost/boost/multi_index/mem_fun.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/mem_fun.hpp (original)
+++ branches/bcbboost/boost/multi_index/mem_fun.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-/* Copyright 2003-2006 Joaquín M López Muñoz.
+/* Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -39,16 +39,6 @@
  * arbitrary combinations of these (vg. T** or auto_ptr<T*>.)
  */
 
-/* NB. Some overloads of operator() have an extra dummy parameter int=0.
- * This disambiguator serves several purposes:
- * - Without it, MSVC++ 6.0 incorrectly regards some overloads as
- * specializations of a previous member function template.
- * - MSVC++ 6.0/7.0 seem to incorrectly treat some different memfuns
- * as if they have the same signature.
- * - If remove_const is broken due to lack of PTS, int=0 avoids the
- * declaration of memfuns with identical signature.
- */
-
 template<class Class,typename Type,Type (Class::*PtrToMemberFunction)()const>
 struct const_mem_fun
 {
@@ -78,7 +68,7 @@
     return operator()(x.get());
   }
 
- Type operator()(const reference_wrapper<Class>& x,int=0)const
+ Type operator()(const reference_wrapper<Class>& x)const
   {
     return operator()(x.get());
   }
@@ -115,9 +105,9 @@
 };
 
 /* MSVC++ 6.0 has problems with const member functions as non-type template
- * parameters, somehow it takes them as non-const. mem_fun_explicit workarounds
- * this defficiency by accepting an extra type parameter that specifies the
- * signature of he member function. The workaround was found at:
+ * parameters, somehow it takes them as non-const. const_mem_fun_explicit
+ * workarounds this deficiency by accepting an extra type parameter that
+ * specifies the signature of the member function. The workaround was found at:
  * Daniel, C.:"Re: weird typedef problem in VC",
  * news:microsoft.public.vc.language, 21st nov 2002,
  * http://groups.google.com/groups?
@@ -155,7 +145,7 @@
     return operator()(x.get());
   }
 
- Type operator()(const reference_wrapper<Class>& x,int=0)const
+ Type operator()(const reference_wrapper<Class>& x)const
   {
     return operator()(x.get());
   }
@@ -194,7 +184,7 @@
 };
 
 /* BOOST_MULTI_INDEX_CONST_MEM_FUN and BOOST_MULTI_INDEX_MEM_FUN resolve to
- * mem_fun_explicit for MSVC++ 6.0 and to [const_]mem_fun otherwise.
+ * [const_]mem_fun_explicit for MSVC++ 6.0 and to [const_]mem_fun otherwise.
  */
 
 #if defined(BOOST_MSVC)&&(BOOST_MSVC<1300)

Modified: branches/bcbboost/boost/multi_index/ordered_index.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/ordered_index.hpp (original)
+++ branches/bcbboost/boost/multi_index/ordered_index.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -46,6 +46,7 @@
 #include <boost/detail/no_exceptions_support.hpp>
 #include <boost/detail/workaround.hpp>
 #include <boost/iterator/reverse_iterator.hpp>
+#include <boost/mpl/if.hpp>
 #include <boost/mpl/push_front.hpp>
 #include <boost/multi_index/detail/access_specifier.hpp>
 #include <boost/multi_index/detail/bidir_node_iterator.hpp>
@@ -60,6 +61,7 @@
 #include <boost/multi_index/ordered_index_fwd.hpp>
 #include <boost/ref.hpp>
 #include <boost/tuple/tuple.hpp>
+#include <boost/type_traits/is_same.hpp>
 #include <utility>
 
 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
@@ -130,6 +132,10 @@
   typedef ordered_index_node<
     typename super::node_type> node_type;
 
+private:
+ typedef typename node_type::impl_type node_impl_type;
+ typedef typename node_impl_type::pointer node_impl_pointer;
+
 public:
   /* types */
 
@@ -237,7 +243,21 @@
   const_reverse_iterator rbegin()const{return make_reverse_iterator(end());}
   reverse_iterator rend(){return make_reverse_iterator(begin());}
   const_reverse_iterator rend()const{return make_reverse_iterator(begin());}
+ const_iterator cbegin()const{return begin();}
+ const_iterator cend()const{return end();}
+ const_reverse_iterator crbegin()const{return rbegin();}
+ const_reverse_iterator crend()const{return rend();}
  
+ iterator iterator_to(const value_type& x)
+ {
+ return make_iterator(node_from_value<node_type>(&x));
+ }
+
+ const_iterator iterator_to(const value_type& x)const
+ {
+ return make_iterator(node_from_value<node_type>(&x));
+ }
+
   /* capacity */
 
   bool empty()const{return this->final_empty_();}
@@ -338,6 +358,27 @@
       mod,static_cast<final_node_type*>(position.get_node()));
   }
 
+ template<typename Modifier,typename Rollback>
+ bool modify(iterator position,Modifier mod,Rollback back)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ /* MSVC++ 6.0 optimizer on safe mode code chokes if this
+ * this is not added. Left it for all compilers as it does no
+ * harm.
+ */
+
+ position.detach();
+#endif
+
+ return this->final_modify_(
+ mod,back,static_cast<final_node_type*>(position.get_node()));
+ }
+
   template<typename Modifier>
   bool modify_key(iterator position,Modifier mod)
   {
@@ -349,6 +390,19 @@
       position,modify_key_adaptor<Modifier,value_type,KeyFromValue>(mod,key));
   }
 
+ template<typename Modifier,typename Rollback>
+ bool modify_key(iterator position,Modifier mod,Rollback back)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ return modify(
+ position,
+ modify_key_adaptor<Modifier,value_type,KeyFromValue>(mod,key),
+ modify_key_adaptor<Modifier,value_type,KeyFromValue>(back,key));
+ }
+
   void swap(ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& x)
   {
     BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
@@ -376,14 +430,14 @@
   template<typename CompatibleKey>
   iterator find(const CompatibleKey& x)const
   {
- return make_iterator(ordered_index_find(header(),key,x,comp));
+ return make_iterator(ordered_index_find(root(),header(),key,x,comp));
   }
 
   template<typename CompatibleKey,typename CompatibleCompare>
   iterator find(
     const CompatibleKey& x,const CompatibleCompare& comp)const
   {
- return make_iterator(ordered_index_find(header(),key,x,comp));
+ return make_iterator(ordered_index_find(root(),header(),key,x,comp));
   }
 
   template<typename CompatibleKey>
@@ -403,42 +457,51 @@
   template<typename CompatibleKey>
   iterator lower_bound(const CompatibleKey& x)const
   {
- return make_iterator(ordered_index_lower_bound(header(),key,x,comp));
+ return make_iterator(
+ ordered_index_lower_bound(root(),header(),key,x,comp));
   }
 
   template<typename CompatibleKey,typename CompatibleCompare>
   iterator lower_bound(
     const CompatibleKey& x,const CompatibleCompare& comp)const
   {
- return make_iterator(ordered_index_lower_bound(header(),key,x,comp));
+ return make_iterator(
+ ordered_index_lower_bound(root(),header(),key,x,comp));
   }
 
   template<typename CompatibleKey>
   iterator upper_bound(const CompatibleKey& x)const
   {
- return make_iterator(ordered_index_upper_bound(header(),key,x,comp));
+ return make_iterator(
+ ordered_index_upper_bound(root(),header(),key,x,comp));
   }
 
   template<typename CompatibleKey,typename CompatibleCompare>
   iterator upper_bound(
     const CompatibleKey& x,const CompatibleCompare& comp)const
   {
- return make_iterator(ordered_index_upper_bound(header(),key,x,comp));
+ return make_iterator(
+ ordered_index_upper_bound(root(),header(),key,x,comp));
   }
 
   template<typename CompatibleKey>
   std::pair<iterator,iterator> equal_range(
     const CompatibleKey& x)const
   {
- return equal_range(x,comp);
+ std::pair<node_type*,node_type*> p=
+ ordered_index_equal_range(root(),header(),key,x,comp);
+ return std::pair<iterator,iterator>(
+ make_iterator(p.first),make_iterator(p.second));
   }
 
   template<typename CompatibleKey,typename CompatibleCompare>
   std::pair<iterator,iterator> equal_range(
     const CompatibleKey& x,const CompatibleCompare& comp)const
   {
+ std::pair<node_type*,node_type*> p=
+ ordered_index_equal_range(root(),header(),key,x,comp);
     return std::pair<iterator,iterator>(
- lower_bound(x,comp),upper_bound(x,comp));
+ make_iterator(p.first),make_iterator(p.second));
   }
 
   /* range */
@@ -447,12 +510,21 @@
   std::pair<iterator,iterator>
   range(LowerBounder lower,UpperBounder upper)const
   {
- std::pair<iterator,iterator> p(
- lower_range(lower),upper_range(upper));
- if(p.second!=end()&&(p.first==end()||comp(key(*p.second),key(*p.first)))){
- p.second=p.first;
- }
- return p;
+ typedef typename mpl::if_<
+ is_same<LowerBounder,unbounded_type>,
+ BOOST_DEDUCED_TYPENAME mpl::if_<
+ is_same<UpperBounder,unbounded_type>,
+ both_unbounded_tag,
+ lower_unbounded_tag
+ >::type,
+ BOOST_DEDUCED_TYPENAME mpl::if_<
+ is_same<UpperBounder,unbounded_type>,
+ upper_unbounded_tag,
+ none_unbounded_tag
+ >::type
+ >::type dispatch;
+
+ return range(lower,upper,dispatch());
   }
 
 BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
@@ -523,8 +595,8 @@
 
         cpy->color()=org->color();
 
- ordered_index_node_impl* parent_org=org->parent();
- if(!parent_org)cpy->parent()=0;
+ node_impl_pointer parent_org=org->parent();
+ if(parent_org==node_impl_pointer(0))cpy->parent()=node_impl_pointer(0);
         else{
           node_type* parent_cpy=map.find(
             static_cast<final_node_type*>(node_type::from_impl(parent_org)));
@@ -538,8 +610,10 @@
           }
         }
 
- if(!org->left())cpy->left()=0;
- if(!org->right())cpy->right()=0;
+ if(org->left()==node_impl_pointer(0))
+ cpy->left()=node_impl_pointer(0);
+ if(org->right()==node_impl_pointer(0))
+ cpy->right()=node_impl_pointer(0);
       }
     }
     
@@ -555,8 +629,7 @@
 
     node_type* res=static_cast<node_type*>(super::insert_(v,x));
     if(res==x){
- ordered_index_node_impl::link(
- x->impl(),inf.side,inf.pos,header()->impl());
+ node_impl_type::link(x->impl(),inf.side,inf.pos,header()->impl());
     }
     return res;
   }
@@ -570,15 +643,14 @@
 
     node_type* res=static_cast<node_type*>(super::insert_(v,position,x));
     if(res==x){
- ordered_index_node_impl::link(
- x->impl(),inf.side,inf.pos,header()->impl());
+ node_impl_type::link(x->impl(),inf.side,inf.pos,header()->impl());
     }
     return res;
   }
 
   void erase_(node_type* x)
   {
- ordered_index_node_impl::rebalance_for_erase(
+ node_impl_type::rebalance_for_erase(
       x->impl(),header()->parent(),header()->left(),header()->right());
     super::erase_(x);
 
@@ -623,23 +695,20 @@
     node_type* next=x;
     node_type::increment(next);
 
- ordered_index_node_impl::rebalance_for_erase(
+ node_impl_type::rebalance_for_erase(
       x->impl(),header()->parent(),header()->left(),header()->right());
 
     BOOST_TRY{
       link_info inf;
       if(link_point(key(v),inf,Category())&&super::replace_(v,x)){
- ordered_index_node_impl::link(
- x->impl(),inf.side,inf.pos,header()->impl());
+ node_impl_type::link(x->impl(),inf.side,inf.pos,header()->impl());
         return true;
       }
- ordered_index_node_impl::restore(
- x->impl(),next->impl(),header()->impl());
+ node_impl_type::restore(x->impl(),next->impl(),header()->impl());
       return false;
     }
     BOOST_CATCH(...){
- ordered_index_node_impl::restore(
- x->impl(),next->impl(),header()->impl());
+ node_impl_type::restore(x->impl(),next->impl(),header()->impl());
       BOOST_RETHROW;
     }
     BOOST_CATCH_END
@@ -657,7 +726,7 @@
     }
     BOOST_CATCH_END
     if(!b){
- ordered_index_node_impl::rebalance_for_erase(
+ node_impl_type::rebalance_for_erase(
         x->impl(),header()->parent(),header()->left(),header()->right());
       BOOST_TRY{
         link_info inf;
@@ -669,8 +738,7 @@
 #endif
           return false;
         }
- ordered_index_node_impl::link(
- x->impl(),inf.side,inf.pos,header()->impl());
+ node_impl_type::link(x->impl(),inf.side,inf.pos,header()->impl());
       }
       BOOST_CATCH(...){
         super::erase_(x);
@@ -686,7 +754,7 @@
 
     BOOST_TRY{
       if(!super::modify_(x)){
- ordered_index_node_impl::rebalance_for_erase(
+ node_impl_type::rebalance_for_erase(
           x->impl(),header()->parent(),header()->left(),header()->right());
 
 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
@@ -698,7 +766,7 @@
       else return true;
     }
     BOOST_CATCH(...){
- ordered_index_node_impl::rebalance_for_erase(
+ node_impl_type::rebalance_for_erase(
         x->impl(),header()->parent(),header()->left(),header()->right());
 
 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
@@ -710,6 +778,35 @@
     BOOST_CATCH_END
   }
 
+ bool modify_rollback_(node_type* x)
+ {
+ if(in_place(x->value(),x,Category())){
+ return super::modify_rollback_(x);
+ }
+
+ node_type* next=x;
+ node_type::increment(next);
+
+ node_impl_type::rebalance_for_erase(
+ x->impl(),header()->parent(),header()->left(),header()->right());
+
+ BOOST_TRY{
+ link_info inf;
+ if(link_point(key(x->value()),inf,Category())&&
+ super::modify_rollback_(x)){
+ node_impl_type::link(x->impl(),inf.side,inf.pos,header()->impl());
+ return true;
+ }
+ node_impl_type::restore(x->impl(),next->impl(),header()->impl());
+ return false;
+ }
+ BOOST_CATCH(...){
+ node_impl_type::restore(x->impl(),next->impl(),header()->impl());
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
   /* serialization */
 
@@ -740,7 +837,7 @@
     else{
       if((size_type)std::distance(begin(),end())!=size())return false;
 
- std::size_t len=ordered_index_node_impl::black_count(
+ std::size_t len=node_impl_type::black_count(
         leftmost()->impl(),root()->impl());
       for(const_iterator it=begin(),it_end=end();it!=it_end;++it){
         node_type* x=it.get_node();
@@ -754,16 +851,13 @@
         if(left_x&&comp(key(x->value()),key(left_x->value())))return false;
         if(right_x&&comp(key(right_x->value()),key(x->value())))return false;
         if(!left_x&&!right_x&&
- ordered_index_node_impl::black_count(
- x->impl(),root()->impl())!=len)
+ node_impl_type::black_count(x->impl(),root()->impl())!=len)
           return false;
       }
     
- if(leftmost()->impl()!=
- ordered_index_node_impl::minimum(root()->impl()))
+ if(leftmost()->impl()!=node_impl_type::minimum(root()->impl()))
         return false;
- if(rightmost()->impl()!=
- ordered_index_node_impl::maximum(root()->impl()))
+ if(rightmost()->impl()!=node_impl_type::maximum(root()->impl()))
         return false;
     }
 
@@ -790,15 +884,17 @@
     header()->color()=red;
     /* used to distinguish header() from root, in iterator.operator++ */
     
- header()->parent()=0;
+ header()->parent()=node_impl_pointer(0);
     header()->left()=header()->impl();
     header()->right()=header()->impl();
   }
 
   struct link_info
   {
- ordered_index_side side;
- ordered_index_node_impl* pos;
+ link_info():side(to_left){}
+
+ ordered_index_side side;
+ node_impl_pointer pos;
   };
 
   bool link_point(key_param_type k,link_info& inf,ordered_unique_tag)
@@ -847,6 +943,21 @@
     return true;
   }
 
+ bool lower_link_point(key_param_type k,link_info& inf,ordered_non_unique_tag)
+ {
+ node_type* y=header();
+ node_type* x=root();
+ bool c=false;
+ while (x){
+ y=x;
+ c=comp(key(x->value()),k);
+ x=node_type::from_impl(c?x->right():x->left());
+ }
+ inf.side=c?to_right:to_left;
+ inf.pos=y->impl();
+ return true;
+ }
+
   bool hinted_link_point(
     key_param_type k,node_type* position,link_info& inf,ordered_unique_tag)
   {
@@ -870,7 +981,7 @@
       node_type* before=position;
       node_type::decrement(before);
       if(comp(key(before->value()),k)&&comp(k,key(position->value()))){
- if(before->right()==0){
+ if(before->right()==node_impl_pointer(0)){
           inf.side=to_right;
           inf.pos=before->impl();
           return true;
@@ -894,7 +1005,7 @@
         inf.pos=position->impl();
         return true;
       }
- else return link_point(k,inf,ordered_non_unique_tag());
+ else return lower_link_point(k,inf,ordered_non_unique_tag());
     }
     else if(position==header()){
       if(!comp(k,key(rightmost()->value()))){
@@ -907,17 +1018,20 @@
     else{
       node_type* before=position;
       node_type::decrement(before);
- if (!comp(k,key(before->value()))&&!comp(key(position->value()),k)){
- if(before->right()==0){
- inf.side=to_right;
- inf.pos=before->impl();
- return true;
- }
- else{
- inf.side=to_left;
- inf.pos=position->impl();
- return true;
+ if(!comp(k,key(before->value()))){
+ if(!comp(key(position->value()),k)){
+ if(before->right()==node_impl_pointer(0)){
+ inf.side=to_right;
+ inf.pos=before->impl();
+ return true;
+ }
+ else{
+ inf.side=to_left;
+ inf.pos=position->impl();
+ return true;
+ }
         }
+ else return lower_link_point(k,inf,ordered_non_unique_tag());
       }
       else return link_point(k,inf,ordered_non_unique_tag());
     }
@@ -968,48 +1082,84 @@
   }
 #endif
 
- template<typename LowerBounder>
- iterator lower_range(LowerBounder lower)const
+ template<typename LowerBounder,typename UpperBounder>
+ std::pair<iterator,iterator>
+ range(LowerBounder lower,UpperBounder upper,none_unbounded_tag)const
   {
     node_type* y=header();
     node_type* z=root();
 
     while(z){
- if(lower(key(z->value()))){
+ if(!lower(key(z->value()))){
+ z=node_type::from_impl(z->right());
+ }
+ else if(!upper(key(z->value()))){
         y=z;
         z=node_type::from_impl(z->left());
       }
- else z=node_type::from_impl(z->right());
+ else{
+ return std::pair<iterator,iterator>(
+ make_iterator(
+ lower_range(node_type::from_impl(z->left()),z,lower)),
+ make_iterator(
+ upper_range(node_type::from_impl(z->right()),y,upper)));
+ }
     }
 
- return make_iterator(y);
+ return std::pair<iterator,iterator>(make_iterator(y),make_iterator(y));
   }
 
- iterator lower_range(unbounded_type)const
+ template<typename LowerBounder,typename UpperBounder>
+ std::pair<iterator,iterator>
+ range(LowerBounder,UpperBounder upper,lower_unbounded_tag)const
   {
- return begin();
+ return std::pair<iterator,iterator>(
+ begin(),
+ make_iterator(upper_range(root(),header(),upper)));
   }
 
- template<typename UpperBounder>
- iterator upper_range(UpperBounder upper)const
+ template<typename LowerBounder,typename UpperBounder>
+ std::pair<iterator,iterator>
+ range(LowerBounder lower,UpperBounder,upper_unbounded_tag)const
   {
- node_type* y=header();
- node_type* z=root();
+ return std::pair<iterator,iterator>(
+ make_iterator(lower_range(root(),header(),lower)),
+ end());
+ }
 
- while(z){
- if(!upper(key(z->value()))){
- y=z;
- z=node_type::from_impl(z->left());
+ template<typename LowerBounder,typename UpperBounder>
+ std::pair<iterator,iterator>
+ range(LowerBounder,UpperBounder,both_unbounded_tag)const
+ {
+ return std::pair<iterator,iterator>(begin(),end());
+ }
+
+ template<typename LowerBounder>
+ node_type * lower_range(node_type* top,node_type* y,LowerBounder lower)const
+ {
+ while(top){
+ if(lower(key(top->value()))){
+ y=top;
+ top=node_type::from_impl(top->left());
       }
- else z=node_type::from_impl(z->right());
+ else top=node_type::from_impl(top->right());
     }
 
- return make_iterator(y);
+ return y;
   }
 
- iterator upper_range(unbounded_type)const
+ template<typename UpperBounder>
+ node_type * upper_range(node_type* top,node_type* y,UpperBounder upper)const
   {
- return end();
+ while(top){
+ if(!upper(key(top->value()))){
+ y=top;
+ top=node_type::from_impl(top->left());
+ }
+ else top=node_type::from_impl(top->right());
+ }
+
+ return y;
   }
 
 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
@@ -1068,9 +1218,9 @@
     else node_type::increment(position);
 
     if(position!=x){
- ordered_index_node_impl::rebalance_for_erase(
+ node_impl_type::rebalance_for_erase(
         x->impl(),header()->parent(),header()->left(),header()->right());
- ordered_index_node_impl::restore(
+ node_impl_type::restore(
         x->impl(),position->impl(),header()->impl());
     }
   }

Modified: branches/bcbboost/boost/multi_index/random_access_index.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/random_access_index.hpp (original)
+++ branches/bcbboost/boost/multi_index/random_access_index.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -19,6 +19,8 @@
 #include <boost/detail/no_exceptions_support.hpp>
 #include <boost/detail/workaround.hpp>
 #include <boost/iterator/reverse_iterator.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/not.hpp>
 #include <boost/mpl/push_front.hpp>
 #include <boost/multi_index/detail/access_specifier.hpp>
 #include <boost/multi_index/detail/index_node_base.hpp>
@@ -32,6 +34,7 @@
 #include <boost/multi_index/random_access_index_fwd.hpp>
 #include <boost/throw_exception.hpp>
 #include <boost/tuple/tuple.hpp>
+#include <boost/type_traits/is_integral.hpp>
 #include <cstddef>
 #include <functional>
 #include <stdexcept>
@@ -94,6 +97,12 @@
   typedef random_access_index_node<
     typename super::node_type> node_type;
 
+private:
+ typedef typename node_type::impl_type node_impl_type;
+ typedef random_access_index_ptr_array<
+ typename super::final_allocator_type> ptr_array;
+ typedef typename ptr_array::pointer node_impl_ptr_pointer;
+
 public:
   /* types */
 
@@ -183,9 +192,7 @@
   template <class InputIterator>
   void assign(InputIterator first,InputIterator last)
   {
- BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
- clear();
- for(;first!=last;++first)push_back(*first);
+ assign_iter(first,last,mpl::not_<is_integral<InputIterator> >());
   }
 
   void assign(size_type n,value_param_type value)
@@ -212,6 +219,20 @@
   const_reverse_iterator rbegin()const{return make_reverse_iterator(end());}
   reverse_iterator rend(){return make_reverse_iterator(begin());}
   const_reverse_iterator rend()const{return make_reverse_iterator(begin());}
+ const_iterator cbegin()const{return begin();}
+ const_iterator cend()const{return end();}
+ const_reverse_iterator crbegin()const{return rbegin();}
+ const_reverse_iterator crend()const{return rend();}
+
+ iterator iterator_to(const value_type& x)
+ {
+ return make_iterator(node_from_value<node_type>(&x));
+ }
+
+ const_iterator iterator_to(const value_type& x)const
+ {
+ return make_iterator(node_from_value<node_type>(&x));
+ }
 
   /* capacity */
 
@@ -290,19 +311,7 @@
   template<typename InputIterator>
   void insert(iterator position,InputIterator first,InputIterator last)
   {
- BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
- size_type s=0;
- BOOST_TRY{
- for(;first!=last;++first){
- if(push_back(*first).second)++s;
- }
- }
- BOOST_CATCH(...){
- relocate(position,end()-s,end());
- BOOST_RETHROW;
- }
- BOOST_CATCH_END
- relocate(position,end()-s,end());
+ insert_iter(position,first,last,mpl::not_<is_integral<InputIterator> >());
   }
 
   iterator erase(iterator position)
@@ -360,6 +369,27 @@
       mod,static_cast<final_node_type*>(position.get_node()));
   }
 
+ template<typename Modifier,typename Rollback>
+ bool modify(iterator position,Modifier mod,Rollback back)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ /* MSVC++ 6.0 optimizer on safe mode code chokes if this
+ * this is not added. Left it for all compilers as it does no
+ * harm.
+ */
+
+ position.detach();
+#endif
+
+ return this->final_modify_(
+ mod,back,static_cast<final_node_type*>(position.get_node()));
+ }
+
   void swap(random_access_index<SuperMeta,TagList>& x)
   {
     BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
@@ -540,7 +570,7 @@
   void reverse()
   {
     BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
- random_access_index_node_impl::reverse(ptrs.begin(),ptrs.end());
+ node_impl_type::reverse(ptrs.begin(),ptrs.end());
   }
 
   /* rearrange operations */
@@ -575,10 +605,10 @@
   void rearrange(InputIterator first)
   {
     BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
- for(random_access_index_node_impl** p0=ptrs.begin(),** p0_end=ptrs.end();
+ for(node_impl_ptr_pointer p0=ptrs.begin(),p0_end=ptrs.end();
         p0!=p0_end;++first,++p0){
- const value_type& v1=*first;
- random_access_index_node_impl** p1=node_from_value<node_type>(&v1)->up();
+ const value_type& v1=*first;
+ node_impl_ptr_pointer p1=node_from_value<node_type>(&v1)->up();
 
       std::swap(*p0,*p1);
       (*p0)->up()=p0;
@@ -625,9 +655,9 @@
   void copy_(
     const random_access_index<SuperMeta,TagList>& x,const copy_map_type& map)
   {
- for(random_access_index_node_impl** begin_org=x.ptrs.begin(),
- ** begin_cpy=ptrs.begin(),
- ** end_org=x.ptrs.end();
+ for(node_impl_ptr_pointer begin_org=x.ptrs.begin(),
+ begin_cpy=ptrs.begin(),
+ end_org=x.ptrs.end();
         begin_org!=end_org;++begin_org,++begin_cpy){
       *begin_cpy=
          static_cast<node_type*>(
@@ -668,8 +698,7 @@
 
   void delete_all_nodes_()
   {
- for(random_access_index_node_impl** x=ptrs.begin(),**x_end=ptrs.end();
- x!=x_end;++x){
+ for(node_impl_ptr_pointer x=ptrs.begin(),x_end=ptrs.end();x!=x_end;++x){
       this->final_delete_node_(
         static_cast<final_node_type*>(node_type::from_impl(*x)));
     }
@@ -727,6 +756,11 @@
     BOOST_CATCH_END
   }
 
+ bool modify_rollback_(node_type* x)
+ {
+ return super::modify_rollback_(x);
+ }
+
 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
   /* serialization */
 
@@ -785,12 +819,12 @@
 
   static void relocate(node_type* position,node_type* x)
   {
- random_access_index_node_impl::relocate(position->up(),x->up());
+ node_impl_type::relocate(position->up(),x->up());
   }
 
   static void relocate(node_type* position,node_type* first,node_type* last)
   {
- random_access_index_node_impl::relocate(
+ node_impl_type::relocate(
       position->up(),first->up(),last->up());
   }
 
@@ -802,7 +836,61 @@
   }
 #endif
 
- random_access_index_ptr_array<typename super::final_allocator_type> ptrs;
+ template <class InputIterator>
+ void assign_iter(InputIterator first,InputIterator last,mpl::true_)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ clear();
+ for(;first!=last;++first)push_back(*first);
+ }
+
+ void assign_iter(size_type n,value_param_type value,mpl::false_)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ clear();
+ for(size_type i=0;i<n;++i)push_back(value);
+ }
+
+ template<typename InputIterator>
+ void insert_iter(
+ iterator position,InputIterator first,InputIterator last,mpl::true_)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ size_type s=0;
+ BOOST_TRY{
+ for(;first!=last;++first){
+ if(push_back(*first).second)++s;
+ }
+ }
+ BOOST_CATCH(...){
+ relocate(position,end()-s,end());
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ relocate(position,end()-s,end());
+ }
+
+ void insert_iter(
+ iterator position,size_type n,value_param_type x,mpl::false_)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ size_type s=0;
+ BOOST_TRY{
+ while(n--){
+ if(push_back(x).second)++s;
+ }
+ }
+ BOOST_CATCH(...){
+ relocate(position,end()-s,end());
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ relocate(position,end()-s,end());
+ }
+
+ ptr_array ptrs;
 
 #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
     BOOST_WORKAROUND(__MWERKS__,<=0x3003)

Modified: branches/bcbboost/boost/multi_index/sequenced_index.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index/sequenced_index.hpp (original)
+++ branches/bcbboost/boost/multi_index/sequenced_index.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -15,9 +15,12 @@
 
 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
 #include <boost/call_traits.hpp>
+#include <boost/detail/allocator_utilities.hpp>
 #include <boost/detail/no_exceptions_support.hpp>
 #include <boost/detail/workaround.hpp>
 #include <boost/iterator/reverse_iterator.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/not.hpp>
 #include <boost/mpl/push_front.hpp>
 #include <boost/multi_index/detail/access_specifier.hpp>
 #include <boost/multi_index/detail/bidir_node_iterator.hpp>
@@ -29,6 +32,7 @@
 #include <boost/multi_index/detail/seq_index_ops.hpp>
 #include <boost/multi_index/sequenced_index_fwd.hpp>
 #include <boost/tuple/tuple.hpp>
+#include <boost/type_traits/is_integral.hpp>
 #include <cstddef>
 #include <functional>
 #include <utility>
@@ -81,47 +85,50 @@
 #pragma parse_mfunc_templ off
 #endif
 
- typedef typename SuperMeta::type super;
+ typedef typename SuperMeta::type super;
 
 protected:
   typedef sequenced_index_node<
- typename super::node_type> node_type;
+ typename super::node_type> node_type;
 
+private:
+ typedef typename node_type::impl_type node_impl_type;
+
 public:
   /* types */
 
- typedef typename node_type::value_type value_type;
- typedef tuples::null_type ctor_args;
- typedef typename super::final_allocator_type allocator_type;
- typedef typename allocator_type::reference reference;
- typedef typename allocator_type::const_reference const_reference;
+ typedef typename node_type::value_type value_type;
+ typedef tuples::null_type ctor_args;
+ typedef typename super::final_allocator_type allocator_type;
+ typedef typename allocator_type::reference reference;
+ typedef typename allocator_type::const_reference const_reference;
 
 #if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
 #if BOOST_WORKAROUND(BOOST_MSVC,<1300)
   typedef safe_mode::safe_iterator<
     bidir_node_iterator<node_type>,
     safe_ctr_proxy<
- bidir_node_iterator<node_type> > > iterator;
+ bidir_node_iterator<node_type> > > iterator;
 #else
   typedef safe_mode::safe_iterator<
     bidir_node_iterator<node_type>,
- sequenced_index> iterator;
+ sequenced_index> iterator;
 #endif
 #else
- typedef bidir_node_iterator<node_type> iterator;
+ typedef bidir_node_iterator<node_type> iterator;
 #endif
 
- typedef iterator const_iterator;
+ typedef iterator const_iterator;
 
- typedef std::size_t size_type;
- typedef std::ptrdiff_t difference_type;
- typedef typename allocator_type::pointer pointer;
- typedef typename allocator_type::const_pointer const_pointer;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef typename allocator_type::pointer pointer;
+ typedef typename allocator_type::const_pointer const_pointer;
   typedef typename
- boost::reverse_iterator<iterator> reverse_iterator;
+ boost::reverse_iterator<iterator> reverse_iterator;
   typedef typename
- boost::reverse_iterator<const_iterator> const_reverse_iterator;
- typedef TagList tag_list;
+ boost::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef TagList tag_list;
 
 protected:
   typedef typename super::final_node_type final_node_type;
@@ -175,9 +182,7 @@
   template <class InputIterator>
   void assign(InputIterator first,InputIterator last)
   {
- BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
- clear();
- for(;first!=last;++first)push_back(*first);
+ assign_iter(first,last,mpl::not_<is_integral<InputIterator> >());
   }
 
   void assign(size_type n,value_param_type value)
@@ -204,6 +209,20 @@
   const_reverse_iterator rbegin()const{return make_reverse_iterator(end());}
   reverse_iterator rend(){return make_reverse_iterator(begin());}
   const_reverse_iterator rend()const{return make_reverse_iterator(begin());}
+ const_iterator cbegin()const{return begin();}
+ const_iterator cend()const{return end();}
+ const_reverse_iterator crbegin()const{return rbegin();}
+ const_reverse_iterator crend()const{return rend();}
+
+ iterator iterator_to(const value_type& x)
+ {
+ return make_iterator(node_from_value<node_type>(&x));
+ }
+
+ const_iterator iterator_to(const value_type& x)const
+ {
+ return make_iterator(node_from_value<node_type>(&x));
+ }
 
   /* capacity */
 
@@ -216,8 +235,15 @@
     BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
     if(n>size())insert(end(),n-size(),x);
     else if(n<size()){
- iterator it=begin();
- std::advance(it,n);
+ iterator it;
+ if(n<=size()/2){
+ it=begin();
+ std::advance(it,n);
+ }
+ else{
+ it=end();
+ for(size_type m=size()-n;m--;--it){}
+ }
       erase(it,end());
     }
   }
@@ -261,8 +287,7 @@
   template<typename InputIterator>
   void insert(iterator position,InputIterator first,InputIterator last)
   {
- BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
- for(;first!=last;++first)insert(position,*first);
+ insert_iter(position,first,last,mpl::not_<is_integral<InputIterator> >());
   }
 
   iterator erase(iterator position)
@@ -320,6 +345,27 @@
       mod,static_cast<final_node_type*>(position.get_node()));
   }
 
+ template<typename Modifier,typename Rollback>
+ bool modify(iterator position,Modifier mod,Rollback back)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ /* MSVC++ 6.0 optimizer on safe mode code chokes if this
+ * this is not added. Left it for all compilers as it does no
+ * harm.
+ */
+
+ position.detach();
+#endif
+
+ return this->final_modify_(
+ mod,back,static_cast<final_node_type*>(position.get_node()));
+ }
+
   void swap(sequenced_index<SuperMeta,TagList>& x)
   {
     BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
@@ -451,7 +497,7 @@
   void reverse()
   {
     BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
- sequenced_index_node_impl::reverse(header()->impl());
+ node_impl_type::reverse(header()->impl());
   }
 
   /* rearrange operations */
@@ -627,6 +673,11 @@
     BOOST_CATCH_END
   }
 
+ bool modify_rollback_(node_type* x)
+ {
+ return super::modify_rollback_(x);
+ }
+
 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
   /* serialization */
 
@@ -688,22 +739,22 @@
 
   void link(node_type* x)
   {
- sequenced_index_node_impl::link(x->impl(),header()->impl());
+ node_impl_type::link(x->impl(),header()->impl());
   };
 
   static void unlink(node_type* x)
   {
- sequenced_index_node_impl::unlink(x->impl());
+ node_impl_type::unlink(x->impl());
   }
 
   static void relink(node_type* position,node_type* x)
   {
- sequenced_index_node_impl::relink(position->impl(),x->impl());
+ node_impl_type::relink(position->impl(),x->impl());
   }
 
   static void relink(node_type* position,node_type* first,node_type* last)
   {
- sequenced_index_node_impl::relink(
+ node_impl_type::relink(
       position->impl(),first->impl(),last->impl());
   }
 
@@ -724,6 +775,38 @@
   }
 #endif
 
+ template <class InputIterator>
+ void assign_iter(InputIterator first,InputIterator last,mpl::true_)
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ clear();
+ for(;first!=last;++first)push_back(*first);
+ }
+
+ void assign_iter(size_type n,value_param_type value,mpl::false_)
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ clear();
+ for(size_type i=0;i<n;++i)push_back(value);
+ }
+
+ template<typename InputIterator>
+ void insert_iter(
+ iterator position,InputIterator first,InputIterator last,mpl::true_)
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ for(;first!=last;++first)insert(position,*first);
+ }
+
+ void insert_iter(
+ iterator position,size_type n,value_param_type x,mpl::false_)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ for(size_type i=0;i<n;++i)insert(position,x);
+ }
+
 #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
     BOOST_WORKAROUND(__MWERKS__,<=0x3003)
 #pragma parse_mfunc_templ reset

Modified: branches/bcbboost/boost/multi_index_container.hpp
==============================================================================
--- branches/bcbboost/boost/multi_index_container.hpp (original)
+++ branches/bcbboost/boost/multi_index_container.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -31,7 +31,6 @@
 #include <boost/multi_index/detail/access_specifier.hpp>
 #include <boost/multi_index/detail/base_type.hpp>
 #include <boost/multi_index/detail/converter.hpp>
-#include <boost/multi_index/detail/def_ctor_tuple_cons.hpp>
 #include <boost/multi_index/detail/header_holder.hpp>
 #include <boost/multi_index/detail/has_tag.hpp>
 #include <boost/multi_index/detail/no_duplicate_tags.hpp>
@@ -72,8 +71,14 @@
         Value,IndexSpecifierList,Allocator>::type
>::type>,
   BOOST_MULTI_INDEX_PRIVATE_IF_MEMBER_TEMPLATE_FRIENDS detail::header_holder<
- typename detail::multi_index_node_type<
- Value,IndexSpecifierList,Allocator>::type,
+ typename detail::prevent_eti<
+ Allocator,
+ typename boost::detail::allocator::rebind_to<
+ Allocator,
+ typename detail::multi_index_node_type<
+ Value,IndexSpecifierList,Allocator>::type
+ >::type
+ >::type::pointer,
     multi_index_container<Value,IndexSpecifierList,Allocator> >,
   public detail::multi_index_base_type<
     Value,IndexSpecifierList,Allocator>::type
@@ -97,13 +102,18 @@
 
   typedef typename detail::multi_index_base_type<
       Value,IndexSpecifierList,Allocator>::type super;
- typedef ::boost::base_from_member<
- typename boost::detail::allocator::rebind_to<
+ typedef typename
+ boost::detail::allocator::rebind_to<
       Allocator,
       typename super::node_type
- >::type> bfm_allocator;
+ >::type node_allocator;
+ typedef ::boost::base_from_member<
+ node_allocator> bfm_allocator;
   typedef detail::header_holder<
- typename super::node_type,
+ typename detail::prevent_eti<
+ Allocator,
+ node_allocator
+ >::type::pointer,
     multi_index_container> bfm_header;
 
 #if BOOST_WORKAROUND(BOOST_MSVC,<1300)
@@ -116,15 +126,8 @@
    * brought forward here to save us some typename's.
    */
 
-#if defined(BOOST_MSVC)
- typedef
- detail::default_constructible_tuple_cons<
- typename super::ctor_args_list> ctor_args_list;
-#else
- typedef typename super::ctor_args_list ctor_args_list;
-#endif
-
- typedef IndexSpecifierList index_specifier_type_list;
+ typedef typename super::ctor_args_list ctor_args_list;
+ typedef IndexSpecifierList index_specifier_type_list;
  
 #if BOOST_WORKAROUND(BOOST_MSVC,<1300)
   /* MSVC++ 6.0 chokes on moderately long index lists (around 6 indices
@@ -430,17 +433,18 @@
 
   node_type* header()const
   {
- return bfm_header::member;
+ return &*bfm_header::member;
   }
 
   node_type* allocate_node()
   {
- return bfm_allocator::member.allocate(1);
+ return &*bfm_allocator::member.allocate(1);
   }
 
   void deallocate_node(node_type* x)
   {
- bfm_allocator::member.deallocate(x,1);
+ typedef typename node_allocator::pointer node_pointer;
+ bfm_allocator::member.deallocate(static_cast<node_pointer>(x),1);
   }
 
   bool empty_()const
@@ -527,6 +531,16 @@
 
   void swap_(multi_index_container<Value,IndexSpecifierList,Allocator>& x)
   {
+ if(bfm_allocator::member!=x.bfm_allocator::member){
+
+#if defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
+ std::swap(bfm_allocator::member,x.bfm_allocator::member);
+#else
+ using std::swap;
+ swap(bfm_allocator::member,x.bfm_allocator::member);
+#endif
+
+ }
     std::swap(bfm_header::member,x.bfm_header::member);
     super::swap_(x);
     std::swap(node_count,x.node_count);
@@ -538,7 +552,7 @@
   }
 
   template<typename Modifier>
- bool modify_(Modifier mod,node_type* x)
+ bool modify_(Modifier& mod,node_type* x)
   {
     mod(const_cast<value_type&>(x->value()));
 
@@ -558,6 +572,42 @@
     BOOST_CATCH_END
   }
 
+ template<typename Modifier,typename Rollback>
+ bool modify_(Modifier& mod,Rollback& back,node_type* x)
+ {
+ mod(const_cast<value_type&>(x->value()));
+
+ bool b;
+ BOOST_TRY{
+ b=super::modify_rollback_(x);
+ }
+ BOOST_CATCH(...){
+ BOOST_TRY{
+ back(const_cast<value_type&>(x->value()));
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH(...){
+ this->erase_(x);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+ BOOST_CATCH_END
+
+ BOOST_TRY{
+ if(!b){
+ back(const_cast<value_type&>(x->value()));
+ return false;
+ }
+ else return true;
+ }
+ BOOST_CATCH(...){
+ this->erase_(x);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
 #if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
   /* serialization */
 

Modified: branches/bcbboost/boost/range/as_literal.hpp
==============================================================================
--- branches/bcbboost/boost/range/as_literal.hpp (original)
+++ branches/bcbboost/boost/range/as_literal.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -21,9 +21,6 @@
 
 #include <boost/range/iterator_range.hpp>
 #include <boost/range/detail/str_types.hpp>
-
-#include <boost/detail/workaround.hpp>
-
 #include <cstring>
 #include <cwchar>
 
@@ -107,23 +104,15 @@
     template< class Char, std::size_t sz >
     inline iterator_range<Char*> as_literal( Char (&arr)[sz] )
     {
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x590)) && __BORLANDC__ >= 0x590
- return boost::make_iterator_range<Char*>( arr, arr + sz - 1 );
-#else
         return boost::make_iterator_range( arr, arr + sz - 1 );
-#endif
     }
 
     
     template< class Char, std::size_t sz >
- inline iterator_range<const Char*> as_literal( const Char (&arr)[sz] )
+ inline iterator_range<const Char*> as_literal( const Char (&arr)[sz] )
     {
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x590)) && __BORLANDC__ >= 0x590
- return boost::make_iterator_range<const Char*>( arr, arr + sz - 1 );
-#else
- return boost::make_iterator_range( arr, arr + sz - 1 );
-#endif
- }
+ return boost::make_iterator_range( arr, arr + sz - 1 );
+ }
 }
 
 #endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING

Modified: branches/bcbboost/boost/strong_typedef.hpp
==============================================================================
--- branches/bcbboost/boost/strong_typedef.hpp (original)
+++ branches/bcbboost/boost/strong_typedef.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -25,7 +25,7 @@
 #include <boost/config.hpp>
 #include <boost/operators.hpp>
 
-#if !defined(__BORLANDC__) || __BORLANDC__ >= 0x590
+#if !defined(__BORLANDC__)
     #define BOOST_STRONG_TYPEDEF(T, D) \
     struct D \
         : boost::totally_ordered1< D \

Modified: branches/bcbboost/boost/thread/locks.hpp
==============================================================================
--- branches/bcbboost/boost/thread/locks.hpp (original)
+++ branches/bcbboost/boost/thread/locks.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -24,13 +24,13 @@
     const adopt_lock_t adopt_lock={};
 
     template<typename Mutex>
- class shareable_lock;
+ class shared_lock;
 
     template<typename Mutex>
     class exclusive_lock;
 
     template<typename Mutex>
- class upgradeable_lock;
+ class upgrade_lock;
 
     template<typename Mutex>
     class lock_guard
@@ -86,21 +86,21 @@
         {
             timed_lock(target_time);
         }
- unique_lock(boost::move_t<unique_lock> other):
+ unique_lock(boost::move_t<unique_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
         }
- unique_lock(boost::move_t<upgradeable_lock<Mutex> > other);
+ unique_lock(boost::move_t<upgrade_lock<Mutex> > other);
 
- unique_lock& operator=(boost::move_t<unique_lock> other)
+ unique_lock& operator=(boost::move_t<unique_lock<Mutex> > other)
         {
             unique_lock temp(other);
             swap(temp);
             return *this;
         }
 
- unique_lock& operator=(boost::move_t<upgradeable_lock<Mutex> > other)
+ unique_lock& operator=(boost::move_t<upgrade_lock<Mutex> > other)
         {
             unique_lock temp(other);
             swap(temp);
@@ -112,7 +112,7 @@
             std::swap(m,other.m);
             std::swap(is_locked,other.is_locked);
         }
- void swap(boost::move_t<unique_lock> other)
+ void swap(boost::move_t<unique_lock<Mutex> > other)
         {
             std::swap(m,other->m);
             std::swap(is_locked,other->is_locked);
@@ -170,6 +170,10 @@
         {
             return is_locked?&unique_lock::lock:0;
         }
+ bool operator!() const
+ {
+ return !owns_lock();
+ }
         bool owns_lock() const
         {
             return is_locked;
@@ -188,91 +192,100 @@
             return res;
         }
 
- friend class shareable_lock<Mutex>;
- friend class upgradeable_lock<Mutex>;
+ friend class shared_lock<Mutex>;
+ friend class upgrade_lock<Mutex>;
     };
 
     template<typename Mutex>
- class shareable_lock
+ class shared_lock
     {
     protected:
         Mutex* m;
         bool is_locked;
     private:
- explicit shareable_lock(shareable_lock&);
- shareable_lock& operator=(shareable_lock&);
+ explicit shared_lock(shared_lock&);
+ shared_lock& operator=(shared_lock&);
     public:
- explicit shareable_lock(Mutex& m_):
+ explicit shared_lock(Mutex& m_):
             m(&m_),is_locked(false)
         {
             lock();
         }
- shareable_lock(Mutex& m_,bool do_lock):
+ shared_lock(Mutex& m_,adopt_lock_t):
+ m(&m_),is_locked(true)
+ {}
+ shared_lock(Mutex& m_,defer_lock_t):
+ m(&m_),is_locked(false)
+ {}
+ shared_lock(Mutex& m_,try_to_lock_t):
             m(&m_),is_locked(false)
         {
- if(do_lock)
- {
- lock();
- }
+ try_lock();
+ }
+ shared_lock(Mutex& m_,system_time const& target_time):
+ m(&m_),is_locked(false)
+ {
+ timed_lock(target_time);
         }
- shareable_lock(boost::move_t<shareable_lock> other):
+
+ shared_lock(boost::move_t<shared_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
         }
 
- shareable_lock(boost::move_t<unique_lock<Mutex> > other):
+ shared_lock(boost::move_t<unique_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
             if(is_locked)
             {
- m->unlock_and_lock_shareable();
+ m->unlock_and_lock_shared();
             }
         }
 
- shareable_lock(boost::move_t<upgradeable_lock<Mutex> > other):
+ shared_lock(boost::move_t<upgrade_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
             if(is_locked)
             {
- m->unlock_upgradeable_and_lock_shareable();
+ m->unlock_upgrade_and_lock_shared();
             }
         }
 
- shareable_lock& operator=(boost::move_t<shareable_lock> other)
+ shared_lock& operator=(boost::move_t<shared_lock<Mutex> > other)
         {
- shareable_lock temp(other);
+ shared_lock temp(other);
             swap(temp);
             return *this;
         }
 
- shareable_lock& operator=(boost::move_t<unique_lock<Mutex> > other)
+ shared_lock& operator=(boost::move_t<unique_lock<Mutex> > other)
         {
- shareable_lock temp(other);
+ shared_lock temp(other);
             swap(temp);
             return *this;
         }
 
- shareable_lock& operator=(boost::move_t<upgradeable_lock<Mutex> > other)
+ shared_lock& operator=(boost::move_t<upgrade_lock<Mutex> > other)
         {
- shareable_lock temp(other);
+ shared_lock temp(other);
             swap(temp);
             return *this;
         }
 
- void swap(shareable_lock& other)
+ void swap(shared_lock& other)
         {
             std::swap(m,other.m);
             std::swap(is_locked,other.is_locked);
         }
         
- ~shareable_lock()
+ ~shared_lock()
         {
             if(owns_lock())
             {
- m->unlock_shareable();
+ m->unlock_shared();
             }
         }
         void lock()
@@ -281,7 +294,7 @@
             {
                 throw boost::lock_error();
             }
- m->lock_shareable();
+ m->lock_shared();
             is_locked=true;
         }
         bool try_lock()
@@ -290,7 +303,16 @@
             {
                 throw boost::lock_error();
             }
- is_locked=m->try_lock_shareable();
+ is_locked=m->try_lock_shared();
+ return is_locked;
+ }
+ bool timed_lock(boost::system_time const& target_time)
+ {
+ if(owns_lock())
+ {
+ throw boost::lock_error();
+ }
+ is_locked=m->timed_lock_shared(target_time);
             return is_locked;
         }
         void unlock()
@@ -299,14 +321,18 @@
             {
                 throw boost::lock_error();
             }
- m->unlock_shareable();
+ m->unlock_shared();
             is_locked=false;
         }
             
- typedef void (shareable_lock::*bool_type)();
+ typedef void (shared_lock::*bool_type)();
         operator bool_type() const
         {
- return is_locked?&shareable_lock::lock:0;
+ return is_locked?&shared_lock::lock:0;
+ }
+ bool operator!() const
+ {
+ return !owns_lock();
         }
         bool owns_lock() const
         {
@@ -316,21 +342,21 @@
     };
 
     template<typename Mutex>
- class upgradeable_lock
+ class upgrade_lock
     {
     protected:
         Mutex* m;
         bool is_locked;
     private:
- explicit upgradeable_lock(upgradeable_lock&);
- upgradeable_lock& operator=(upgradeable_lock&);
+ explicit upgrade_lock(upgrade_lock&);
+ upgrade_lock& operator=(upgrade_lock&);
     public:
- explicit upgradeable_lock(Mutex& m_):
+ explicit upgrade_lock(Mutex& m_):
             m(&m_),is_locked(false)
         {
             lock();
         }
- upgradeable_lock(Mutex& m_,bool do_lock):
+ upgrade_lock(Mutex& m_,bool do_lock):
             m(&m_),is_locked(false)
         {
             if(do_lock)
@@ -338,47 +364,47 @@
                 lock();
             }
         }
- upgradeable_lock(boost::move_t<upgradeable_lock> other):
+ upgrade_lock(boost::move_t<upgrade_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
         }
 
- upgradeable_lock(boost::move_t<unique_lock<Mutex> > other):
+ upgrade_lock(boost::move_t<unique_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
             if(is_locked)
             {
- m->unlock_and_lock_upgradeable();
+ m->unlock_and_lock_upgrade();
             }
         }
 
- upgradeable_lock& operator=(boost::move_t<upgradeable_lock> other)
+ upgrade_lock& operator=(boost::move_t<upgrade_lock<Mutex> > other)
         {
- upgradeable_lock temp(other);
+ upgrade_lock temp(other);
             swap(temp);
             return *this;
         }
 
- upgradeable_lock& operator=(boost::move_t<unique_lock<Mutex> > other)
+ upgrade_lock& operator=(boost::move_t<unique_lock<Mutex> > other)
         {
- upgradeable_lock temp(other);
+ upgrade_lock temp(other);
             swap(temp);
             return *this;
         }
 
- void swap(upgradeable_lock& other)
+ void swap(upgrade_lock& other)
         {
             std::swap(m,other.m);
             std::swap(is_locked,other.is_locked);
         }
         
- ~upgradeable_lock()
+ ~upgrade_lock()
         {
             if(owns_lock())
             {
- m->unlock_upgradeable();
+ m->unlock_upgrade();
             }
         }
         void lock()
@@ -387,7 +413,7 @@
             {
                 throw boost::lock_error();
             }
- m->lock_upgradeable();
+ m->lock_upgrade();
             is_locked=true;
         }
         bool try_lock()
@@ -396,7 +422,7 @@
             {
                 throw boost::lock_error();
             }
- is_locked=m->try_lock_upgradeable();
+ is_locked=m->try_lock_upgrade();
             return is_locked;
         }
         void unlock()
@@ -405,31 +431,35 @@
             {
                 throw boost::lock_error();
             }
- m->unlock_upgradeable();
+ m->unlock_upgrade();
             is_locked=false;
         }
             
- typedef void (upgradeable_lock::*bool_type)();
+ typedef void (upgrade_lock::*bool_type)();
         operator bool_type() const
         {
- return is_locked?&upgradeable_lock::lock:0;
+ return is_locked?&upgrade_lock::lock:0;
+ }
+ bool operator!() const
+ {
+ return !owns_lock();
         }
         bool owns_lock() const
         {
             return is_locked;
         }
- friend class shareable_lock<Mutex>;
+ friend class shared_lock<Mutex>;
         friend class unique_lock<Mutex>;
     };
 
     template<typename Mutex>
- unique_lock<Mutex>::unique_lock(boost::move_t<upgradeable_lock<Mutex> > other):
+ unique_lock<Mutex>::unique_lock(boost::move_t<upgrade_lock<Mutex> > other):
         m(other->m),is_locked(other->is_locked)
     {
         other->is_locked=false;
         if(is_locked)
         {
- m->unlock_upgradeable_and_lock();
+ m->unlock_upgrade_and_lock();
         }
     }
 
@@ -437,13 +467,13 @@
     class upgrade_to_unique_lock
     {
     private:
- upgradeable_lock<Mutex>* source;
+ upgrade_lock<Mutex>* source;
         unique_lock<Mutex> exclusive;
 
         explicit upgrade_to_unique_lock(upgrade_to_unique_lock&);
         upgrade_to_unique_lock& operator=(upgrade_to_unique_lock&);
     public:
- explicit upgrade_to_unique_lock(upgradeable_lock<Mutex>& m_):
+ explicit upgrade_to_unique_lock(upgrade_lock<Mutex>& m_):
             source(&m_),exclusive(boost::move(*source))
         {}
         ~upgrade_to_unique_lock()
@@ -454,13 +484,13 @@
             }
         }
 
- upgrade_to_unique_lock(boost::move_t<upgrade_to_unique_lock> other):
+ upgrade_to_unique_lock(boost::move_t<upgrade_to_unique_lock<Mutex> > other):
             source(other->source),exclusive(boost::move(other->exclusive))
         {
             other->source=0;
         }
         
- upgrade_to_unique_lock& operator=(boost::move_t<upgrade_to_unique_lock> other)
+ upgrade_to_unique_lock& operator=(boost::move_t<upgrade_to_unique_lock<Mutex> > other)
         {
             upgrade_to_unique_lock temp(other);
             swap(temp);
@@ -476,6 +506,10 @@
         {
             return exclusive.owns_lock()?&upgrade_to_unique_lock::swap:0;
         }
+ bool operator!() const
+ {
+ return !owns_lock();
+ }
         bool owns_lock() const
         {
             return exclusive.owns_lock();

Modified: branches/bcbboost/boost/thread/pthread/mutex.hpp
==============================================================================
--- branches/bcbboost/boost/thread/pthread/mutex.hpp (original)
+++ branches/bcbboost/boost/thread/pthread/mutex.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -72,7 +72,7 @@
     {
     private:
         pthread_mutex_t m;
-#ifdef BOOST_PTHREAD_HAS_TIMEDLOCK
+#ifndef BOOST_PTHREAD_HAS_TIMEDLOCK
         pthread_cond_t cond;
         bool is_locked;
 
@@ -103,7 +103,7 @@
             {
                 throw thread_resource_error();
             }
-#ifdef BOOST_PTHREAD_HAS_TIMEDLOCK
+#ifndef BOOST_PTHREAD_HAS_TIMEDLOCK
             int const res2=pthread_cond_init(&cond,NULL);
             if(res2)
             {
@@ -118,7 +118,7 @@
         {
             int const res=pthread_mutex_destroy(&m);
             BOOST_ASSERT(!res);
-#ifdef BOOST_PTHREAD_HAS_TIMEDLOCK
+#ifndef BOOST_PTHREAD_HAS_TIMEDLOCK
             int const res2=pthread_cond_destroy(&cond);
             BOOST_ASSERT(!res2);
 #endif
@@ -193,8 +193,8 @@
             pthread_mutex_scoped_lock const _(&m);
             while(is_locked)
             {
- int const cond_res=pthread_cond_timewait(&cond,&m,&timeout);
- if(cond_res==ETIMEOUT)
+ int const cond_res=pthread_cond_timedwait(&cond,&m,&timeout);
+ if(cond_res==ETIMEDOUT)
                 {
                     return false;
                 }

Modified: branches/bcbboost/boost/thread/pthread/recursive_mutex.hpp
==============================================================================
--- branches/bcbboost/boost/thread/pthread/recursive_mutex.hpp (original)
+++ branches/bcbboost/boost/thread/pthread/recursive_mutex.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -133,6 +133,8 @@
             int const res=pthread_mutex_init(&m,&attr);
             if(res)
             {
+ int const destroy_attr_res=pthread_mutexattr_destroy(&attr);
+ BOOST_ASSERT(!destroy_attr_res);
                 throw thread_resource_error();
             }
             int const destroy_attr_res=pthread_mutexattr_destroy(&attr);
@@ -247,12 +249,12 @@
             if(is_locked && owner==pthread_self())
             {
                 ++count;
- return;
+ return true;
             }
             while(is_locked)
             {
- int const cond_res=pthread_cond_timewait(&cond,&m,&timeout);
- if(cond_res==ETIMEOUT)
+ int const cond_res=pthread_cond_timedwait(&cond,&m,&timeout);
+ if(cond_res==ETIMEDOUT)
                 {
                     return false;
                 }

Modified: branches/bcbboost/boost/thread/thread_time.hpp
==============================================================================
--- branches/bcbboost/boost/thread/thread_time.hpp (original)
+++ branches/bcbboost/boost/thread/thread_time.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -30,7 +30,7 @@
             {
                 return 0;
             }
- return (target_time-now).total_milliseconds();
+ return (target_time-now).total_milliseconds()+1;
         }
 
     }

Modified: branches/bcbboost/boost/thread/win32/thread_primitives.hpp
==============================================================================
--- branches/bcbboost/boost/thread/win32/thread_primitives.hpp (original)
+++ branches/bcbboost/boost/thread/win32/thread_primitives.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -112,7 +112,7 @@
             
             inline handle create_anonymous_event(event_type type,initial_event_state state)
             {
- handle const res=CreateEventA(0,type,state,0);
+ handle const res=win32::CreateEventA(0,type,state,0);
                 if(!res)
                 {
                     throw thread_resource_error();
@@ -177,6 +177,7 @@
                 {
                     cleanup();
                     handle_to_manage=new_handle;
+ return *this;
                 }
 
                 operator handle() const

Modified: branches/bcbboost/boost/thread/xtime.hpp
==============================================================================
--- branches/bcbboost/boost/thread/xtime.hpp (original)
+++ branches/bcbboost/boost/thread/xtime.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -10,6 +10,8 @@
 #include <boost/thread/detail/config.hpp>
 
 #include <boost/cstdint.hpp>
+#include <boost/thread/thread_time.hpp>
+#include <boost/date_time/posix_time/conversion.hpp>
 
 namespace boost {
 
@@ -49,6 +51,16 @@
         return (xt1.sec > xt2.sec) ? 1 : -1;
 }
 
+inline xtime get_xtime(boost::system_time const& abs_time)
+{
+ xtime res={0};
+ boost::posix_time::time_duration const time_since_epoch=abs_time-boost::posix_time::from_time_t(0);
+
+ res.sec=time_since_epoch.total_seconds();
+ res.nsec=time_since_epoch.fractional_seconds()*(1000000000/time_since_epoch.ticks_per_second());
+ return res;
+}
+
 } // namespace boost
 
 #endif //BOOST_XTIME_WEK070601_HPP

Modified: branches/bcbboost/boost/type_traits/is_member_pointer.hpp
==============================================================================
--- branches/bcbboost/boost/type_traits/is_member_pointer.hpp (original)
+++ branches/bcbboost/boost/type_traits/is_member_pointer.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -47,9 +47,12 @@
 #elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
 BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,::boost::is_member_function_pointer<T>::value)
 BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*,true)
+
+#if !BOOST_WORKAROUND(__MWERKS__,<=0x3003)
 BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*const,true)
 BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*volatile,true)
 BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*const volatile,true)
+#endif
 
 #else // no partial template specialization
 

Modified: branches/bcbboost/boost/utility/typed_in_place_factory.hpp
==============================================================================
--- branches/bcbboost/boost/utility/typed_in_place_factory.hpp (original)
+++ branches/bcbboost/boost/utility/typed_in_place_factory.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -54,8 +54,8 @@
 
   void* apply (void* address, std::size_t n) const
   {
- for(char* next = address = this->apply(address); !! --n;)
- this->apply(next = next+sizeof(T));
+ for(void* next = address = this->apply(address); !! --n;)
+ this->apply(next = static_cast<char *>(next) + sizeof(T));
     return address;
   }
 

Modified: branches/bcbboost/boost/xpressive/detail/core/linker.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/detail/core/linker.hpp (original)
+++ branches/bcbboost/boost/xpressive/detail/core/linker.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -278,7 +278,7 @@
 #if BOOST_VERSION >= 103500
         fusion::for_each(alternates.derived(), alt_link_pred(this, peeker, next));
 #else
- fusion::for_each(alternates.base(), alt_link_pred(this, peeker, next));
+ fusion::for_each(alternates.cast(), alt_link_pred(this, peeker, next));
 #endif
     }
 

Modified: branches/bcbboost/boost/xpressive/detail/core/matcher/action_matcher.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/detail/core/matcher/action_matcher.hpp (original)
+++ branches/bcbboost/boost/xpressive/detail/core/matcher/action_matcher.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -238,7 +238,7 @@
 
         template<typename Expr, typename State, typename Visitor>
         static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ call(Expr const &, State const &state, Visitor &visitor)
         {
             sub_match<typename State::iterator> const &sub = state.sub_matches_[ visitor ];
             return proto::as_expr(sub);

Modified: branches/bcbboost/boost/xpressive/detail/core/matcher/predicate_matcher.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/detail/core/matcher/predicate_matcher.hpp (original)
+++ branches/bcbboost/boost/xpressive/detail/core/matcher/predicate_matcher.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -29,9 +29,9 @@
     template<typename BidiIter>
     struct predicate_context
     {
- explicit predicate_context(int sub, match_results<BidiIter> const &what)
+ explicit predicate_context(int sub, sub_match_impl<BidiIter> const *sub_matches)
           : sub_(sub)
- , what_(what)
+ , sub_matches_(sub_matches)
         {}
 
         // eval_terminal
@@ -54,9 +54,9 @@
         struct eval_terminal<Expr, any_matcher>
         {
             typedef sub_match<BidiIter> const &result_type;
- result_type operator()(Expr &expr, predicate_context const &ctx) const
+ result_type operator()(Expr &, predicate_context const &ctx) const
             {
- return ctx.what_[ctx.sub_];
+ return ctx.sub_matches_[ctx.sub_];
             }
         };
 
@@ -66,7 +66,7 @@
             typedef sub_match<BidiIter> const &result_type;
             result_type operator()(Expr &expr, predicate_context const &ctx) const
             {
- return ctx.what_[expr];
+ return ctx.sub_matches_[proto::arg(expr).mark_number_];
             }
         };
 
@@ -89,10 +89,20 @@
         #endif
 
         int sub_;
- match_results<BidiIter> const &what_;
+ sub_match_impl<BidiIter> const *sub_matches_;
     };
 
     ///////////////////////////////////////////////////////////////////////////////
+ // AssertionFunctor
+ //
+ struct AssertionFunctor
+ : proto::function<
+ proto::terminal<check_tag>
+ , proto::terminal<proto::_>
+ >
+ {};
+
+ ///////////////////////////////////////////////////////////////////////////////
     // predicate_matcher
     //
     template<typename Predicate>
@@ -111,23 +121,24 @@
         template<typename BidiIter, typename Next>
         bool match(match_state<BidiIter> &state, Next const &next) const
         {
- typedef typename Predicate::proto_arg0::predicate_type predicate_type;
- return this->match_(state, next, proto::is_expr<predicate_type>());
+ // Predicate is check(assertion), where assertion can be
+ // a lambda or a function object.
+ return this->match_(state, next, proto::matches<Predicate, AssertionFunctor>());
         }
 
     private:
         template<typename BidiIter, typename Next>
- bool match_(match_state<BidiIter> &state, Next const &next, mpl::false_) const
+ bool match_(match_state<BidiIter> &state, Next const &next, mpl::true_) const
         {
             sub_match<BidiIter> const &sub = state.sub_match(this->sub_);
- return proto::arg(this->predicate_).pred(sub) && next.match(state);
+ return proto::arg(proto::arg_c<1>(this->predicate_))(sub) && next.match(state);
         }
 
         template<typename BidiIter, typename Next>
- bool match_(match_state<BidiIter> &state, Next const &next, mpl::true_) const
+ bool match_(match_state<BidiIter> &state, Next const &next, mpl::false_) const
         {
- predicate_context<BidiIter> ctx(this->sub_, *state.context_.results_ptr_);
- return proto::eval(proto::arg(this->predicate_).pred, ctx) && next.match(state);
+ predicate_context<BidiIter> ctx(this->sub_, state.sub_matches_);
+ return proto::eval(proto::arg_c<1>(this->predicate_), ctx) && next.match(state);
         }
     };
 

Modified: branches/bcbboost/boost/xpressive/detail/detail_fwd.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/detail/detail_fwd.hpp (original)
+++ branches/bcbboost/boost/xpressive/detail/detail_fwd.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -32,6 +32,8 @@
 
     struct modifier_tag;
 
+ struct check_tag;
+
     typedef mpl::size_t<INT_MAX / 2 - 1> unknown_width;
 
     struct type_info_less;
@@ -59,9 +61,6 @@
 
     struct self_placeholder;
 
- template<typename Predicate>
- struct predicate_placeholder;
-
     template<typename Nbr>
     struct attribute_placeholder;
 
@@ -236,6 +235,12 @@
     template<typename Locale, typename BidiIter>
     struct regex_traits_type;
 
+ template<typename Expr>
+ struct let_;
+
+ template<typename Args, typename BidiIter>
+ void bind_args(let_<Args> const &, match_results<BidiIter> &);
+
     ///////////////////////////////////////////////////////////////////////////////
     // Misc.
     struct no_next;

Modified: branches/bcbboost/boost/xpressive/detail/static/placeholders.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/detail/static/placeholders.hpp (original)
+++ branches/bcbboost/boost/xpressive/detail/static/placeholders.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -11,6 +11,9 @@
 // MS compatible compilers support #pragma once
 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
 # pragma once
+# pragma warning(push)
+# pragma warning(disable:4510) // default constructor could not be generated
+# pragma warning(disable:4610) // can never be instantiated - user defined constructor required
 #endif
 
 #include <string>
@@ -29,8 +32,6 @@
     BOOST_XPR_QUANT_STYLE(quant_variable_width, unknown_width::value, true)
 
     int mark_number_;
-
- //operator int() const { return this->mark_number_; }
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -99,18 +100,6 @@
 };
 
 ///////////////////////////////////////////////////////////////////////////////
-// predicate_placeholder
-//
-template<typename Predicate>
-struct predicate_placeholder
-{
- BOOST_XPR_QUANT_STYLE(quant_variable_width, unknown_width::value, false)
-
- typedef Predicate predicate_type;
- Predicate pred;
-};
-
-///////////////////////////////////////////////////////////////////////////////
 // attribute_placeholder
 //
 template<typename Nbr>
@@ -123,4 +112,8 @@
 
 }}} // namespace boost::xpressive::detail
 
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(pop)
+#endif
+
 #endif

Modified: branches/bcbboost/boost/xpressive/detail/static/transforms/as_action.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/detail/static/transforms/as_action.hpp (original)
+++ branches/bcbboost/boost/xpressive/detail/static/transforms/as_action.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -237,6 +237,15 @@
     {};
 
     ///////////////////////////////////////////////////////////////////////////////
+ // CheckAssertion
+ struct CheckAssertion
+ : proto::function<
+ proto::terminal<check_tag>
+ , proto::_
+ >
+ {};
+
+ ///////////////////////////////////////////////////////////////////////////////
     // action_transform
     // Turn A[B] into (mark_begin(n) >> A >> mark_end(n) >> action_matcher<B>(n))
     // If A and B use attributes, wrap the above expression in
@@ -261,7 +270,7 @@
 
             typedef
                 typename mpl::if_<
- proto::matches<action_type, proto::terminal<predicate_placeholder<proto::_> > >
+ proto::matches<action_type, CheckAssertion>
                   , predicate_matcher<action_copy_type>
                   , action_matcher<action_copy_type>
>::type

Modified: branches/bcbboost/boost/xpressive/detail/static/transforms/as_independent.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/detail/static/transforms/as_independent.hpp (original)
+++ branches/bcbboost/boost/xpressive/detail/static/transforms/as_independent.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -63,7 +63,7 @@
 
         template<typename Expr, typename State, typename Visitor>
         static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ call(Expr const &expr, State const &, Visitor &visitor)
         {
             typename Grammar::template apply<Expr, true_xpression, Visitor>::type const &
                 expr2 = Grammar::call(expr, true_xpression(), visitor);
@@ -88,7 +88,7 @@
 
         template<typename Expr, typename State, typename Visitor>
         static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ call(Expr const &expr, State const &, Visitor &visitor)
         {
             return typename apply<Expr, State, Visitor>::type(
                 Grammar::call(expr, true_xpression(), visitor)

Modified: branches/bcbboost/boost/xpressive/detail/static/transforms/as_set.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/detail/static/transforms/as_set.hpp (original)
+++ branches/bcbboost/boost/xpressive/detail/static/transforms/as_set.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -261,7 +261,7 @@
 
         template<typename Expr, typename State, typename Visitor>
         static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ call(Expr const &expr, State const &, Visitor &visitor)
         {
             typedef typename apply<Expr, State, Visitor>::type set_type;
             set_type matcher;

Modified: branches/bcbboost/boost/xpressive/detail/utility/algorithm.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/detail/utility/algorithm.hpp (original)
+++ branches/bcbboost/boost/xpressive/detail/utility/algorithm.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -16,6 +16,7 @@
 #include <string>
 #include <climits>
 #include <algorithm>
+#include <boost/version.hpp>
 #include <boost/range/end.hpp>
 #include <boost/range/begin.hpp>
 #include <boost/range/size.hpp>
@@ -119,10 +120,12 @@
 {};
 
 template<typename T> std::ptrdiff_t is_null_terminated(T const &) { return 0; }
+#if BOOST_VERSION >= 103500
 inline std::ptrdiff_t is_null_terminated(char const *) { return 1; }
 #ifndef BOOST_XPRESSIVE_NO_WREGEX
 inline std::ptrdiff_t is_null_terminated(wchar_t const *) { return 1; }
 #endif
+#endif
 
 ///////////////////////////////////////////////////////////////////////////////
 // data_begin/data_end

Modified: branches/bcbboost/boost/xpressive/detail/utility/symbols.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/detail/utility/symbols.hpp (original)
+++ branches/bcbboost/boost/xpressive/detail/utility/symbols.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -6,9 +6,12 @@
 /// G. Badr and B.J. Oommen. (2005) Self-Adjusting of Ternary Search Tries Using
 /// Conditional Rotations and Randomized Heuristics
 //
-// Copyright 2007 David Jenkins. Distributed under 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)
+// Copyright 2007 David Jenkins.
+// Copyright 2007 Eric Niebler.
+//
+// Distributed under 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_XPRESSIVE_DETAIL_SYMBOLS_HPP_DRJ_06_11_2007
 #define BOOST_XPRESSIVE_DETAIL_SYMBOLS_HPP_DRJ_06_11_2007
@@ -18,7 +21,7 @@
 # pragma once
 #endif
 
-#include <boost/range/iterator.hpp>
+#include <boost/range/result_iterator.hpp>
 #include <boost/range/begin.hpp>
 #include <boost/range/end.hpp>
 #include <boost/shared_ptr.hpp>
@@ -35,8 +38,8 @@
         typedef typename range_value<Map>::type::first_type key_type;
         typedef typename range_value<Map>::type::second_type value_type;
         typedef typename range_value<key_type>::type char_type;
- typedef typename range_iterator<Map const>::type iterator;
- typedef typename range_iterator<key_type const>::type key_iterator;
+ typedef typename range_result_iterator<Map const>::type iterator;
+ typedef typename range_result_iterator<key_type const>::type key_iterator;
         typedef value_type const *result_type;
 
         // copies of this symbol table share the TST
@@ -81,7 +84,9 @@
               , lo(0)
               , eq(0)
               , hi(0)
+ #ifdef BOOST_DISABLE_THREADS
               , tau(0)
+ #endif
             {}
 
             ~node()
@@ -98,7 +103,9 @@
                 std::swap(lo, that.lo);
                 std::swap(eq, that.eq);
                 std::swap(hi, that.hi);
+ #ifdef BOOST_DISABLE_THREADS
                 std::swap(tau, that.tau);
+ #endif
             }
 
             char_type ch;
@@ -153,6 +160,7 @@
             return p;
         }
 
+ #ifdef BOOST_DISABLE_THREADS
         ///////////////////////////////////////////////////////////////////////////////
         // conditional rotation : the goal is to minimize the overall
         // weighted path length of each binary search tree
@@ -185,6 +193,7 @@
             (*i).swap(*j);
             return true;
         }
+ #endif
 
         ///////////////////////////////////////////////////////////////////////////////
         // search : find a string in the TST
@@ -198,12 +207,16 @@
             char_type c1 = (begin != end ? trans(*begin) : 0);
             while(p)
             {
+ #ifdef BOOST_DISABLE_THREADS
                 ++p->tau;
+ #endif
                 if(c1 == p->ch)
                 {
                     // conditional rotation test
+ #ifdef BOOST_DISABLE_THREADS
                     if (this->cond_rotation(left, p, p2))
                         p = p2;
+ #endif
                     if (0 == p->ch)
                     {
                         // it's a match!

Modified: branches/bcbboost/boost/xpressive/proto/expr.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/proto/expr.hpp (original)
+++ branches/bcbboost/boost/xpressive/proto/expr.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -136,6 +136,9 @@
 
 #elif BOOST_PP_ITERATION_DEPTH() == 1
 
+ #define ARG_COUNT BOOST_PP_MAX(1, BOOST_PP_ITERATION())
+ #define IS_TERMINAL 0 == BOOST_PP_ITERATION()
+
         /// \brief Representation of a node in an expression tree.
         ///
         /// \c proto::expr\<\> is a node in an expression template tree. It
@@ -157,10 +160,6 @@
         /// type is \c boost::proto::tag::terminal, in which case
         /// \c Args must be \c proto::args1\<T\>, where \c T can be any
         /// type.
-
- #define ARG_COUNT BOOST_PP_MAX(1, BOOST_PP_ITERATION())
- #define IS_TERMINAL 0 == BOOST_PP_ITERATION()
-
         template<typename Tag, typename Args>
         struct expr<Tag, Args, BOOST_PP_ITERATION() >
         {

Modified: branches/bcbboost/boost/xpressive/proto/matches.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/proto/matches.hpp (original)
+++ branches/bcbboost/boost/xpressive/proto/matches.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -49,6 +49,11 @@
     # endif
     #endif
 
+ #if defined(_MSC_VER) && (_MSC_VER >= 1020)
+ # pragma warning(push)
+ # pragma warning(disable:4305) // 'specialization' : truncation from 'const int' to 'bool'
+ #endif
+
     namespace boost { namespace proto
     {
 
@@ -476,6 +481,10 @@
         }
     }}
 
+ #if defined(_MSC_VER) && (_MSC_VER >= 1020)
+ # pragma warning(pop)
+ #endif
+
     #endif
 
 #elif BOOST_PP_ITERATION_FLAGS() == 1

Modified: branches/bcbboost/boost/xpressive/proto/transform/fold.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/proto/transform/fold.hpp (original)
+++ branches/bcbboost/boost/xpressive/proto/transform/fold.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -82,14 +82,14 @@
 
             template<typename Expr, typename State, typename Visitor>
             struct apply
- : detail::fold_impl<Grammar, Expr, State, Visitor>
+ : detail::fold_impl<Grammar, typename Expr::proto_base_expr, State, Visitor>
             {};
 
             template<typename Expr, typename State, typename Visitor>
             static typename apply<Expr, State, Visitor>::type
             call(Expr const &expr, State const &state, Visitor &visitor)
             {
- return apply<Expr, State, Visitor>::call(expr, state, visitor);
+ return apply<Expr, State, Visitor>::call(expr.proto_base(), state, visitor);
             }
         };
 
@@ -103,14 +103,14 @@
 
             template<typename Expr, typename State, typename Visitor>
             struct apply
- : detail::reverse_fold_impl<Grammar, Expr, State, Visitor>
+ : detail::reverse_fold_impl<Grammar, typename Expr::proto_base_expr, State, Visitor>
             {};
 
             template<typename Expr, typename State, typename Visitor>
             static typename apply<Expr, State, Visitor>::type
             call(Expr const &expr, State const &state, Visitor &visitor)
             {
- return apply<Expr, State, Visitor>::call(expr, state, visitor);
+ return apply<Expr, State, Visitor>::call(expr.proto_base(), state, visitor);
             }
         };
 

Modified: branches/bcbboost/boost/xpressive/regex_actions.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/regex_actions.hpp (original)
+++ branches/bcbboost/boost/xpressive/regex_actions.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -36,11 +36,17 @@
 
 // Doxygen can't handle proto :-(
 #ifndef BOOST_XPRESSIVE_DOXYGEN_INVOKED
+# include <boost/xpressive/proto/transform/fold.hpp>
 # include <boost/xpressive/detail/core/matcher/action_matcher.hpp>
 #endif
 
-#define UNREF(x) typename remove_reference<x>::type
-#define UNCVREF(x) typename remove_cv<typename remove_reference<x>::type>::type
+/// INTERNAL ONLY
+///
+#define UNREF(x) typename remove_reference<x>::type
+
+/// INTERNAL ONLY
+///
+#define UNCVREF(x) typename remove_cv<typename remove_reference<x>::type>::type
 
 namespace boost { namespace xpressive
 {
@@ -72,6 +78,56 @@
 
             T value;
         };
+
+ struct check_tag
+ {};
+
+ template<typename Grammar>
+ struct BindArg
+ : Grammar
+ {
+ template<typename Expr, typename State, typename Visitor>
+ struct apply
+ {
+ typedef State type;
+ };
+
+ template<typename Expr, typename State, typename Visitor>
+ static State call(Expr const &expr, State const &state, Visitor &visitor)
+ {
+ visitor.let(expr);
+ return state;
+ }
+ };
+
+ struct let_tag
+ {};
+
+ struct BindArgs
+ : boost::proto::transform::fold<
+ boost::proto::function<
+ boost::proto::transform::state<boost::proto::terminal<let_tag> >
+ , boost::proto::vararg< BindArg< boost::proto::assign<boost::proto::_, boost::proto::_> > >
+ >
+ >
+ {};
+
+ struct let_domain
+ : boost::proto::domain<boost::proto::pod_generator<let_> >
+ {};
+
+ template<typename Expr>
+ struct let_
+ {
+ BOOST_PROTO_EXTENDS(Expr, let_<Expr>, let_domain)
+ BOOST_PROTO_EXTENDS_FUNCTION(Expr, let_<Expr>, let_domain)
+ };
+
+ template<typename Args, typename BidiIter>
+ void bind_args(let_<Args> const &args, match_results<BidiIter> &what)
+ {
+ BindArgs::call(args, 0, what);
+ }
     }
 
     namespace op
@@ -523,22 +579,28 @@
         };
     }
 
- proto::terminal<op::push>::type const push = {{}};
- proto::terminal<op::push_back>::type const push_back = {{}};
- proto::terminal<op::push_front>::type const push_front = {{}};
- proto::terminal<op::pop>::type const pop = {{}};
- proto::terminal<op::pop_back>::type const pop_back = {{}};
- proto::terminal<op::pop_front>::type const pop_front = {{}};
- proto::terminal<op::top>::type const top = {{}};
- proto::terminal<op::back>::type const back = {{}};
- proto::terminal<op::front>::type const front = {{}};
- proto::terminal<op::first>::type const first = {{}};
- proto::terminal<op::second>::type const second = {{}};
- proto::terminal<op::matched>::type const matched = {{}};
- proto::terminal<op::length>::type const length = {{}};
- proto::terminal<op::str>::type const str = {{}};
- proto::terminal<op::insert>::type const insert = {{}};
- proto::terminal<op::make_pair>::type const make_pair = {{}};
+ template<typename Fun>
+ struct function
+ {
+ typedef typename proto::terminal<Fun>::type type;
+ };
+
+ function<op::push>::type const push = {{}};
+ function<op::push_back>::type const push_back = {{}};
+ function<op::push_front>::type const push_front = {{}};
+ function<op::pop>::type const pop = {{}};
+ function<op::pop_back>::type const pop_back = {{}};
+ function<op::pop_front>::type const pop_front = {{}};
+ function<op::top>::type const top = {{}};
+ function<op::back>::type const back = {{}};
+ function<op::front>::type const front = {{}};
+ function<op::first>::type const first = {{}};
+ function<op::second>::type const second = {{}};
+ function<op::matched>::type const matched = {{}};
+ function<op::length>::type const length = {{}};
+ function<op::str>::type const str = {{}};
+ function<op::insert>::type const insert = {{}};
+ function<op::make_pair>::type const make_pair = {{}};
 
     template<typename T>
     struct value
@@ -676,13 +738,13 @@
         return reference<T const>(t);
     }
 
- template<typename Predicate>
- typename proto::terminal<detail::predicate_placeholder<Predicate> >::type const
- check(Predicate const &pred)
- {
- detail::predicate_placeholder<Predicate> p = {pred};
- return proto::as_expr(p);
- }
+ /// check(), for testing custom assertions
+ ///
+ proto::terminal<detail::check_tag>::type const check = {{}};
+
+ /// let(), for binding references to non-local variables
+ ///
+ detail::let_<proto::terminal<detail::let_tag>::type> const let = {{{}}};
 
     template<typename T, int I = 0, typename Dummy = proto::is_proto_expr>
     struct placeholder
@@ -734,6 +796,8 @@
             ignore_unused(xpressive::str);
             ignore_unused(xpressive::insert);
             ignore_unused(xpressive::make_pair);
+ ignore_unused(xpressive::check);
+ ignore_unused(xpressive::let);
         }
     }
 

Modified: branches/bcbboost/boost/xpressive/regex_algorithms.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/regex_algorithms.hpp (original)
+++ branches/bcbboost/boost/xpressive/regex_algorithms.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -25,11 +25,9 @@
 #include <boost/xpressive/detail/core/state.hpp>
 #include <boost/xpressive/detail/utility/save_restore.hpp>
 
-#ifdef BOOST_XPRESSIVE_DOXYGEN_INVOKED
-# define BOOST_XPR_NONDEDUCED_TYPE_(x) x
-#else
-# define BOOST_XPR_NONDEDUCED_TYPE_(x) typename mpl::identity<x>::type
-#endif
+/// INTERNAL ONLY
+///
+#define BOOST_XPR_NONDEDUCED_TYPE_(x) typename mpl::identity<x>::type
 
 namespace boost { namespace xpressive
 {

Modified: branches/bcbboost/boost/xpressive/regex_iterator.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/regex_iterator.hpp (original)
+++ branches/bcbboost/boost/xpressive/regex_iterator.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -121,6 +121,21 @@
         this->next_();
     }
 
+ template<typename LetExpr>
+ regex_iterator
+ (
+ BidiIter begin
+ , BidiIter end
+ , basic_regex<BidiIter> const &rex
+ , detail::let_<LetExpr> const &args
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+ )
+ : impl_(new impl_type_(begin, begin, end, &rex, flags))
+ {
+ detail::bind_args(args, this->impl_->what_);
+ this->next_();
+ }
+
     regex_iterator(regex_iterator<BidiIter> const &that)
       : impl_(that.impl_) // COW
     {
@@ -200,15 +215,19 @@
     {
         if(1 != this->impl_->use_count())
         {
+ // This is OK, the use_count is > 1
+ impl_type_ *that = this->impl_.get();
             this->impl_ = new impl_type_
             (
- this->impl_->state_.begin_
- , this->impl_->state_.cur_
- , this->impl_->state_.end_
- , this->impl_->rex_
- , this->impl_->flags_
- , this->impl_->not_null_
+ that->state_.begin_
+ , that->state_.cur_
+ , that->state_.end_
+ , that->rex_
+ , that->flags_
+ , that->not_null_
             );
+ detail::core_access<BidiIter>::get_action_args(this->impl_->what_)
+ = detail::core_access<BidiIter>::get_action_args(that->what_);
         }
     }
 

Modified: branches/bcbboost/boost/xpressive/regex_token_iterator.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/regex_token_iterator.hpp (original)
+++ branches/bcbboost/boost/xpressive/regex_token_iterator.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -166,6 +166,26 @@
     /// \param begin The beginning of the character range to search.
     /// \param end The end of the character range to search.
     /// \param rex The regex pattern to search for.
+ /// \param args A let() expression with argument bindings for semantic actions.
+ /// \pre \c [begin,end) is a valid range.
+ template<typename LetExpr>
+ regex_token_iterator
+ (
+ BidiIter begin
+ , BidiIter end
+ , basic_regex<BidiIter> const &rex
+ , detail::let_<LetExpr> const &args
+ )
+ : impl_(new impl_type_(begin, begin, end, &rex))
+ {
+ detail::bind_args(args, this->impl_->iter_.what_);
+ this->next_();
+ }
+
+ /// \param begin The beginning of the character range to search.
+ /// \param end The end of the character range to search.
+ /// \param rex The regex pattern to search for.
+ /// \param flags Optional match flags, used to control how the expression is matched against the sequence. (See match_flag_type.)
     /// \pre \c [begin,end) is a valid range.
     /// \pre \c subs is either an integer greater or equal to -1,
     /// or else an array or non-empty \c std::vector\<\> of such integers.
@@ -183,6 +203,30 @@
         this->next_();
     }
 
+ /// \param begin The beginning of the character range to search.
+ /// \param end The end of the character range to search.
+ /// \param rex The regex pattern to search for.
+ /// \param args A let() expression with argument bindings for semantic actions.
+ /// \param flags Optional match flags, used to control how the expression is matched against the sequence. (See match_flag_type.)
+ /// \pre \c [begin,end) is a valid range.
+ /// \pre \c subs is either an integer greater or equal to -1,
+ /// or else an array or non-empty \c std::vector\<\> of such integers.
+ template<typename Subs, typename LetExpr>
+ regex_token_iterator
+ (
+ BidiIter begin
+ , BidiIter end
+ , basic_regex<BidiIter> const &rex
+ , Subs const &subs
+ , detail::let_<LetExpr> const &args
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+ )
+ : impl_(new impl_type_(begin, begin, end, &rex, flags, detail::to_vector(subs)))
+ {
+ detail::bind_args(args, this->impl_->iter_.what_);
+ this->next_();
+ }
+
     /// \post <tt>*this == that</tt>
     regex_token_iterator(regex_token_iterator<BidiIter> const &that)
       : impl_(that.impl_) // COW
@@ -279,6 +323,12 @@
                 // Find a better way
                 clone->iter_.what_ = this->impl_->iter_.what_;
             }
+ else
+ {
+ // At the very least, copy the action args
+ detail::core_access<BidiIter>::get_action_args(clone->iter_.what_)
+ = detail::core_access<BidiIter>::get_action_args(this->impl_->iter_.what_);
+ }
 
             this->impl_.swap(clone);
         }

Modified: branches/bcbboost/boost/xpressive/traits/c_regex_traits.hpp
==============================================================================
--- branches/bcbboost/boost/xpressive/traits/c_regex_traits.hpp (original)
+++ branches/bcbboost/boost/xpressive/traits/c_regex_traits.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -135,7 +135,7 @@
     /// Checks two c_regex_traits objects for equality
     ///
     /// \return true.
- bool operator ==(c_regex_traits<char_type> const &that) const
+ bool operator ==(c_regex_traits<char_type> const &) const
     {
         return true;
     }
@@ -143,7 +143,7 @@
     /// Checks two c_regex_traits objects for inequality
     ///
     /// \return false.
- bool operator !=(c_regex_traits<char_type> const &that) const
+ bool operator !=(c_regex_traits<char_type> const &) const
     {
         return false;
     }
@@ -201,7 +201,7 @@
 
     /// Returns a string_type containing all the characters that compare equal
     /// disregrarding case to the one passed in. This function can only be called
- /// if has_fold_case<cc_regex_traits<Char> >::value is true.
+ /// if has_fold_case<c_regex_traits<Char> >::value is true.
     ///
     /// \param ch The source character.
     /// \return string_type containing all chars which are equal to ch when disregarding

Modified: branches/bcbboost/doc/Jamfile.v2
==============================================================================
--- branches/bcbboost/doc/Jamfile.v2 (original)
+++ branches/bcbboost/doc/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -14,7 +14,6 @@
     #<dependency>../libs/type_traits/doc//type_traits
     <dependency>../libs/static_assert/doc//static_assert
     <dependency>../libs/tr1/doc//tr1
- <dependency>../libs/math/doc//math
     <dependency>../libs/foreach/doc//foreach
     <dependency>../libs/mpi/doc//mpi
     <dependency>../libs/mpi/doc//mpi_autodoc.xml
@@ -39,7 +38,6 @@
     #<implicit-dependency>../libs/type_traits/doc//type_traits
     <implicit-dependency>../libs/static_assert/doc//static_assert
     <implicit-dependency>../libs/tr1/doc//tr1
- <implicit-dependency>../libs/math/doc//math
     <implicit-dependency>../libs/foreach/doc//foreach
     <implicit-dependency>../libs/typeof/doc//typeof
     <implicit-dependency>../libs/xpressive/doc//xpressive
@@ -61,3 +59,4 @@
 install images : [ glob src/images/*.png ] : <location>html/images ;
 explicit images ;
 
+

Modified: branches/bcbboost/doc/src/boost.xml
==============================================================================
--- branches/bcbboost/doc/src/boost.xml (original)
+++ branches/bcbboost/doc/src/boost.xml 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -373,8 +373,6 @@
      </libraryinfo>
    </library>
 
- <xi:include href="math.xml"/>
-
    <library name="Math/Common Factor" dirname="math/common_factor" html-only="1"
             url="../../libs/math/doc/common_factor.html">
      <libraryinfo>
@@ -753,3 +751,4 @@
   <xi:include href="using.xml"/>
 </boostbook>
 
+

Modified: branches/bcbboost/libs/asio/test/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/asio/test/Jamfile.v2 (original)
+++ branches/bcbboost/libs/asio/test/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -40,7 +40,7 @@
     <os>SOLARIS:<define>__EXTENSIONS__
     <os>SOLARIS:<library>socket
     <os>SOLARIS:<library>nsl
- <os>NT:<define>_WIN32_WINNT=0x0500
+ <os>NT:<define>_WIN32_WINNT=0x0501
     <os>NT,<toolset>cw:<library>ws2_32
     <os>NT,<toolset>cw:<library>mswsock
     <os>NT,<toolset>gcc:<library>ws2_32

Modified: branches/bcbboost/libs/circular_buffer/test/base_test.cpp
==============================================================================
--- branches/bcbboost/libs/circular_buffer/test/base_test.cpp (original)
+++ branches/bcbboost/libs/circular_buffer/test/base_test.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -516,28 +516,28 @@
 
     circular_buffer<MyInteger> cb1(3, 5);
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(cb1.set_capacity(5), exception);
+ BOOST_CHECK_THROW(cb1.set_capacity(5), std::exception);
     BOOST_CHECK(cb1.capacity() == 3);
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(cb1.rset_capacity(5), exception);
+ BOOST_CHECK_THROW(cb1.rset_capacity(5), std::exception);
     BOOST_CHECK(cb1.capacity() == 3);
     generic_test(cb1);
 
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(circular_buffer<MyInteger> cb2(5, 10), exception);
+ BOOST_CHECK_THROW(circular_buffer<MyInteger> cb2(5, 10), std::exception);
 
     circular_buffer<MyInteger> cb3(5, 10);
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(circular_buffer<MyInteger> cb4(cb3), exception);
+ BOOST_CHECK_THROW(circular_buffer<MyInteger> cb4(cb3), std::exception);
 
- vector<MyInteger> v(5, 10);
+ vector<MyInteger> v(5, MyInteger(10));
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(circular_buffer<MyInteger> cb5(8, v.begin(), v.end()), exception);
+ BOOST_CHECK_THROW(circular_buffer<MyInteger> cb5(8, v.begin(), v.end()), std::exception);
 
     circular_buffer<MyInteger> cb6(5, 10);
     circular_buffer<MyInteger> cb7(8, 3);
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(cb7 = cb6, exception);
+ BOOST_CHECK_THROW(cb7 = cb6, std::exception);
     BOOST_CHECK(cb7.size() == 8);
     BOOST_CHECK(cb7.capacity() == 8);
     BOOST_CHECK(cb7[0] == 3);
@@ -546,138 +546,138 @@
 
     circular_buffer<MyInteger> cb8(5, 10);
     MyInteger::set_exception_trigger(2);
- BOOST_CHECK_THROW(cb8.push_front(1), exception);
+ BOOST_CHECK_THROW(cb8.push_front(1), std::exception);
 
     circular_buffer<MyInteger> cb9(5);
     cb9.push_back(1);
     cb9.push_back(2);
     cb9.push_back(3);
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(cb9.insert(cb9.begin() + 1, 4), exception);
+ BOOST_CHECK_THROW(cb9.insert(cb9.begin() + 1, 4), std::exception);
 
     circular_buffer<MyInteger> cb10(5);
     cb10.push_back(1);
     cb10.push_back(2);
     cb10.push_back(3);
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(cb10.rinsert(cb10.begin() + 1, 4), exception);
+ BOOST_CHECK_THROW(cb10.rinsert(cb10.begin() + 1, 4), std::exception);
 
     circular_buffer<MyInteger> cb11(5);
     cb11.push_back(1);
     cb11.push_back(2);
     MyInteger::set_exception_trigger(2);
- BOOST_CHECK_THROW(cb11.rinsert(cb11.begin(), 1), exception);
+ BOOST_CHECK_THROW(cb11.rinsert(cb11.begin(), 1), std::exception);
 
     circular_buffer<MyInteger> cb12(5, 1);
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(cb12.assign(4, 2), exception);
+ BOOST_CHECK_THROW(cb12.assign(4, 2), std::exception);
 
     circular_buffer<MyInteger> cb13(5, 1);
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(cb13.assign(6, 2), exception);
+ BOOST_CHECK_THROW(cb13.assign(6, 2), std::exception);
 
     circular_buffer<MyInteger> cb14(5);
     cb14.push_back(1);
     cb14.push_back(2);
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(cb14.insert(cb14.begin(), 10, 3), exception);
+ BOOST_CHECK_THROW(cb14.insert(cb14.begin(), 10, 3), std::exception);
 
     circular_buffer<MyInteger> cb15(5);
     cb15.push_back(1);
     cb15.push_back(2);
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(cb15.insert(cb15.end(), 10, 3), exception);
+ BOOST_CHECK_THROW(cb15.insert(cb15.end(), 10, 3), std::exception);
 
     circular_buffer<MyInteger> cb16(5);
     cb16.push_back(1);
     cb16.push_back(2);
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(cb16.rinsert(cb16.begin(), 10, 3), exception);
+ BOOST_CHECK_THROW(cb16.rinsert(cb16.begin(), 10, 3), std::exception);
 
     circular_buffer<MyInteger> cb17(5);
     cb17.push_back(1);
     cb17.push_back(2);
     MyInteger::set_exception_trigger(3);
- BOOST_CHECK_THROW(cb17.rinsert(cb17.end(), 10, 3), exception);
+ BOOST_CHECK_THROW(cb17.rinsert(cb17.end(), 10, 3), std::exception);
 
     circular_buffer<MyInteger> cb18(5, 0);
     cb18.push_back(1);
     cb18.push_back(2);
     cb18.pop_front();
     MyInteger::set_exception_trigger(4);
- BOOST_CHECK_THROW(cb18.linearize(), exception);
+ BOOST_CHECK_THROW(cb18.linearize(), std::exception);
 
     circular_buffer<MyInteger> cb19(5, 0);
     cb19.push_back(1);
     cb19.push_back(2);
     MyInteger::set_exception_trigger(5);
- BOOST_CHECK_THROW(cb19.linearize(), exception);
+ BOOST_CHECK_THROW(cb19.linearize(), std::exception);
 
     circular_buffer<MyInteger> cb20(5, 0);
     cb20.push_back(1);
     cb20.push_back(2);
     MyInteger::set_exception_trigger(6);
- BOOST_CHECK_THROW(cb20.linearize(), exception);
+ BOOST_CHECK_THROW(cb20.linearize(), std::exception);
 
     circular_buffer<MyInteger> cb21(5);
     cb21.push_back(1);
     cb21.push_back(2);
     cb21.push_back(3);
     MyInteger::set_exception_trigger(2);
- BOOST_CHECK_THROW(cb21.insert(cb21.begin() + 1, 4), exception);
+ BOOST_CHECK_THROW(cb21.insert(cb21.begin() + 1, 4), std::exception);
 
     circular_buffer<MyInteger> cb22(5);
     cb22.push_back(1);
     cb22.push_back(2);
     cb22.push_back(3);
     MyInteger::set_exception_trigger(2);
- BOOST_CHECK_THROW(cb22.insert(cb22.end(), 4), exception);
+ BOOST_CHECK_THROW(cb22.insert(cb22.end(), 4), std::exception);
 
     circular_buffer<MyInteger> cb23(5, 0);
     MyInteger::set_exception_trigger(2);
- BOOST_CHECK_THROW(cb23.insert(cb23.begin() + 1, 4), exception);
+ BOOST_CHECK_THROW(cb23.insert(cb23.begin() + 1, 4), std::exception);
 
     circular_buffer<MyInteger> cb24(5);
     cb24.push_back(1);
     cb24.push_back(2);
     cb24.push_back(3);
     MyInteger::set_exception_trigger(2);
- BOOST_CHECK_THROW(cb24.rinsert(cb24.begin() + 1, 4), exception);
+ BOOST_CHECK_THROW(cb24.rinsert(cb24.begin() + 1, 4), std::exception);
 
     circular_buffer<MyInteger> cb25(5, 0);
     MyInteger::set_exception_trigger(2);
- BOOST_CHECK_THROW(cb25.rinsert(cb25.begin() + 3, 4), exception);
+ BOOST_CHECK_THROW(cb25.rinsert(cb25.begin() + 3, 4), std::exception);
 
     circular_buffer<MyInteger> cb26(5);
     cb26.push_back(1);
     cb26.push_back(2);
     MyInteger::set_exception_trigger(5);
- BOOST_CHECK_THROW(cb26.insert(cb26.begin(), 10, 3), exception);
+ BOOST_CHECK_THROW(cb26.insert(cb26.begin(), 10, 3), std::exception);
 
     circular_buffer<MyInteger> cb27(5);
     cb27.push_back(1);
     cb27.push_back(2);
     MyInteger::set_exception_trigger(5);
- BOOST_CHECK_THROW(cb27.insert(cb27.end(), 10, 3), exception);
+ BOOST_CHECK_THROW(cb27.insert(cb27.end(), 10, 3), std::exception);
 
     circular_buffer<MyInteger> cb28(5);
     cb28.push_back(1);
     cb28.push_back(2);
     MyInteger::set_exception_trigger(5);
- BOOST_CHECK_THROW(cb28.rinsert(cb28.begin(), 10, 3), exception);
+ BOOST_CHECK_THROW(cb28.rinsert(cb28.begin(), 10, 3), std::exception);
 
     circular_buffer<MyInteger> cb29(5);
     cb29.push_back(1);
     cb29.push_back(2);
     MyInteger::set_exception_trigger(5);
- BOOST_CHECK_THROW(cb29.rinsert(cb29.end(), 10, 3), exception);
+ BOOST_CHECK_THROW(cb29.rinsert(cb29.end(), 10, 3), std::exception);
 
     circular_buffer<MyInteger> cb30(10);
     cb30.push_back(1);
     cb30.push_back(2);
     cb30.push_back(3);
     MyInteger::set_exception_trigger(2);
- BOOST_CHECK_THROW(cb30.rinsert(cb30.begin(), 10, 3), exception);
+ BOOST_CHECK_THROW(cb30.rinsert(cb30.begin(), 10, 3), std::exception);
 
 #endif // #if !defined(BOOST_NO_EXCEPTIONS)
 }

Modified: branches/bcbboost/libs/functional/hash/test/hash_function_pointer_test.cpp
==============================================================================
--- branches/bcbboost/libs/functional/hash/test/hash_function_pointer_test.cpp (original)
+++ branches/bcbboost/libs/functional/hash/test/hash_function_pointer_test.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -29,6 +29,11 @@
     compile_time_tests((void(**)()) 0);
     compile_time_tests((int(**)(int)) 0);
 
+ std::cout<<"sizeof(void(*)()) = "<<sizeof(void(*)())<<"\n";
+ std::cout<<"sizeof(int(*)(int)) = "<<sizeof(int(*)(int))<<"\n";
+ std::cout<<"sizeof(void*) = "<<sizeof(void*)<<"\n";
+ std::cout<<"sizeof(std::size_t) = "<<sizeof(std::size_t)<<"\n";
+
     HASH_NAMESPACE::hash<void(*)()> hasher_void;
     HASH_NAMESPACE::hash<int(*)(int)> hasher_int;
 
@@ -38,6 +43,14 @@
     BOOST_TEST(hasher_void(0) == hasher_void(0));
     BOOST_TEST(hasher_void(&void_func1) == hasher_void(&void_func1));
     BOOST_TEST(hasher_void(&void_func1) != hasher_void(&void_func2));
+ if(hasher_void(&void_func1) == hasher_void(&void_func2)) {
+ std::cerr<<std::hex;
+ std::cerr<<"&void_func1: "<<(void*)void_func1<<"\n";
+ std::cerr<<"&void_func2: "<<(void*)void_func2<<"\n";
+ std::cerr<<"hasher_void(&void_func1): "<<hasher_void(&void_func1)<<"\n";
+ std::cerr<<"hasher_void(&void_func2): "<<hasher_void(&void_func2)<<"\n";
+ std::cerr<<std::dec;
+ }
     BOOST_TEST(hasher_void(&void_func1) != hasher_void(0));
     BOOST_TEST(hasher_int(0) == hasher_int(0));
     BOOST_TEST(hasher_int(&int_func1) == hasher_int(&int_func1));

Modified: branches/bcbboost/libs/graph/test/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/graph/test/Jamfile.v2 (original)
+++ branches/bcbboost/libs/graph/test/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -7,6 +7,8 @@
 
 path-constant PLANAR_INPUT_FILES : ./planar_input_graphs ;
 
+path-constant CYCLE_RATIO_INPUT_FILE : ./cycle_ratio_s382.90.dot ;
+
 if [ modules.peek : EXPAT_INCLUDE ] && [ modules.peek : EXPAT_LIBPATH ]
 {
   optional_tests += [ run graphml_test.cpp ../build//boost_graph ] ;
@@ -105,7 +107,7 @@
 
     [ run kolmogorov_max_flow_test.cpp ]
 
- [ run cycle_ratio_tests.cpp ../build//boost_graph : cycle_ratio_s382.90.dot ]
+ [ run cycle_ratio_tests.cpp ../build//boost_graph : $(CYCLE_RATIO_INPUT_FILE) ]
 
     [ run basic_planarity_test.cpp ]
 

Modified: branches/bcbboost/libs/libraries.htm
==============================================================================
--- branches/bcbboost/libs/libraries.htm (original)
+++ branches/bcbboost/libs/libraries.htm 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -151,15 +151,18 @@
     Gary Powell.</li>
     <li>math - Several contributions in the
     domain of mathematics, from various authors.</li>
+ <li>math/complex number algorithms -
+ These complex number algorithms are the inverses of trigonometric functions currently present in the C++ standard, from John Maddock.</li>
     <li>math/common_factor - Greatest
     common divisor and least common multiple, from Daryle Walker.</li>
- <li>math/octonion -
+ <li>math/octonion -
         Octonions, from Hubert Holin.</li>
- <li>math/quaternion -
+ <li>math/quaternion -
         Quaternions, from Hubert Holin.</li>
- <li>math/special_functions -
- Mathematical special functions such as atanh, sinc, and sinhc,
- from Hubert Holin.</li>
+ <li>math/special_functions -
+ A wide selection of mathematical special functions from John Maddock, Paul Bristow, Hubert Holin and Xiaogang Zhang.</li>
+ <li>math/statistical distributions -
+ A wide selection of univariate statistical distributions and functions that operate on them from John Maddock and Paul Bristow</li>
     <li>minmax - standard library
         extensions for simultaneous min/max and min/max element computations,
     from Herv&eacute; Br&ouml;nnimann.</li>
@@ -460,15 +463,18 @@
     <li>interval - Extends the
     usual arithmetic functions to mathematical intervals, from Guillaume
     Melquiond, Herv? Br?nnimann and Sylvain Pion.</li>
+ <li>math/complex number algorithms -
+ These complex number algorithms are the inverses of trigonometric functions currently present in the C++ standard, from John Maddock.</li>
     <li>math/common_factor - Greatest
     common divisor and least common multiple, from Daryle Walker.</li>
- <li>math/octonion -
- Octonions, from Hubert Holin.</li>
- <li>math/quaternion -
- Quaternions, from Hubert Holin.</li>
- <li>math/special_functions -
- Mathematical special functions such as atanh, sinc, and sinhc,
- from Hubert Holin.</li>
+ <li>math/octonion -
+ Octonions, from Hubert Holin.</li>
+ <li>math/quaternion -
+ Quaternions, from Hubert Holin.</li>
+ <li>math/special_functions -
+ A wide selection of mathematical special functions from John Maddock, Paul Bristow, Hubert Holin and Xiaogang Zhang.</li>
+ <li>math/statistical distributions -
+ A wide selection of univariate statistical distributions and functions that operate on them from John Maddock and Paul Bristow</li>
     <li>multi_array - Multidimensional
     containers and adaptors for arrays of contiguous data, from Ron Garcia.</li>
     <li>operators - Templates
@@ -660,3 +666,4 @@
 </body>
 </html>
 
+

Modified: branches/bcbboost/libs/math/doc/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/math/doc/Jamfile.v2 (original)
+++ branches/bcbboost/libs/math/doc/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -5,37 +5,31 @@
 
 using quickbook ;
 
-path-constant boost-images : ../../../doc/src/images ;
-path-constant images_location : ../../../doc/html ;
-
 xml math : math.qbk ;
 boostbook standalone
     :
         math
     :
- <xsl:param>nav.layout=none
- <xsl:param>navig.graphics=0
- # PDF Options:
- # TOC Generation: this is needed for FOP-0.9 and later:
- #<xsl:param>fop1.extensions=1
- # Or enable this if you're using XEP:
- <xsl:param>xep.extensions=1
- # TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
- <xsl:param>fop.extensions=0
- # No indent on body text:
- <xsl:param>body.start.indent=0pt
- # Margin size:
- <xsl:param>page.margin.inner=0.5in
- # Margin size:
- <xsl:param>page.margin.outer=0.5in
- # Yes, we want graphics for admonishments:
- <xsl:param>admon.graphics=1
- # Set this one for PDF generation *only*:
- # default pnd graphics are awful in PDF form,
- # better use SVG's instead:
- <format>pdf:<xsl:param>admon.graphics.extension=".svg"
- <format>pdf:<xsl:param>admon.graphics.path=$(boost-images)/
- <format>pdf:<xsl:param>img.src.path=$(images_location)/
+ # Path for links to Boost:
+ <xsl:param>boost.root=../../../..
+ # Path for libraries index:
+ <xsl:param>boost.libraries=../../../../libs/libraries.htm
+ # Use the main Boost stylesheet:
+ <xsl:param>html.stylesheet=../../../../doc/html/boostbook.css
+
+ # Some general style settings:
+ <xsl:param>table.footnote.number.format=1
+ <xsl:param>footnote.number.format=1
+
+ # HTML options first:
+ # Use graphics not text for navigation:
+ <xsl:param>navig.graphics=1
+ # How far down we chunk nested sections, basically all of them:
+ <xsl:param>chunk.section.depth=1
+ # Don't put the first section on the same page as the TOC:
+ <xsl:param>chunk.first.sections=0
+ # How far down sections get TOC's
+ <xsl:param>toc.section.depth=1
     ;
 
 

Modified: branches/bcbboost/libs/math/doc/common_factor.html
==============================================================================
--- branches/bcbboost/libs/math/doc/common_factor.html (original)
+++ branches/bcbboost/libs/math/doc/common_factor.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
   <head>
- <meta http-equiv="refresh" content="0; URL=../../../doc/html/boost_math/gcd_lcm.html">
+ <meta http-equiv="refresh" content="0; URL=gcd/html/index.html">
   </head>
   <body>
     Automatic redirection failed, please go to
- ../../../doc/html/boost_math/gcd_lcm.html
+ gcd/html/index.html
       <P>Copyright&nbsp;Daryle Walker 2006</P>
       <P>Distributed under the Boost Software License, Version 1.0. (See accompanying file <A href="../../../LICENSE_1_0.txt">
             LICENSE_1_0.txt</A> or copy at www.boost.org/LICENSE_1_0.txt).</P>
@@ -15,3 +15,4 @@
 
 
 
+

Modified: branches/bcbboost/libs/math/doc/index.html
==============================================================================
--- branches/bcbboost/libs/math/doc/index.html (original)
+++ branches/bcbboost/libs/math/doc/index.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
   <head>
- <meta http-equiv="refresh" content="0; URL=../../../doc/html/boost_math.html">
+ <meta http-equiv="refresh" content="0; URL=html/index.html">
   </head>
   <body>
     Automatic redirection failed, please go to
- ../../../doc/html/boost_math.html
+ html/index.html
       <P>Copyright Daryle Walker, Hubert Holin and John Maddock 2006</P>
       <P>Distributed under the Boost Software License, Version 1.0. (See accompanying file <A href="../../../LICENSE_1_0.txt">
             LICENSE_1_0.txt</A> or copy at www.boost.org/LICENSE_1_0.txt).</P>
@@ -14,3 +14,4 @@
 
 
 
+

Deleted: branches/bcbboost/libs/math/doc/math-background.qbk
==============================================================================
--- branches/bcbboost/libs/math/doc/math-background.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
+++ (empty file)
@@ -1,89 +0,0 @@
-
-[def __form1 [^\]-1;1\[]]
-[def __form2 [^\[0;+'''&#x221E;'''\[]]
-[def __form3 [^\[+1;+'''&#x221E;'''\[]]
-[def __form4 [^\]-'''&#x221E;''';0\]]]
-[def __form5 [^x '''&#x2265;''' 0]]
-
-
-[section Background Information and White Papers]
-
-[section The Inverse Hyperbolic Functions]
-
-The exponential funtion is defined, for all object for which this makes sense,
-as the power series
-[$../../libs/math/special_functions/graphics/special_functions_blurb1.jpeg],
-with ['[^n! = 1x2x3x4x5...xn]] (and ['[^0! = 1]] by definition) being the factorial of ['[^n]].
-In particular, the exponential function is well defined for real numbers,
-complex number, quaternions, octonions, and matrices of complex numbers,
-among others.
-
-[: ['[*Graph of exp on R]] ]
-
-[: [$../../libs/math/special_functions/graphics/exp_on_R.png] ]
-
-[: ['[*Real and Imaginary parts of exp on C]]]
-[: [$../../libs/math/special_functions/graphics/Im_exp_on_C.png]]
-
-The hyperbolic functions are defined as power series which
-can be computed (for reals, complex, quaternions and octonions) as:
-
-Hyperbolic cosine: [$../../libs/math/special_functions/graphics/special_functions_blurb5.jpeg]
-
-Hyperbolic sine: [$../../libs/math/special_functions/graphics/special_functions_blurb6.jpeg]
-
-Hyperbolic tangent: [$../../libs/math/special_functions/graphics/special_functions_blurb7.jpeg]
-
-[: ['[*Trigonometric functions on R (cos: purple; sin: red; tan: blue)]]]
-[: [$../../libs/math/special_functions/graphics/trigonometric.png]]
-
-[: ['[*Hyperbolic functions on r (cosh: purple; sinh: red; tanh: blue)]]]
-[: [$../../libs/math/special_functions/graphics/hyperbolic.png]]
-
-The hyperbolic sine is one to one on the set of real numbers,
-with range the full set of reals, while the hyperbolic tangent is
-also one to one on the set of real numbers but with range __form1, and
-therefore both have inverses. The hyperbolic cosine is one to one from __form2
-onto __form3 (and from __form4 onto __form3); the inverse function we use
-here is defined on __form3 with range __form2.
-
-The inverse of the hyperbolic tangent is called the Argument hyperbolic tangent,
-and can be computed as [$../../libs/math/special_functions/graphics/special_functions_blurb15.jpeg].
-
-The inverse of the hyperbolic sine is called the Argument hyperbolic sine,
-and can be computed (for __form5) as [$../../libs/math/special_functions/graphics/special_functions_blurb17.jpeg].
-
-The inverse of the hyperbolic cosine is called the Argument hyperbolic cosine,
-and can be computed as [$../../libs/math/special_functions/graphics/special_functions_blurb18.jpeg].
-
-[endsect]
-
-[section Sinus Cardinal and Hyperbolic Sinus Cardinal Functions]
-
-The Sinus Cardinal family of functions (indexed by the family of indices [^a > 0])
-is defined by
-[$../../libs/math/special_functions/graphics/special_functions_blurb20.jpeg];
-it sees heavy use in signal processing tasks.
-
-By analogy, the Hyperbolic Sinus Cardinal family of functions
-(also indexed by the family of indices [^a > 0]) is defined by
-[$../../libs/math/special_functions/graphics/special_functions_blurb22.jpeg].
-
-These two families of functions are composed of entire functions.
-
-[: ['[*Sinus Cardinal of index pi (purple) and Hyperbolic Sinus Cardinal of index pi (red) on R]]]
-[: [$../../libs/math/special_functions/graphics/sinc_pi_and_sinhc_pi_on_R.png]]
-
-[endsect]
-
-[section The Quaternionic Exponential]
-
-Please refer to the following PDF's:
-
-*[@../../libs/math/quaternion/TQE.pdf The Quaternionic Exponential (and beyond)]
-*[@../../libs/math/quaternion/TQE_EA.pdf The Quaternionic Exponential (and beyond) ERRATA & ADDENDA]
-
-[endsect]
-
-[endsect]
-

Deleted: branches/bcbboost/libs/math/doc/math-gcd.qbk
==============================================================================
--- branches/bcbboost/libs/math/doc/math-gcd.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
+++ (empty file)
@@ -1,230 +0,0 @@
-
-[section:gcd_lcm Greatest Common Divisor and Least Common Multiple]
-
-[section Introduction]
-
-The class and function templates in <boost/math/common_factor.hpp>
-provide run-time and compile-time evaluation of the greatest common divisor
-(GCD) or least common multiple (LCM) of two integers.
-These facilities are useful for many numeric-oriented generic
-programming problems.
-
-[endsect]
-
-[section Synopsis]
-
- namespace boost
- {
- namespace math
- {
-
- template < typename IntegerType >
- class gcd_evaluator;
- template < typename IntegerType >
- class lcm_evaluator;
-
- template < typename IntegerType >
- IntegerType gcd( IntegerType const &a, IntegerType const &b );
- template < typename IntegerType >
- IntegerType lcm( IntegerType const &a, IntegerType const &b );
-
- template < unsigned long Value1, unsigned long Value2 >
- struct static_gcd;
- template < unsigned long Value1, unsigned long Value2 >
- struct static_lcm;
-
- }
- }
-
-[endsect]
-
-[section GCD Function Object]
-
-[*Header: ] [@../../boost/math/common_factor_rt.hpp <boost/math/common_factor_rt.hpp>]
-
- template < typename IntegerType >
- class boost::math::gcd_evaluator
- {
- public:
- // Types
- typedef IntegerType result_type;
- typedef IntegerType first_argument_type;
- typedef IntegerType second_argument_type;
-
- // Function object interface
- result_type operator ()( first_argument_type const &a,
- second_argument_type const &b ) const;
- };
-
-The boost::math::gcd_evaluator class template defines a function object
-class to return the greatest common divisor of two integers.
-The template is parameterized by a single type, called IntegerType here.
-This type should be a numeric type that represents integers.
-The result of the function object is always nonnegative, even if either of
-the operator arguments is negative.
-
-This function object class template is used in the corresponding version of
-the GCD function template. If a numeric type wants to customize evaluations
-of its greatest common divisors, then the type should specialize on the
-gcd_evaluator class template.
-
-[endsect]
-
-[section LCM Function Object]
-
-[*Header: ] [@../../boost/math/common_factor_rt.hpp <boost/math/common_factor_rt.hpp>]
-
- template < typename IntegerType >
- class boost::math::lcm_evaluator
- {
- public:
- // Types
- typedef IntegerType result_type;
- typedef IntegerType first_argument_type;
- typedef IntegerType second_argument_type;
-
- // Function object interface
- result_type operator ()( first_argument_type const &a,
- second_argument_type const &b ) const;
- };
-
-The boost::math::lcm_evaluator class template defines a function object
-class to return the least common multiple of two integers. The template
-is parameterized by a single type, called IntegerType here. This type
-should be a numeric type that represents integers. The result of the
-function object is always nonnegative, even if either of the operator
-arguments is negative. If the least common multiple is beyond the range
-of the integer type, the results are undefined.
-
-This function object class template is used in the corresponding version
-of the LCM function template. If a numeric type wants to customize
-evaluations of its least common multiples, then the type should
-specialize on the lcm_evaluator class template.
-
-[endsect]
-
-[section Run-time GCD & LCM Determination]
-
-[*Header: ] [@../../boost/math/common_factor_rt.hpp <boost/math/common_factor_rt.hpp>]
-
- template < typename IntegerType >
- IntegerType boost::math::gcd( IntegerType const &a, IntegerType const &b );
-
- template < typename IntegerType >
- IntegerType boost::math::lcm( IntegerType const &a, IntegerType const &b );
-
-The boost::math::gcd function template returns the greatest common
-(nonnegative) divisor of the two integers passed to it.
-The boost::math::lcm function template returns the least common
-(nonnegative) multiple of the two integers passed to it.
-The function templates are parameterized on the function arguments'
-IntegerType, which is also the return type. Internally, these function
-templates use an object of the corresponding version of the
-gcd_evaluator and lcm_evaluator class templates, respectively.
-
-[endsect]
-
-[section Compile time GCD and LCM determination]
-
-[*Header: ] [@../../boost/math/common_factor_ct.hpp <boost/math/common_factor_ct.hpp>]
-
- template < unsigned long Value1, unsigned long Value2 >
- struct boost::math::static_gcd
- {
- static unsigned long const value = implementation_defined;
- };
-
- template < unsigned long Value1, unsigned long Value2 >
- struct boost::math::static_lcm
- {
- static unsigned long const value = implementation_defined;
- };
-
-The boost::math::static_gcd and boost::math::static_lcm class templates
-take two value-based template parameters of the unsigned long type
-and have a single static constant data member, value, of that same type.
-The value of that member is the greatest common factor or least
-common multiple, respectively, of the template arguments.
-A compile-time error will occur if the least common multiple
-is beyond the range of an unsigned long.
-
-[h3 Example]
-
- #include <boost/math/common_factor.hpp>
- #include <algorithm>
- #include <iterator>
-
-
- int main()
- {
- using std::cout;
- using std::endl;
-
- cout << "The GCD and LCM of 6 and 15 are "
- << boost::math::gcd(6, 15) << " and "
- << boost::math::lcm(6, 15) << ", respectively."
- << endl;
-
- cout << "The GCD and LCM of 8 and 9 are "
- << boost::math::static_gcd<8, 9>::value
- << " and "
- << boost::math::static_lcm<8, 9>::value
- << ", respectively." << endl;
-
- int a[] = { 4, 5, 6 }, b[] = { 7, 8, 9 }, c[3];
- std::transform( a, a + 3, b, c, boost::math::gcd_evaluator<int>() );
- std::copy( c, c + 3, std::ostream_iterator<int>(cout, " ") );
- }
-
-[endsect]
-
-[section Header <boost/math/common_factor.hpp>]
-
-This header simply includes the headers
-[@../../boost/math/common_factor_ct.hpp <boost/math/common_factor_ct.hpp>]
-and [@../../boost/math/common_factor_rt.hpp <boost/math/common_factor_rt.hpp>].
-
-Note this is a legacy header: it used to contain the actual implementation,
-but the compile-time and run-time facilities
-were moved to separate headers (since they were independent of each other).
-
-[endsect]
-
-[section Demonstration Program]
-
-The program [@../../libs/math/test/common_factor_test.cpp common_factor_test.cpp] is a demonstration of the results from
-instantiating various examples of the run-time GCD and LCM function
-templates and the compile-time GCD and LCM class templates.
-(The run-time GCD and LCM class templates are tested indirectly through
-the run-time function templates.)
-
-[endsect]
-
-[section Rationale]
-
-The greatest common divisor and least common multiple functions are
-greatly used in some numeric contexts, including some of the other
-Boost libraries. Centralizing these functions to one header improves
-code factoring and eases maintainence.
-
-[endsect]
-
-[section History]
-
-* 17 Dec 2005: Converted documentation to Quickbook Format.
-* 2 Jul 2002: Compile-time and run-time items separated to new headers.
-* 7 Nov 2001: Initial version
-
-[endsect]
-
-[section Credits]
-
-The author of the Boost compilation of GCD and LCM computations is
-Daryle Walker. The code was prompted by existing code hiding in the
-implementations of Paul Moore's rational library and Steve Cleary's
-pool library. The code had updates by Helmut Zeisel.
-
-[endsect]
-
-[endsect]
-

Deleted: branches/bcbboost/libs/math/doc/math-octonion.qbk
==============================================================================
--- branches/bcbboost/libs/math/doc/math-octonion.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
+++ (empty file)
@@ -1,983 +0,0 @@
-
-[def __R ['[*R]]]
-[def __C ['[*C]]]
-[def __H ['[*H]]]
-[def __O ['[*O]]]
-[def __R3 ['[*'''R<superscript>3</superscript>''']]]
-[def __R4 ['[*'''R<superscript>4</superscript>''']]]
-[def __octulple ('''&#x03B1;,&#x03B2;,&#x03B3;,&#x03B4;,&#x03B5;,&#x03B6;,&#x03B7;,&#x03B8;''')]
-[def __oct_formula ['[^o = '''&#x03B1; + &#x03B2;i + &#x03B3;j + &#x03B4;k + &#x03B5;e' + &#x03B6;i' + &#x03B7;j' + &#x03B8;k' ''']]]
-[def __oct_complex_formula ['[^o = ('''&#x03B1; + &#x03B2;i) + (&#x03B3; + &#x03B4;i)j + (&#x03B5; + &#x03B6;i)e' + (&#x03B7; - &#x03B8;i)j' ''']]]
-[def __oct_quat_formula ['[^o = ('''&#x03B1; + &#x03B2;i + &#x03B3;j + &#x03B4;k) + (&#x03B5; + &#x03B6;i + &#x03B7;j - &#x03B8;j)e' ''']]]
-[def __oct_not_equal ['[^x(yz) '''&#x2260;''' (xy)z]]]
-
-
-[section Octonions]
-
-[section Overview]
-
-Octonions, like [link boost_math.quaternions quaternions], are a relative of complex numbers.
-
-Octonions see some use in theoretical physics.
-
-In practical terms, an octonion is simply an octuple of real numbers __octulple,
-which we can write in the form __oct_formula, where ['[^i]], ['[^j]] and ['[^k]]
-are the same objects as for quaternions, and ['[^e']], ['[^i']], ['[^j']] and ['[^k']]
-are distinct objects which play essentially the same kind of role as ['[^i]] (or ['[^j]] or ['[^k]]).
-
-Addition and a multiplication is defined on the set of octonions,
-which generalize their quaternionic counterparts. The main novelty this time
-is that [*the multiplication is not only not commutative, is now not even
-associative] (i.e. there are quaternions ['[^x]], ['[^y]] and ['[^z]] such that __oct_not_equal).
-A way of remembering things is by using the following multiplication table:
-
-[$../../libs/math/octonion/graphics/octonion_blurb17.jpeg]
-
-Octonions (and their kin) are described in far more details in this other
-[@../../libs/math/quaternion/TQE.pdf document]
-(with [@../../libs/math/quaternion/TQE_EA.pdf errata and addenda]).
-
-Some traditional constructs, such as the exponential, carry over without too
-much change into the realms of octonions, but other, such as taking a square root,
-do not (the fact that the exponential has a closed form is a result of the
-author, but the fact that the exponential exists at all for octonions is known
-since quite a long time ago).
-
-[endsect]
-
-[section Header File]
-
-The interface and implementation are both supplied by the header file
-[@../../boost/math/octonion.hpp octonion.hpp].
-
-[endsect]
-
-[section Synopsis]
-
- namespace boost{ namespace math{
-
- template<typename T> class ``[link boost_math.octonions.template_class_octonion octonion]``;
- template<> class ``[link boost_math.octonions.octonion_specializations octonion<float>]``;
- template<> class ``[link boost_math.octonion_double octonion<double>]``;
- template<> class ``[link boost_math.octonion_long_double octonion<long double>]``;
-
- // operators
-
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_addition_operators operator +]`` (T const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_addition_operators operator +]`` (octonion<T> const & lhs, T const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_addition_operators operator +]`` (::std::complex<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_addition_operators operator +]`` (octonion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_addition_operators operator +]`` (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_addition_operators operator +]`` (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_addition_operators operator +]`` (octonion<T> const & lhs, octonion<T> const & rhs);
-
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_subtraction_operators operator -]`` (T const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_subtraction_operators operator -]`` (octonion<T> const & lhs, T const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_subtraction_operators operator -]`` (::std::complex<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_subtraction_operators operator -]`` (octonion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_subtraction_operators operator -]`` (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_subtraction_operators operator -]`` (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_subtraction_operators operator -]`` (octonion<T> const & lhs, octonion<T> const & rhs);
-
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_multiplication_operators operator *]`` (T const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_multiplication_operators operator *]`` (octonion<T> const & lhs, T const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_multiplication_operators operator *]`` (::std::complex<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_multiplication_operators operator *]`` (octonion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_multiplication_operators operator *]`` (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_multiplication_operators operator *]`` (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_multiplication_operators operator *]`` (octonion<T> const & lhs, octonion<T> const & rhs);
-
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_division_operators operator /]`` (T const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_division_operators operator /]`` (octonion<T> const & lhs, T const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_division_operators operator /]`` (::std::complex<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_division_operators operator /]`` (octonion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_division_operators operator /]`` (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_division_operators operator /]`` (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.binary_division_operators operator /]`` (octonion<T> const & lhs, octonion<T> const & rhs);
-
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.unary_plus_and_minus_operators operator +]`` (octonion<T> const & o);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_non_member_operators.unary_plus_and_minus_operators operator -]`` (octonion<T> const & o);
-
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_equality_operators operator ==]`` (T const & lhs, octonion<T> const & rhs);
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_equality_operators operator ==]`` (octonion<T> const & lhs, T const & rhs);
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_equality_operators operator ==]`` (::std::complex<T> const & lhs, octonion<T> const & rhs);
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_equality_operators operator ==]`` (octonion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_equality_operators operator ==]`` (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_equality_operators operator ==]`` (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_equality_operators operator ==]`` (octonion<T> const & lhs, octonion<T> const & rhs);
-
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_inequality_operators operator !=]`` (T const & lhs, octonion<T> const & rhs);
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_inequality_operators operator !=]`` (octonion<T> const & lhs, T const & rhs);
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_inequality_operators operator !=]`` (::std::complex<T> const & lhs, octonion<T> const & rhs);
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_inequality_operators operator !=]`` (octonion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_inequality_operators operator !=]`` (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_inequality_operators operator !=]`` (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
- template<typename T> bool ``[link boost_math.octonions.octonion_non_member_operators.binary_inequality_operators operator !=]`` (octonion<T> const & lhs, octonion<T> const & rhs);
-
- template<typename T, typename charT, class traits>
- ::std::basic_istream<charT,traits> & ``[link boost_math.octonions.octonion_non_member_operators.stream_extractor operator >>]`` (::std::basic_istream<charT,traits> & is, octonion<T> & o);
-
- template<typename T, typename charT, class traits>
- ::std::basic_ostream<charT,traits> & ``[link boost_math.octonions.octonion_non_member_operators.stream_inserter operator <<]`` (::std::basic_ostream<charT,traits> & os, octonion<T> const & o);
-
- // values
-
- template<typename T> T ``[link boost_math.octonions.octonion_value_operations.real_and_unreal real]``(octonion<T> const & o);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_value_operations.real_and_unreal unreal]``(octonion<T> const & o);
-
- template<typename T> T ``[link boost_math.octonions.octonion_value_operations.sup sup]``(octonion<T> const & o);
- template<typename T> T ``[link boost_math.octonions.octonion_value_operations.l1 l1]``(octonion<T>const & o);
- template<typename T> T ``[link boost_math.octonions.octonion_value_operations.abs abs]``(octonion<T> const & o);
- template<typename T> T ``[link boost_math.octonions.octonion_value_operations.norm norm]``(octonion<T>const & o);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonion_value_operations.conj conj]``(octonion<T> const & o);
-
- template<typename T> octonion<T> ``[link boost_math.octonions.quaternion_creation_functions spherical]``(T const & rho, T const & theta, T const & phi1, T const & phi2, T const & phi3, T const & phi4, T const & phi5, T const & phi6);
- template<typename T> octonion<T> ``[link boost_math.octonions.quaternion_creation_functions multipolar]``(T const & rho1, T const & theta1, T const & rho2, T const & theta2, T const & rho3, T const & theta3, T const & rho4, T const & theta4);
- template<typename T> octonion<T> ``[link boost_math.octonions.quaternion_creation_functions cylindrical]``(T const & r, T const & angle, T const & h1, T const & h2, T const & h3, T const & h4, T const & h5, T const & h6);
-
- // transcendentals
-
- template<typename T> octonion<T> ``[link boost_math.octonions.octonions_transcendentals.exp exp]``(octonion<T> const & o);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonions_transcendentals.cos cos]``(octonion<T> const & o);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonions_transcendentals.sin sin]``(octonion<T> const & o);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonions_transcendentals.tan tan]``(octonion<T> const & o);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonions_transcendentals.cosh cosh]``(octonion<T> const & o);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonions_transcendentals.sinh sinh]``(octonion<T> const & o);
- template<typename T> octonion<T> ``[link boost_math.octonions.octonions_transcendentals.tanh tanh]``(octonion<T> const & o);
-
- template<typename T> octonion<T> ``[link boost_math.octonions.octonions_transcendentals.pow pow]``(octonion<T> const & o, int n);
-
- } } // namespaces
-
-[endsect]
-
-[section Template Class octonion]
-
- namespace boost{ namespace math {
-
- template<typename T>
- class octonion
- {
- public:
- typedef T value_type;
-
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T(), T const & requested_e = T(), T const & requested_f = T(), T const & requested_g = T(), T const & requested_h = T());
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(::std::complex<T> const & z0, ::std::complex<T> const & z1 = ::std::complex<T>(), ::std::complex<T> const & z2 = ::std::complex<T>(), ::std::complex<T> const & z3 = ::std::complex<T>());
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion<T> const & q0, ::boost::math::quaternion<T> const & q1 = ::boost::math::quaternion<T>());
- template<typename X>
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(octonion<X> const & a_recopier);
-
- T ``[link boost_math.octonions.octonion_member_functions.real_and_unreal_parts real]``() const;
- octonion<T> ``[link boost_math.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const;
-
- T ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_1]``() const;
- T ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_2]``() const;
- T ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_3]``() const;
- T ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_4]``() const;
- T ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_5]``() const;
- T ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_6]``() const;
- T ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_7]``() const;
- T ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_8]``() const;
-
- ::std::complex<T> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const;
- ::std::complex<T> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const;
- ::std::complex<T> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const;
- ::std::complex<T> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const;
-
- ::boost::math::quaternion<T> ``[link boost_math.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const;
- ::boost::math::quaternion<T> ``[link boost_math.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const;
-
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion<T> const & a_affecter);
- template<typename X>
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion<X> const & a_affecter);
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (T const & a_affecter);
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (::std::complex<T> const & a_affecter);
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (::boost::math::quaternion<T> const & a_affecter);
-
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (T const & rhs);
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex<T> const & rhs);
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion<T> const & rhs);
- template<typename X>
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (octonion<X> const & rhs);
-
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (T const & rhs);
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex<T> const & rhs);
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion<T> const & rhs);
- template<typename X>
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (octonion<X> const & rhs);
-
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (T const & rhs);
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex<T> const & rhs);
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion<T> const & rhs);
- template<typename X>
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (octonion<X> const & rhs);
-
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (T const & rhs);
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (::std::complex<T> const & rhs);
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (::boost::math::quaternion<T> const & rhs);
- template<typename X>
- octonion<T> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (octonion<X> const & rhs);
- };
-
- } } // namespaces
-
-[endsect]
-
-[section Octonion Specializations]
-
- namespace boost{ namespace math{
-
- template<>
- class octonion<float>
- {
- public:
- typedef float value_type;
-
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(float const & requested_a = 0.0f, float const & requested_b = 0.0f, float const & requested_c = 0.0f, float const & requested_d = 0.0f, float const & requested_e = 0.0f, float const & requested_f = 0.0f, float const & requested_g = 0.0f, float const & requested_h = 0.0f);
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(::std::complex<float> const & z0, ::std::complex<float> const & z1 = ::std::complex<float>(), ::std::complex<float> const & z2 = ::std::complex<float>(), ::std::complex<float> const & z3 = ::std::complex<float>());
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion<float> const & q0, ::boost::math::quaternion<float> const & q1 = ::boost::math::quaternion<float>());
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(octonion<double> const & a_recopier);
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(octonion<long double> const & a_recopier);
-
- float ``[link boost_math.octonions.octonion_member_functions.real_and_unreal_parts real]``() const;
- octonion<float> ``[link boost_math.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const;
-
- float ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_1]``() const;
- float ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_2]``() const;
- float ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_3]``() const;
- float ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_4]``() const;
- float ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_5]``() const;
- float ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_6]``() const;
- float ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_7]``() const;
- float ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_8]``() const;
-
- ::std::complex<float> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const;
- ::std::complex<float> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const;
- ::std::complex<float> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const;
- ::std::complex<float> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const;
-
- ::boost::math::quaternion<float> ``[link boost_math.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const;
- ::boost::math::quaternion<float> ``[link boost_math.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const;
-
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion<float> const & a_affecter);
- template<typename X>
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion<X> const & a_affecter);
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (float const & a_affecter);
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (::std::complex<float> const & a_affecter);
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (::boost::math::quaternion<float> const & a_affecter);
-
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (float const & rhs);
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex<float> const & rhs);
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion<float> const & rhs);
- template<typename X>
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (octonion<X> const & rhs);
-
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (float const & rhs);
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex<float> const & rhs);
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion<float> const & rhs);
- template<typename X>
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (octonion<X> const & rhs);
-
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (float const & rhs);
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex<float> const & rhs);
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion<float> const & rhs);
- template<typename X>
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (octonion<X> const & rhs);
-
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (float const & rhs);
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (::std::complex<float> const & rhs);
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (::boost::math::quaternion<float> const & rhs);
- template<typename X>
- octonion<float> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (octonion<X> const & rhs);
- };
-
-[#boost_math.octonion_double]
-
- template<>
- class octonion<double>
- {
- public:
- typedef double value_type;
-
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(double const & requested_a = 0.0, double const & requested_b = 0.0, double const & requested_c = 0.0, double const & requested_d = 0.0, double const & requested_e = 0.0, double const & requested_f = 0.0, double const & requested_g = 0.0, double const & requested_h = 0.0);
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(::std::complex<double> const & z0, ::std::complex<double> const & z1 = ::std::complex<double>(), ::std::complex<double> const & z2 = ::std::complex<double>(), ::std::complex<double> const & z3 = ::std::complex<double>());
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion<double> const & q0, ::boost::math::quaternion<double> const & q1 = ::boost::math::quaternion<double>());
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(octonion<float> const & a_recopier);
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(octonion<long double> const & a_recopier);
-
- double ``[link boost_math.octonions.octonion_member_functions.real_and_unreal_parts real]``() const;
- octonion<double> ``[link boost_math.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const;
-
- double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_1]``() const;
- double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_2]``() const;
- double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_3]``() const;
- double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_4]``() const;
- double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_5]``() const;
- double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_6]``() const;
- double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_7]``() const;
- double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_8]``() const;
-
- ::std::complex<double> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const;
- ::std::complex<double> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const;
- ::std::complex<double> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const;
- ::std::complex<double> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const;
-
- ::boost::math::quaternion<double> ``[link boost_math.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const;
- ::boost::math::quaternion<double> ``[link boost_math.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const;
-
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion<double> const & a_affecter);
- template<typename X>
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion<X> const & a_affecter);
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (double const & a_affecter);
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (::std::complex<double> const & a_affecter);
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (::boost::math::quaternion<double> const & a_affecter);
-
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (double const & rhs);
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex<double> const & rhs);
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion<double> const & rhs);
- template<typename X>
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (octonion<X> const & rhs);
-
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (double const & rhs);
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex<double> const & rhs);
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion<double> const & rhs);
- template<typename X>
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (octonion<X> const & rhs);
-
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (double const & rhs);
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex<double> const & rhs);
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion<double> const & rhs);
- template<typename X>
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (octonion<X> const & rhs);
-
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (double const & rhs);
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (::std::complex<double> const & rhs);
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (::boost::math::quaternion<double> const & rhs);
- template<typename X>
- octonion<double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (octonion<X> const & rhs);
- };
-
-[#boost_math.octonion_long_double]
-
- template<>
- class octonion<long double>
- {
- public:
- typedef long double value_type;
-
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(long double const & requested_a = 0.0L, long double const & requested_b = 0.0L, long double const & requested_c = 0.0L, long double const & requested_d = 0.0L, long double const & requested_e = 0.0L, long double const & requested_f = 0.0L, long double const & requested_g = 0.0L, long double const & requested_h = 0.0L);
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``( ::std::complex<long double> const & z0, ::std::complex<long double> const & z1 = ::std::complex<long double>(), ::std::complex<long double> const & z2 = ::std::complex<long double>(), ::std::complex<long double> const & z3 = ::std::complex<long double>());
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``( ::boost::math::quaternion<long double> const & q0, ::boost::math::quaternion<long double> const & z1 = ::boost::math::quaternion<long double>());
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(octonion<float> const & a_recopier);
- explicit ``[link boost_math.octonions.octonion_member_functions.constructors octonion]``(octonion<double> const & a_recopier);
-
- long double ``[link boost_math.octonions.octonion_member_functions.real_and_unreal_parts real]``() const;
- octonion<long double> ``[link boost_math.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const;
-
- long double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_1]``() const;
- long double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_2]``() const;
- long double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_3]``() const;
- long double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_4]``() const;
- long double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_5]``() const;
- long double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_6]``() const;
- long double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_7]``() const;
- long double ``[link boost_math.octonions.octonion_member_functions.individual_real_components R_component_8]``() const;
-
- ::std::complex<long double> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const;
- ::std::complex<long double> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const;
- ::std::complex<long double> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const;
- ::std::complex<long double> ``[link boost_math.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const;
-
- ::boost::math::quaternion<long double> ``[link boost_math.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const;
- ::boost::math::quaternion<long double> ``[link boost_math.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const;
-
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion<long double> const & a_affecter);
- template<typename X>
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion<X> const & a_affecter);
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (long double const & a_affecter);
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (::std::complex<long double> const & a_affecter);
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.assignment_operators operator =]`` (::boost::math::quaternion<long double> const & a_affecter);
-
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (long double const & rhs);
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex<long double> const & rhs);
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion<long double> const & rhs);
- template<typename X>
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator +=]`` (octonion<X> const & rhs);
-
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (long double const & rhs);
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex<long double> const & rhs);
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion<long double> const & rhs);
- template<typename X>
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator -=]`` (octonion<X> const & rhs);
-
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (long double const & rhs);
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex<long double> const & rhs);
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion<long double> const & rhs);
- template<typename X>
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator *=]`` (octonion<X> const & rhs);
-
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (long double const & rhs);
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (::std::complex<long double> const & rhs);
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (::boost::math::quaternion<long double> const & rhs);
- template<typename X>
- octonion<long double> & ``[link boost_math.octonions.octonion_member_functions.other_member_operators operator /=]`` (octonion<X> const & rhs);
- };
-
- } } // namespaces
-
-[endsect]
-
-[section Octonion Member Typedefs]
-
-[*value_type]
-
-Template version:
-
- typedef T value_type;
-
-Float specialization version:
-
- typedef float value_type;
-
-Double specialization version:
-
- typedef double value_type;
-
-Long double specialization version:
-
- typedef long double value_type;
-
-These provide easy acces to the type the template is built upon.
-
-[endsect]
-
-[section Octonion Member Functions]
-
-[h3 Constructors]
-
-Template version:
-
- explicit octonion(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T(), T const & requested_e = T(), T const & requested_f = T(), T const & requested_g = T(), T const & requested_h = T());
- explicit octonion(::std::complex<T> const & z0, ::std::complex<T> const & z1 = ::std::complex<T>(), ::std::complex<T> const & z2 = ::std::complex<T>(), ::std::complex<T> const & z3 = ::std::complex<T>());
- explicit octonion(::boost::math::quaternion<T> const & q0, ::boost::math::quaternion<T> const & q1 = ::boost::math::quaternion<T>());
- template<typename X>
- explicit octonion(octonion<X> const & a_recopier);
-
-Float specialization version:
-
- explicit octonion(float const & requested_a = 0.0f, float const & requested_b = 0.0f, float const & requested_c = 0.0f, float const & requested_d = 0.0f, float const & requested_e = 0.0f, float const & requested_f = 0.0f, float const & requested_g = 0.0f, float const & requested_h = 0.0f);
- explicit octonion(::std::complex<float> const & z0, ::std::complex<float> const & z1 = ::std::complex<float>(), ::std::complex<float> const & z2 = ::std::complex<float>(), ::std::complex<float> const & z3 = ::std::complex<float>());
- explicit octonion(::boost::math::quaternion<float> const & q0, ::boost::math::quaternion<float> const & q1 = ::boost::math::quaternion<float>());
- explicit octonion(octonion<double> const & a_recopier);
- explicit octonion(octonion<long double> const & a_recopier);
-
-Double specialization version:
-
- explicit octonion(double const & requested_a = 0.0, double const & requested_b = 0.0, double const & requested_c = 0.0, double const & requested_d = 0.0, double const & requested_e = 0.0, double const & requested_f = 0.0, double const & requested_g = 0.0, double const & requested_h = 0.0);
- explicit octonion(::std::complex<double> const & z0, ::std::complex<double> const & z1 = ::std::complex<double>(), ::std::complex<double> const & z2 = ::std::complex<double>(), ::std::complex<double> const & z3 = ::std::complex<double>());
- explicit octonion(::boost::math::quaternion<double> const & q0, ::boost::math::quaternion<double> const & q1 = ::boost::math::quaternion<double>());
- explicit octonion(octonion<float> const & a_recopier);
- explicit octonion(octonion<long double> const & a_recopier);
-
-Long double specialization version:
-
- explicit octonion(long double const & requested_a = 0.0L, long double const & requested_b = 0.0L, long double const & requested_c = 0.0L, long double const & requested_d = 0.0L, long double const & requested_e = 0.0L, long double const & requested_f = 0.0L, long double const & requested_g = 0.0L, long double const & requested_h = 0.0L);
- explicit octonion( ::std::complex<long double> const & z0, ::std::complex<long double> const & z1 = ::std::complex<long double>(), ::std::complex<long double> const & z2 = ::std::complex<long double>(), ::std::complex<long double> const & z3 = ::std::complex<long double>());
- explicit octonion(::boost::math::quaternion<long double> const & q0, ::boost::math::quaternion<long double> const & q1 = ::boost::math::quaternion<long double>());
- explicit octonion(octonion<float> const & a_recopier);
- explicit octonion(octonion<double> const & a_recopier);
-
-A default constructor is provided for each form, which initializes each component
-to the default values for their type (i.e. zero for floating numbers).
-This constructor can also accept one to eight base type arguments.
-A constructor is also provided to build octonions from one to four complex numbers
-sharing the same base type, and another taking one or two quaternions
-sharing the same base type. The unspecialized template also sports a
-templarized copy constructor, while the specialized forms have copy
-constructors from the other two specializations, which are explicit
-when a risk of precision loss exists. For the unspecialized form,
-the base type's constructors must not throw.
-
-Destructors and untemplated copy constructors (from the same type)
-are provided by the compiler. Converting copy constructors make use
-of a templated helper function in a "detail" subnamespace.
-
-[h3 Other member functions]
-
-[h4 Real and Unreal Parts]
-
- T real() const;
- octonion<T> unreal() const;
-
-Like complex number, octonions do have a meaningful notion of "real part",
-but unlike them there is no meaningful notion of "imaginary part".
-Instead there is an "unreal part" which itself is a octonion,
-and usually nothing simpler (as opposed to the complex number case).
-These are returned by the first two functions.
-
-[h4 Individual Real Components]
-
- T R_component_1() const;
- T R_component_2() const;
- T R_component_3() const;
- T R_component_4() const;
- T R_component_5() const;
- T R_component_6() const;
- T R_component_7() const;
- T R_component_8() const;
-
-A octonion having eight real components, these are returned by
-these eight functions. Hence real and R_component_1 return the same value.
-
-[h4 Individual Complex Components]
-
- ::std::complex<T> C_component_1() const;
- ::std::complex<T> C_component_2() const;
- ::std::complex<T> C_component_3() const;
- ::std::complex<T> C_component_4() const;
-
-A octonion likewise has four complex components. Actually, octonions
-are indeed a (left) vector field over the complexes, but beware, as
-for any octonion __oct_formula we also have __oct_complex_formula
-(note the [*minus] sign in the last factor).
-What the C_component_n functions return, however, are the complexes
-which could be used to build the octonion using the constructor, and
-[*not] the components of the octonion on the basis ['[^(1, j, e', j')]].
-
-[h4 Individual Quaternion Components]
-
- ::boost::math::quaternion<T> H_component_1() const;
- ::boost::math::quaternion<T> H_component_2() const;
-
-Likewise, for any octonion __oct_formula we also have __oct_quat_formula, though there
-is no meaningful vector-space-like structure based on the quaternions.
-What the H_component_n functions return are the quaternions which
-could be used to build the octonion using the constructor.
-
-[h3 Octonion Member Operators]
-[h4 Assignment Operators]
-
- octonion<T> & operator = (octonion<T> const & a_affecter);
- template<typename X>
- octonion<T> & operator = (octonion<X> const & a_affecter);
- octonion<T> & operator = (T const & a_affecter);
- octonion<T> & operator = (::std::complex<T> const & a_affecter);
- octonion<T> & operator = (::boost::math::quaternion<T> const & a_affecter);
-
-These perform the expected assignment, with type modification if
-necessary (for instance, assigning from a base type will set the
-real part to that value, and all other components to zero).
-For the unspecialized form, the base type's assignment operators must not throw.
-
-[h4 Other Member Operators]
-
- octonion<T> & operator += (T const & rhs)
- octonion<T> & operator += (::std::complex<T> const & rhs);
- octonion<T> & operator += (::boost::math::quaternion<T> const & rhs);
- template<typename X>
- octonion<T> & operator += (octonion<X> const & rhs);
-
-These perform the mathematical operation `(*this)+rhs` and store the result in
-`*this`. The unspecialized form has exception guards, which the specialized
-forms do not, so as to insure exception safety. For the unspecialized form,
-the base type's assignment operators must not throw.
-
- octonion<T> & operator -= (T const & rhs)
- octonion<T> & operator -= (::std::complex<T> const & rhs);
- octonion<T> & operator -= (::boost::math::quaternion<T> const & rhs);
- template<typename X>
- octonion<T> & operator -= (octonion<X> const & rhs);
-
-These perform the mathematical operation `(*this)-rhs` and store the result
-in `*this`. The unspecialized form has exception guards, which the
-specialized forms do not, so as to insure exception safety.
-For the unspecialized form, the base type's assignment operators must not throw.
-
- octonion<T> & operator *= (T const & rhs)
- octonion<T> & operator *= (::std::complex<T> const & rhs);
- octonion<T> & operator *= (::boost::math::quaternion<T> const & rhs);
- template<typename X>
- octonion<T> & operator *= (octonion<X> const & rhs);
-
-These perform the mathematical operation `(*this)*rhs` in this order
-(order is important as multiplication is not commutative for octonions)
-and store the result in `*this`. The unspecialized form has exception guards,
-which the specialized forms do not, so as to insure exception safety.
-For the unspecialized form, the base type's assignment operators must
-not throw. Also, for clarity's sake, you should always group the
-factors in a multiplication by groups of two, as the multiplication is
-not even associative on the octonions (though there are of course cases
-where this does not matter, it usually does).
-
- octonion<T> & operator /= (T const & rhs)
- octonion<T> & operator /= (::std::complex<T> const & rhs);
- octonion<T> & operator /= (::boost::math::quaternion<T> const & rhs);
- template<typename X>
- octonion<T> & operator /= (octonion<X> const & rhs);
-
-These perform the mathematical operation `(*this)*inverse_of(rhs)`
-in this order (order is important as multiplication is not commutative
-for octonions) and store the result in `*this`. The unspecialized form
-has exception guards, which the specialized forms do not, so as to
-insure exception safety. For the unspecialized form, the base
-type's assignment operators must not throw. As for the multiplication,
-remember to group any two factors using parenthesis.
-
-[endsect]
-
-[section Octonion Non-Member Operators]
-
-[h4 Unary Plus and Minus Operators]
-
- template<typename T> octonion<T> operator + (octonion<T> const & o);
-
-This unary operator simply returns o.
-
- template<typename T> octonion<T> operator - (octonion<T> const & o);
-
-This unary operator returns the opposite of o.
-
-[h4 Binary Addition Operators]
-
- template<typename T> octonion<T> operator + (T const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> operator + (octonion<T> const & lhs, T const & rhs);
- template<typename T> octonion<T> operator + (::std::complex<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> operator + (octonion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> octonion<T> operator + (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> operator + (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
- template<typename T> octonion<T> operator + (octonion<T> const & lhs, octonion<T> const & rhs);
-
-These operators return `octonion<T>(lhs) += rhs`.
-
-[h4 Binary Subtraction Operators]
-
- template<typename T> octonion<T> operator - (T const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> operator - (octonion<T> const & lhs, T const & rhs);
- template<typename T> octonion<T> operator - (::std::complex<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> operator - (octonion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> octonion<T> operator - (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> operator - (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
- template<typename T> octonion<T> operator - (octonion<T> const & lhs, octonion<T> const & rhs);
-
-These operators return `octonion<T>(lhs) -= rhs`.
-
-[h4 Binary Multiplication Operators]
-
- template<typename T> octonion<T> operator * (T const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> operator * (octonion<T> const & lhs, T const & rhs);
- template<typename T> octonion<T> operator * (::std::complex<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> operator * (octonion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> octonion<T> operator * (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> operator * (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
- template<typename T> octonion<T> operator * (octonion<T> const & lhs, octonion<T> const & rhs);
-
-These operators return `octonion<T>(lhs) *= rhs`.
-
-[h4 Binary Division Operators]
-
- template<typename T> octonion<T> operator / (T const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> operator / (octonion<T> const & lhs, T const & rhs);
- template<typename T> octonion<T> operator / (::std::complex<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> operator / (octonion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> octonion<T> operator / (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
- template<typename T> octonion<T> operator / (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
- template<typename T> octonion<T> operator / (octonion<T> const & lhs, octonion<T> const & rhs);
-
-These operators return `octonion<T>(lhs) /= rhs`. It is of course still an
-error to divide by zero...
-
-[h4 Binary Equality Operators]
-
- template<typename T> bool operator == (T const & lhs, octonion<T> const & rhs);
- template<typename T> bool operator == (octonion<T> const & lhs, T const & rhs);
- template<typename T> bool operator == (::std::complex<T> const & lhs, octonion<T> const & rhs);
- template<typename T> bool operator == (octonion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> bool operator == (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
- template<typename T> bool operator == (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
- template<typename T> bool operator == (octonion<T> const & lhs, octonion<T> const & rhs);
-
-These return true if and only if the four components of `octonion<T>(lhs)`
-are equal to their counterparts in `octonion<T>(rhs)`. As with any
-floating-type entity, this is essentially meaningless.
-
-[h4 Binary Inequality Operators]
-
- template<typename T> bool operator != (T const & lhs, octonion<T> const & rhs);
- template<typename T> bool operator != (octonion<T> const & lhs, T const & rhs);
- template<typename T> bool operator != (::std::complex<T> const & lhs, octonion<T> const & rhs);
- template<typename T> bool operator != (octonion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> bool operator != (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
- template<typename T> bool operator != (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
- template<typename T> bool operator != (octonion<T> const & lhs, octonion<T> const & rhs);
-
-These return true if and only if `octonion<T>(lhs) == octonion<T>(rhs)`
-is false. As with any floating-type entity, this is essentially meaningless.
-
-[h4 Stream Extractor]
-
- template<typename T, typename charT, class traits>
- ::std::basic_istream<charT,traits> & operator >> (::std::basic_istream<charT,traits> & is, octonion<T> & o);
-
-Extracts an octonion `o`. We accept any format which seems reasonable.
-However, since this leads to a great many ambiguities, decisions were made
-to lift these. In case of doubt, stick to lists of reals.
-
-The input values must be convertible to T. If bad input is encountered,
-calls `is.setstate(ios::failbit)` (which may throw `ios::failure` (27.4.5.3)).
-
-Returns `is`.
-
-[h4 Stream Inserter]
-
- template<typename T, typename charT, class traits>
- ::std::basic_ostream<charT,traits> & operator << (::std::basic_ostream<charT,traits> & os, octonion<T> const & o);
-
-Inserts the octonion `o` onto the stream `os` as if it were implemented as follows:
-
- template<typename T, typename charT, class traits>
- ::std::basic_ostream<charT,traits> & operator << ( ::std::basic_ostream<charT,traits> & os,
- octonion<T> const & o)
- {
- ::std::basic_ostringstream<charT,traits> s;
-
- s.flags(os.flags());
- s.imbue(os.getloc());
- s.precision(os.precision());
-
- s << '(' << o.R_component_1() << ','
- << o.R_component_2() << ','
- << o.R_component_3() << ','
- << o.R_component_4() << ','
- << o.R_component_5() << ','
- << o.R_component_6() << ','
- << o.R_component_7() << ','
- << o.R_component_8() << ')';
-
- return os << s.str();
- }
-
-[endsect]
-
-[section Octonion Value Operations]
-
-[h4 Real and Unreal]
-
- template<typename T> T real(octonion<T> const & o);
- template<typename T> octonion<T> unreal(octonion<T> const & o);
-
-These return `o.real()` and `o.unreal()` respectively.
-
-[h4 conj]
-
- template<typename T> octonion<T> conj(octonion<T> const & o);
-
-This returns the conjugate of the octonion.
-
-[h4 sup]
-
- template<typename T> T sup(octonion<T> const & o);
-
-This return the sup norm (the greatest among
-`abs(o.R_component_1())...abs(o.R_component_8()))` of the octonion.
-
-[h4 l1]
-
- template<typename T> T l1(octonion<T> const & o);
-
-This return the l1 norm (`abs(o.R_component_1())+...+abs(o.R_component_8())`)
-of the octonion.
-
-[h4 abs]
-
- template<typename T> T abs(octonion<T> const & o);
-
-This return the magnitude (Euclidian norm) of the octonion.
-
-[h4 norm]
-
- template<typename T> T norm(octonion<T>const & o);
-
-This return the (Cayley) norm of the octonion. The term "norm" might
-be confusing, as most people associate it with the Euclidian norm
-(and quadratic functionals). For this version of (the mathematical
-objects known as) octonions, the Euclidian norm (also known as
-magnitude) is the square root of the Cayley norm.
-
-[endsect]
-
-[section Quaternion Creation Functions]
-
- template<typename T> octonion<T> spherical(T const & rho, T const & theta, T const & phi1, T const & phi2, T const & phi3, T const & phi4, T const & phi5, T const & phi6);
- template<typename T> octonion<T> multipolar(T const & rho1, T const & theta1, T const & rho2, T const & theta2, T const & rho3, T const & theta3, T const & rho4, T const & theta4);
- template<typename T> octonion<T> cylindrical(T const & r, T const & angle, T const & h1, T const & h2, T const & h3, T const & h4, T const & h5, T const & h6);
-
-These build octonions in a way similar to the way polar builds
-complex numbers, as there is no strict equivalent to
-polar coordinates for octonions.
-
-`spherical` is a simple transposition of `polar`, it takes as inputs a
-(positive) magnitude and a point on the hypersphere, given
-by three angles. The first of these, ['theta] has a natural range of
--pi to +pi, and the other two have natural ranges of
--pi/2 to +pi/2 (as is the case with the usual spherical
-coordinates in __R3). Due to the many symmetries and periodicities,
-nothing untoward happens if the magnitude is negative or the angles are
-outside their natural ranges. The expected degeneracies (a magnitude of
-zero ignores the angles settings...) do happen however.
-
-`cylindrical` is likewise a simple transposition of the usual
-cylindrical coordinates in __R3, which in turn is another derivative of
-planar polar coordinates. The first two inputs are the polar
-coordinates of the first __C component of the octonion. The third and
-fourth inputs are placed into the third and fourth __R components of the
-octonion, respectively.
-
-`multipolar` is yet another simple generalization of polar coordinates.
-This time, both __C components of the octonion are given in polar coordinates.
-
-In this version of our implementation of octonions, there is no
-analogue of the complex value operation arg as the situation is
-somewhat more complicated.
-
-[endsect]
-
-[section Octonions Transcendentals]
-
-There is no `log` or `sqrt` provided for octonions in this implementation,
-and `pow` is likewise restricted to integral powers of the exponent.
-There are several reasons to this: on the one hand, the equivalent of
-analytic continuation for octonions ("branch cuts") remains to be
-investigated thoroughly (by me, at any rate...), and we wish to avoid
-the nonsense introduced in the standard by exponentiations of
-complexes by complexes (which is well defined, but not in the standard...).
-Talking of nonsense, saying that `pow(0,0)` is "implementation defined" is
-just plain brain-dead...
-
-We do, however provide several transcendentals, chief among which is
-the exponential. That it allows for a "closed formula" is a result
-of the author (the existence and definition of the exponential, on the
-octonions among others, on the other hand, is a few centuries old).
-Basically, any converging power series with real coefficients which
-allows for a closed formula in __C can be transposed to __O. More
-transcendentals of this type could be added in a further revision upon
-request. It should be noted that it is these functions which force the
-dependency upon the
-[@../../boost/math/special_functions/sinc.hpp boost/math/special_functions/sinc.hpp]
-and the
-[@../../boost/math/special_functions/sinhc.hpp boost/math/special_functions/sinhc.hpp]
-headers.
-
-[h4 exp]
-
- template<typename T>
- octonion<T> exp(octonion<T> const & o);
-
-Computes the exponential of the octonion.
-
-[h4 cos]
-
- template<typename T>
- octonion<T> cos(octonion<T> const & o);
-
-Computes the cosine of the octonion
-
-[h4 sin]
-
- template<typename T>
- octonion<T> sin(octonion<T> const & o);
-
-Computes the sine of the octonion.
-
-[h4 tan]
-
- template<typename T>
- octonion<T> tan(octonion<T> const & o);
-
-Computes the tangent of the octonion.
-
-[h4 cosh]
-
- template<typename T>
- octonion<T> cosh(octonion<T> const & o);
-
-Computes the hyperbolic cosine of the octonion.
-
-[h4 sinh]
-
- template<typename T>
- octonion<T> sinh(octonion<T> const & o);
-
-Computes the hyperbolic sine of the octonion.
-
-[h4 tanh]
-
- template<typename T>
- octonion<T> tanh(octonion<T> const & o);
-
-Computes the hyperbolic tangent of the octonion.
-
-[h4 pow]
-
- template<typename T>
- octonion<T> pow(octonion<T> const & o, int n);
-
-Computes the n-th power of the octonion q.
-
-[endsect]
-
-[section Test Program]
-
-The [@../../libs/math/octonion/octonion_test.cpp octonion_test.cpp]
-test program tests octonions specialisations for float, double and long double
-([@../../libs/math/octonion/output.txt sample output]).
-
-If you define the symbol BOOST_OCTONION_TEST_VERBOSE, you will get additional
-output ([@../../libs/math/octonion/output_more.txt verbose output]); this will
-only be helpfull if you enable message output at the same time, of course
-(by uncommenting the relevant line in the test or by adding --log_level=messages
-to your command line,...). In that case, and if you are running interactively,
-you may in addition define the symbol BOOST_INTERACTIVE_TEST_INPUT_ITERATOR to
-interactively test the input operator with input of your choice from the
-standard input (instead of hard-coding it in the test).
-
-[endsect]
-
-[section Acknowledgements]
-
-The mathematical text has been typeset with
-[@http://www.nisus-soft.com/ Nisus Writer].
-Jens Maurer has helped with portability and standard adherence, and was the
-Review Manager for this library. More acknowledgements in the
-History section. Thank you to all who contributed to the discussion about this library.
-
-[endsect]
-
-[section History]
-
-* 1.5.8 - 17/12/2005: Converted documentation to Quickbook Format.
-* 1.5.7 - 25/02/2003: transitionned to the unit test framework; <boost/config.hpp> now included by the library header (rather than the test files), via <boost/math/quaternion.hpp>.
-* 1.5.6 - 15/10/2002: Gcc2.95.x and stlport on linux compatibility by Alkis Evlogimenos (alkis_at_[hidden]).
-* 1.5.5 - 27/09/2002: Microsoft VCPP 7 compatibility, by Michael Stevens (michael_at_[hidden]); requires the /Za compiler option.
-* 1.5.4 - 19/09/2002: fixed problem with multiple inclusion (in different translation units); attempt at an improved compatibility with Microsoft compilers, by Michael Stevens (michael_at_[hidden]) and Fredrik Blomqvist; other compatibility fixes.
-* 1.5.3 - 01/02/2002: bugfix and Gcc 2.95.3 compatibility by Douglas Gregor (gregod_at_[hidden]).
-* 1.5.2 - 07/07/2001: introduced namespace math.
-* 1.5.1 - 07/06/2001: (end of Boost review) now includes <boost/math/special_functions/sinc.hpp> and <boost/math/special_functions/sinhc.hpp> instead of <boost/special_functions.hpp>; corrected bug in sin (Daryle Walker); removed check for self-assignment (Gary Powel); made converting functions explicit (Gary Powel); added overflow guards for division operators and abs (Peter Schmitteckert); added sup and l1; used Vesa Karvonen's CPP metaprograming technique to simplify code.
-* 1.5.0 - 23/03/2001: boostification, inlining of all operators except input, output and pow, fixed exception safety of some members (template version).
-* 1.4.0 - 09/01/2001: added tan and tanh.
-* 1.3.1 - 08/01/2001: cosmetic fixes.
-* 1.3.0 - 12/07/2000: pow now uses Maarten Hilferink's (mhilferink_at_[hidden]) algorithm.
-* 1.2.0 - 25/05/2000: fixed the division operators and output; changed many signatures.
-* 1.1.0 - 23/05/2000: changed sinc into sinc_pi; added sin, cos, sinh, cosh.
-* 1.0.0 - 10/08/1999: first public version.
-
-[endsect]
-
-[section To Do]
-
-* Improve testing.
-* Rewrite input operatore using Spirit (creates a dependency).
-* Put in place an Expression Template mechanism (perhaps borrowing from uBlas).
-
-[endsect]
-
-[endsect]

Deleted: branches/bcbboost/libs/math/doc/math-quaternion.qbk
==============================================================================
--- branches/bcbboost/libs/math/doc/math-quaternion.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
+++ (empty file)
@@ -1,899 +0,0 @@
-
-[def __R ['[*R]]]
-[def __C ['[*C]]]
-[def __H ['[*H]]]
-[def __O ['[*O]]]
-[def __R3 ['[*'''R<superscript>3</superscript>''']]]
-[def __R4 ['[*'''R<superscript>4</superscript>''']]]
-[def __quadrulple ('''&#x03B1;,&#x03B2;,&#x03B3;,&#x03B4;''')]
-[def __quat_formula ['[^q = '''&#x03B1; + &#x03B2;i + &#x03B3;j + &#x03B4;k''']]]
-[def __quat_complex_formula ['[^q = ('''&#x03B1; + &#x03B2;i) + (&#x03B3; + &#x03B4;i)j''' ]]]
-[def __not_equal ['[^xy '''&#x2260;''' yx]]]
-
-
-[section Quaternions]
-
-[section Overview]
-
-Quaternions are a relative of complex numbers.
-
-Quaternions are in fact part of a small hierarchy of structures built
-upon the real numbers, which comprise only the set of real numbers
-(traditionally named __R), the set of complex numbers (traditionally named __C),
-the set of quaternions (traditionally named __H) and the set of octonions
-(traditionally named __O), which possess interesting mathematical properties
-(chief among which is the fact that they are ['division algebras],
-['i.e.] where the following property is true: if ['[^y]] is an element of that
-algebra and is [*not equal to zero], then ['[^yx = yx']], where ['[^x]] and ['[^x']]
-denote elements of that algebra, implies that ['[^x = x']]).
-Each member of the hierarchy is a super-set of the former.
-
-One of the most important aspects of quaternions is that they provide an
-efficient way to parameterize rotations in __R3 (the usual three-dimensional space)
-and __R4.
-
-In practical terms, a quaternion is simply a quadruple of real numbers __quadrulple,
-which we can write in the form __quat_formula, where ['[^i]] is the same object as for complex numbers,
-and ['[^j]] and ['[^k]] are distinct objects which play essentially the same kind of role as ['[^i]].
-
-An addition and a multiplication is defined on the set of quaternions,
-which generalize their real and complex counterparts. The main novelty
-here is that [*the multiplication is not commutative] (i.e. there are
-quaternions ['[^x]] and ['[^y]] such that __not_equal). A good mnemotechnical way of remembering
-things is by using the formula ['[^i*i = j*j = k*k = -1]].
-
-Quaternions (and their kin) are described in far more details in this
-other [@../../libs/math/quaternion/TQE.pdf document]
-(with [@../../libs/math/quaternion/TQE_EA.pdf errata and addenda]).
-
-Some traditional constructs, such as the exponential, carry over without
-too much change into the realms of quaternions, but other, such as taking
-a square root, do not.
-
-[endsect]
-
-[section Header File]
-
-The interface and implementation are both supplied by the header file
-[@../../boost/math/quaternion.hpp quaternion.hpp].
-
-[endsect]
-
-[section Synopsis]
-
- namespace boost{ namespace math{
-
- template<typename T> class ``[link boost_math.quaternions.template_class_quaternion quaternion]``;
- template<> class ``[link boost_math.quaternions.quaternion_specializations quaternion<float>]``;
- template<> class ``[link boost_math.quaternion_double quaternion<double>]``;
- template<> class ``[link boost_math.quaternion_long_double quaternion<long double>]``;
-
- // operators
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_addition_operators operator +]`` (T const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_addition_operators operator +]`` (quaternion<T> const & lhs, T const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_addition_operators operator +]`` (::std::complex<T> const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_addition_operators operator +]`` (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_addition_operators operator +]`` (quaternion<T> const & lhs, quaternion<T> const & rhs);
-
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_subtraction_operators operator -]`` (T const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_subtraction_operators operator -]`` (quaternion<T> const & lhs, T const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_subtraction_operators operator -]`` (::std::complex<T> const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_subtraction_operators operator -]`` (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_subtraction_operators operator -]`` (quaternion<T> const & lhs, quaternion<T> const & rhs);
-
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_multiplication_operators operator *]`` (T const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_multiplication_operators operator *]`` (quaternion<T> const & lhs, T const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_multiplication_operators operator *]`` (::std::complex<T> const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_multiplication_operators operator *]`` (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_multiplication_operators operator *]`` (quaternion<T> const & lhs, quaternion<T> const & rhs);
-
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_division_operators operator /]`` (T const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_division_operators operator /]`` (quaternion<T> const & lhs, T const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_division_operators operator /]`` (::std::complex<T> const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_division_operators operator /]`` (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.binary_division_operators operator /]`` (quaternion<T> const & lhs, quaternion<T> const & rhs);
-
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.unary_plus operator +]`` (quaternion<T> const & q);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_non_member_operators.unary_minus operator -]`` (quaternion<T> const & q);
-
- template<typename T> bool ``[link boost_math.quaternions.quaternion_non_member_operators.equality_operators operator ==]`` (T const & lhs, quaternion<T> const & rhs);
- template<typename T> bool ``[link boost_math.quaternions.quaternion_non_member_operators.equality_operators operator ==]`` (quaternion<T> const & lhs, T const & rhs);
- template<typename T> bool ``[link boost_math.quaternions.quaternion_non_member_operators.equality_operators operator ==]`` (::std::complex<T> const & lhs, quaternion<T> const & rhs);
- template<typename T> bool ``[link boost_math.quaternions.quaternion_non_member_operators.equality_operators operator ==]`` (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> bool ``[link boost_math.quaternions.quaternion_non_member_operators.equality_operators operator ==]`` (quaternion<T> const & lhs, quaternion<T> const & rhs);
-
- template<typename T> bool ``[link boost_math.quaternions.quaternion_non_member_operators.inequality_operators operator !=]`` (T const & lhs, quaternion<T> const & rhs);
- template<typename T> bool ``[link boost_math.quaternions.quaternion_non_member_operators.inequality_operators operator !=]`` (quaternion<T> const & lhs, T const & rhs);
- template<typename T> bool ``[link boost_math.quaternions.quaternion_non_member_operators.inequality_operators operator !=]`` (::std::complex<T> const & lhs, quaternion<T> const & rhs);
- template<typename T> bool ``[link boost_math.quaternions.quaternion_non_member_operators.inequality_operators operator !=]`` (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> bool ``[link boost_math.quaternions.quaternion_non_member_operators.inequality_operators operator !=]`` (quaternion<T> const & lhs, quaternion<T> const & rhs);
-
- template<typename T, typename charT, class traits>
- ::std::basic_istream<charT,traits>& ``[link boost_math.quaternions.quaternion_non_member_operators.stream_extractor operator >>]`` (::std::basic_istream<charT,traits> & is, quaternion<T> & q);
-
- template<typename T, typename charT, class traits>
- ::std::basic_ostream<charT,traits>& operator ``[link boost_math.quaternions.quaternion_non_member_operators.stream_inserter operator <<]`` (::std::basic_ostream<charT,traits> & os, quaternion<T> const & q);
-
- // values
- template<typename T> T ``[link boost_math.quaternions.quaternion_value_operations.real_and_unreal real]``(quaternion<T> const & q);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_value_operations.real_and_unreal unreal]``(quaternion<T> const & q);
-
- template<typename T> T ``[link boost_math.quaternions.quaternion_value_operations.sup sup]``(quaternion<T> const & q);
- template<typename T> T ``[link boost_math.quaternions.quaternion_value_operations.l1 l1]``(quaternion<T> const & q);
- template<typename T> T ``[link boost_math.quaternions.quaternion_value_operations.abs abs]``(quaternion<T> const & q);
- template<typename T> T ``[link boost_math.quaternions.quaternion_value_operations.norm norm]``(quaternion<T>const & q);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_value_operations.conj conj]``(quaternion<T> const & q);
-
- template<typename T> quaternion<T> ``[link boost_math.quaternions.creation_spherical spherical]``(T const & rho, T const & theta, T const & phi1, T const & phi2);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.creation_semipolar semipolar]``(T const & rho, T const & alpha, T const & theta1, T const & theta2);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.creation_multipolar multipolar]``(T const & rho1, T const & theta1, T const & rho2, T const & theta2);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.creation_cylindrospherical cylindrospherical]``(T const & t, T const & radius, T const & longitude, T const & latitude);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.creation_cylindrical cylindrical]``(T const & r, T const & angle, T const & h1, T const & h2);
-
- // transcendentals
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_transcendentals.exp exp]``(quaternion<T> const & q);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_transcendentals.cos cos]``(quaternion<T> const & q);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_transcendentals.sin sin]``(quaternion<T> const & q);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_transcendentals.tan tan]``(quaternion<T> const & q);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_transcendentals.cosh cosh]``(quaternion<T> const & q);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_transcendentals.sinh sinh]``(quaternion<T> const & q);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_transcendentals.tanh tanh]``(quaternion<T> const & q);
- template<typename T> quaternion<T> ``[link boost_math.quaternions.quaternion_transcendentals.pow pow]``(quaternion<T> const & q, int n);
-
- } // namespace math
- } // namespace boost
-
-[endsect]
-
-[section Template Class quaternion]
-
- namespace boost{ namespace math{
-
- template<typename T>
- class quaternion
- {
- public:
-
- typedef T ``[link boost_math.quaternions.quaternion_member_typedefs value_type]``;
-
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T());
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(::std::complex<T> const & z0, ::std::complex<T> const & z1 = ::std::complex<T>());
- template<typename X>
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(quaternion<X> const & a_recopier);
-
- T ``[link boost_math.quaternions.quaternion_member_functions.real_and_unreal_parts real]``() const;
- quaternion<T> ``[link boost_math.quaternions.quaternion_member_functions.real_and_unreal_parts unreal]``() const;
- T ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_1]``() const;
- T ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_2]``() const;
- T ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_3]``() const;
- T ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_4]``() const;
- ::std::complex<T> ``[link boost_math.quaternions.quaternion_member_functions.individual_complex__components C_component_1]``() const;
- ::std::complex<T> ``[link boost_math.quaternions.quaternion_member_functions.individual_complex__components C_component_2]``() const;
-
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(quaternion<T> const & a_affecter);
- template<typename X>
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(quaternion<X> const & a_affecter);
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(T const & a_affecter);
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(::std::complex<T> const & a_affecter);
-
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.addition_operators operator += ]``(T const & rhs);
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.addition_operators operator += ]``(::std::complex<T> const & rhs);
- template<typename X>
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.addition_operators operator += ]``(quaternion<X> const & rhs);
-
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.subtraction_operators operator -= ]``(T const & rhs);
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.subtraction_operators operator -= ]``(::std::complex<T> const & rhs);
- template<typename X>
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.subtraction_operators operator -= ]``(quaternion<X> const & rhs);
-
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.multiplication_operators operator *= ]``(T const & rhs);
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.multiplication_operators operator *= ]``(::std::complex<T> const & rhs);
- template<typename X>
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.multiplication_operators operator *= ]``(quaternion<X> const & rhs);
-
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.division_operators operator /= ]``(T const & rhs);
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.division_operators operator /= ]``(::std::complex<T> const & rhs);
- template<typename X>
- quaternion<T>& ``[link boost_math.quaternions.quaternion_member_functions.division_operators operator /= ]``(quaternion<X> const & rhs);
- };
-
- } // namespace math
- } // namespace boost
-
-[endsect]
-
-[section Quaternion Specializations]
-
- namespace boost{ namespace math{
-
- template<>
- class quaternion<float>
- {
- public:
- typedef float ``[link boost_math.quaternions.quaternion_member_typedefs value_type]``;
-
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(float const & requested_a = 0.0f, float const & requested_b = 0.0f, float const & requested_c = 0.0f, float const & requested_d = 0.0f);
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(::std::complex<float> const & z0, ::std::complex<float> const & z1 = ::std::complex<float>());
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(quaternion<double> const & a_recopier);
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(quaternion<long double> const & a_recopier);
-
- float ``[link boost_math.quaternions.quaternion_member_functions.real_and_unreal_parts real]``() const;
- quaternion<float> ``[link boost_math.quaternions.quaternion_member_functions.real_and_unreal_parts unreal]``() const;
- float ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_1]``() const;
- float ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_2]``() const;
- float ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_3]``() const;
- float ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_4]``() const;
- ::std::complex<float> ``[link boost_math.quaternions.quaternion_member_functions.individual_complex__components C_component_1]``() const;
- ::std::complex<float> ``[link boost_math.quaternions.quaternion_member_functions.individual_complex__components C_component_2]``() const;
-
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(quaternion<float> const & a_affecter);
- template<typename X>
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(quaternion<X> const & a_affecter);
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(float const & a_affecter);
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(::std::complex<float> const & a_affecter);
-
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.addition_operators operator += ]``(float const & rhs);
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.addition_operators operator += ]``(::std::complex<float> const & rhs);
- template<typename X>
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.addition_operators operator += ]``(quaternion<X> const & rhs);
-
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.subtraction_operators operator -= ]``(float const & rhs);
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.subtraction_operators operator -= ]``(::std::complex<float> const & rhs);
- template<typename X>
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.subtraction_operators operator -= ]``(quaternion<X> const & rhs);
-
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.multiplication_operators operator *= ]``(float const & rhs);
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.multiplication_operators operator *= ]``(::std::complex<float> const & rhs);
- template<typename X>
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.multiplication_operators operator *= ]``(quaternion<X> const & rhs);
-
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.division_operators operator /= ]``(float const & rhs);
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.division_operators operator /= ]``(::std::complex<float> const & rhs);
- template<typename X>
- quaternion<float>& ``[link boost_math.quaternions.quaternion_member_functions.division_operators operator /= ]``(quaternion<X> const & rhs);
- };
-
-[#boost_math.quaternion_double]
-
- template<>
- class quaternion<double>
- {
- public:
- typedef double ``[link boost_math.quaternions.quaternion_member_typedefs value_type]``;
-
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(double const & requested_a = 0.0, double const & requested_b = 0.0, double const & requested_c = 0.0, double const & requested_d = 0.0);
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(::std::complex<double> const & z0, ::std::complex<double> const & z1 = ::std::complex<double>());
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(quaternion<float> const & a_recopier);
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(quaternion<long double> const & a_recopier);
-
- double ``[link boost_math.quaternions.quaternion_member_functions.real_and_unreal_parts real]``() const;
- quaternion<double> ``[link boost_math.quaternions.quaternion_member_functions.real_and_unreal_parts unreal]``() const;
- double ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_1]``() const;
- double ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_2]``() const;
- double ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_3]``() const;
- double ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_4]``() const;
- ::std::complex<double> ``[link boost_math.quaternions.quaternion_member_functions.individual_complex__components C_component_1]``() const;
- ::std::complex<double> ``[link boost_math.quaternions.quaternion_member_functions.individual_complex__components C_component_2]``() const;
-
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(quaternion<double> const & a_affecter);
- template<typename X>
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(quaternion<X> const & a_affecter);
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(double const & a_affecter);
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(::std::complex<double> const & a_affecter);
-
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.addition_operators operator += ]``(double const & rhs);
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.addition_operators operator += ]``(::std::complex<double> const & rhs);
- template<typename X>
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.addition_operators operator += ]``(quaternion<X> const & rhs);
-
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.subtraction_operators operator -= ]``(double const & rhs);
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.subtraction_operators operator -= ]``(::std::complex<double> const & rhs);
- template<typename X>
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.subtraction_operators operator -= ]``(quaternion<X> const & rhs);
-
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.multiplication_operators operator *= ]``(double const & rhs);
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.multiplication_operators operator *= ]``(::std::complex<double> const & rhs);
- template<typename X>
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.multiplication_operators operator *= ]``(quaternion<X> const & rhs);
-
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.division_operators operator /= ]``(double const & rhs);
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.division_operators operator /= ]``(::std::complex<double> const & rhs);
- template<typename X>
- quaternion<double>& ``[link boost_math.quaternions.quaternion_member_functions.division_operators operator /= ]``(quaternion<X> const & rhs);
- };
-
-[#boost_math.quaternion_long_double]
-
- template<>
- class quaternion<long double>
- {
- public:
- typedef long double ``[link boost_math.quaternions.quaternion_member_typedefs value_type]``;
-
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(long double const & requested_a = 0.0L, long double const & requested_b = 0.0L, long double const & requested_c = 0.0L, long double const & requested_d = 0.0L);
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(::std::complex<long double> const & z0, ::std::complex<long double> const & z1 = ::std::complex<long double>());
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(quaternion<float> const & a_recopier);
- explicit ``[link boost_math.quaternions.quaternion_member_functions.constructors quaternion]``(quaternion<double> const & a_recopier);
-
- long double ``[link boost_math.quaternions.quaternion_member_functions.real_and_unreal_parts real]``() const;
- quaternion<long double> ``[link boost_math.quaternions.quaternion_member_functions.real_and_unreal_parts unreal]``() const;
- long double ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_1]``() const;
- long double ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_2]``() const;
- long double ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_3]``() const;
- long double ``[link boost_math.quaternions.quaternion_member_functions.individual_real_components R_component_4]``() const;
- ::std::complex<long double> ``[link boost_math.quaternions.quaternion_member_functions.individual_complex__components C_component_1]``() const;
- ::std::complex<long double> ``[link boost_math.quaternions.quaternion_member_functions.individual_complex__components C_component_2]``() const;
-
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(quaternion<long double> const & a_affecter);
- template<typename X>
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(quaternion<X> const & a_affecter);
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(long double const & a_affecter);
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.assignment_operators operator = ]``(::std::complex<long double> const & a_affecter);
-
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.addition_operators operator += ]``(long double const & rhs);
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.addition_operators operator += ]``(::std::complex<long double> const & rhs);
- template<typename X>
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.addition_operators operator += ]``(quaternion<X> const & rhs);
-
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.subtraction_operators operator -= ]``(long double const & rhs);
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.subtraction_operators operator -= ]``(::std::complex<long double> const & rhs);
- template<typename X>
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.subtraction_operators operator -= ]``(quaternion<X> const & rhs);
-
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.multiplication_operators operator *= ]``(long double const & rhs);
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.multiplication_operators operator *= ]``(::std::complex<long double> const & rhs);
- template<typename X>
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.multiplication_operators operator *= ]``(quaternion<X> const & rhs);
-
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.division_operators operator /= ]``(long double const & rhs);
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.division_operators operator /= ]``(::std::complex<long double> const & rhs);
- template<typename X>
- quaternion<long double>& ``[link boost_math.quaternions.quaternion_member_functions.division_operators operator /= ]``(quaternion<X> const & rhs);
- };
-
- } // namespace math
- } // namespace boost
-
-[endsect]
-
-[section Quaternion Member Typedefs]
-
-[*value_type]
-
-Template version:
-
- typedef T value_type;
-
-Float specialization version:
-
- typedef float value_type;
-
-Double specialization version:
-
- typedef double value_type;
-
-Long double specialization version:
-
- typedef long double value_type;
-
-These provide easy acces to the type the template is built upon.
-
-[endsect]
-
-[section Quaternion Member Functions]
-[h3 Constructors]
-
-Template version:
-
- explicit quaternion(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T());
- explicit quaternion(::std::complex<T> const & z0, ::std::complex<T> const & z1 = ::std::complex<T>());
- template<typename X>
- explicit quaternion(quaternion<X> const & a_recopier);
-
-Float specialization version:
-
- explicit quaternion(float const & requested_a = 0.0f, float const & requested_b = 0.0f, float const & requested_c = 0.0f, float const & requested_d = 0.0f);
- explicit quaternion(::std::complex<float> const & z0,::std::complex<float> const & z1 = ::std::complex<float>());
- explicit quaternion(quaternion<double> const & a_recopier);
- explicit quaternion(quaternion<long double> const & a_recopier);
-
-Double specialization version:
-
- explicit quaternion(double const & requested_a = 0.0, double const & requested_b = 0.0, double const & requested_c = 0.0, double const & requested_d = 0.0);
- explicit quaternion(::std::complex<double> const & z0, ::std::complex<double> const & z1 = ::std::complex<double>());
- explicit quaternion(quaternion<float> const & a_recopier);
- explicit quaternion(quaternion<long double> const & a_recopier);
-
-Long double specialization version:
-
- explicit quaternion(long double const & requested_a = 0.0L, long double const & requested_b = 0.0L, long double const & requested_c = 0.0L, long double const & requested_d = 0.0L);
- explicit quaternion( ::std::complex<long double> const & z0, ::std::complex<long double> const & z1 = ::std::complex<long double>());
- explicit quaternion(quaternion<float> const & a_recopier);
- explicit quaternion(quaternion<double> const & a_recopier);
-
-A default constructor is provided for each form, which initializes
-each component to the default values for their type
-(i.e. zero for floating numbers). This constructor can also accept
-one to four base type arguments. A constructor is also provided to
-build quaternions from one or two complex numbers sharing the same
-base type. The unspecialized template also sports a templarized copy
-constructor, while the specialized forms have copy constructors
-from the other two specializations, which are explicit when a risk of
-precision loss exists. For the unspecialized form, the base type's
-constructors must not throw.
-
-Destructors and untemplated copy constructors (from the same type) are
-provided by the compiler. Converting copy constructors make use of a
-templated helper function in a "detail" subnamespace.
-
-[h3 Other member functions]
-[h4 Real and Unreal Parts]
-
- T real() const;
- quaternion<T> unreal() const;
-
-Like complex number, quaternions do have a meaningful notion of "real part",
-but unlike them there is no meaningful notion of "imaginary part".
-Instead there is an "unreal part" which itself is a quaternion,
-and usually nothing simpler (as opposed to the complex number case).
-These are returned by the first two functions.
-
-[h4 Individual Real Components]
-
- T R_component_1() const;
- T R_component_2() const;
- T R_component_3() const;
- T R_component_4() const;
-
-A quaternion having four real components, these are returned by these four
-functions. Hence real and R_component_1 return the same value.
-
-[h4 Individual Complex Components]
-
- ::std::complex<T> C_component_1() const;
- ::std::complex<T> C_component_2() const;
-
-A quaternion likewise has two complex components, and as we have seen above,
-for any quaternion __quat_formula we also have __quat_complex_formula. These functions return them.
-The real part of `q.C_component_1()` is the same as `q.real()`.
-
-[h3 Quaternion Member Operators]
-[h4 Assignment Operators]
-
- quaternion<T>& operator = (quaternion<T> const & a_affecter);
- template<typename X>
- quaternion<T>& operator = (quaternion<X> const& a_affecter);
- quaternion<T>& operator = (T const& a_affecter);
- quaternion<T>& operator = (::std::complex<T> const& a_affecter);
-
-These perform the expected assignment, with type modification if necessary
-(for instance, assigning from a base type will set the real part to that
-value, and all other components to zero). For the unspecialized form,
-the base type's assignment operators must not throw.
-
-[h4 Addition Operators]
-
- quaternion<T>& operator += (T const & rhs)
- quaternion<T>& operator += (::std::complex<T> const & rhs);
- template<typename X>
- quaternion<T>& operator += (quaternion<X> const & rhs);
-
-These perform the mathematical operation `(*this)+rhs` and store the result in
-`*this`. The unspecialized form has exception guards, which the specialized
-forms do not, so as to insure exception safety. For the unspecialized form,
-the base type's assignment operators must not throw.
-
-[h4 Subtraction Operators]
-
- quaternion<T>& operator -= (T const & rhs)
- quaternion<T>& operator -= (::std::complex<T> const & rhs);
- template<typename X>
- quaternion<T>& operator -= (quaternion<X> const & rhs);
-
-These perform the mathematical operation `(*this)-rhs` and store the result
-in `*this`. The unspecialized form has exception guards, which the
-specialized forms do not, so as to insure exception safety.
-For the unspecialized form, the base type's assignment operators
-must not throw.
-
-[h4 Multiplication Operators]
-
- quaternion<T>& operator *= (T const & rhs)
- quaternion<T>& operator *= (::std::complex<T> const & rhs);
- template<typename X>
- quaternion<T>& operator *= (quaternion<X> const & rhs);
-
-These perform the mathematical operation `(*this)*rhs` [*in this order]
-(order is important as multiplication is not commutative for quaternions)
-and store the result in `*this`. The unspecialized form has exception guards,
-which the specialized forms do not, so as to insure exception safety.
-For the unspecialized form, the base type's assignment operators must not throw.
-
-[h4 Division Operators]
-
- quaternion<T>& operator /= (T const & rhs)
- quaternion<T>& operator /= (::std::complex<T> const & rhs);
- template<typename X>
- quaternion<T>& operator /= (quaternion<X> const & rhs);
-
-These perform the mathematical operation `(*this)*inverse_of(rhs)` [*in this
-order] (order is important as multiplication is not commutative for quaternions)
-and store the result in `*this`. The unspecialized form has exception guards,
-which the specialized forms do not, so as to insure exception safety.
-For the unspecialized form, the base type's assignment operators must not throw.
-
-[endsect]
-[section Quaternion Non-Member Operators]
-
-[h4 Unary Plus]
-
- template<typename T>
- quaternion<T> operator + (quaternion<T> const & q);
-
-This unary operator simply returns q.
-
-[h4 Unary Minus]
-
- template<typename T>
- quaternion<T> operator - (quaternion<T> const & q);
-
-This unary operator returns the opposite of q.
-
-[h4 Binary Addition Operators]
-
- template<typename T> quaternion<T> operator + (T const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> operator + (quaternion<T> const & lhs, T const & rhs);
- template<typename T> quaternion<T> operator + (::std::complex<T> const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> operator + (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> quaternion<T> operator + (quaternion<T> const & lhs, quaternion<T> const & rhs);
-
-These operators return `quaternion<T>(lhs) += rhs`.
-
-[h4 Binary Subtraction Operators]
-
- template<typename T> quaternion<T> operator - (T const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> operator - (quaternion<T> const & lhs, T const & rhs);
- template<typename T> quaternion<T> operator - (::std::complex<T> const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> operator - (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> quaternion<T> operator - (quaternion<T> const & lhs, quaternion<T> const & rhs);
-
-These operators return `quaternion<T>(lhs) -= rhs`.
-
-[h4 Binary Multiplication Operators]
-
- template<typename T> quaternion<T> operator * (T const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> operator * (quaternion<T> const & lhs, T const & rhs);
- template<typename T> quaternion<T> operator * (::std::complex<T> const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> operator * (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> quaternion<T> operator * (quaternion<T> const & lhs, quaternion<T> const & rhs);
-
-These operators return `quaternion<T>(lhs) *= rhs`.
-
-[h4 Binary Division Operators]
-
- template<typename T> quaternion<T> operator / (T const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> operator / (quaternion<T> const & lhs, T const & rhs);
- template<typename T> quaternion<T> operator / (::std::complex<T> const & lhs, quaternion<T> const & rhs);
- template<typename T> quaternion<T> operator / (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> quaternion<T> operator / (quaternion<T> const & lhs, quaternion<T> const & rhs);
-
-These operators return `quaternion<T>(lhs) /= rhs`. It is of course still an
-error to divide by zero...
-
-[h4 Equality Operators]
-
- template<typename T> bool operator == (T const & lhs, quaternion<T> const & rhs);
- template<typename T> bool operator == (quaternion<T> const & lhs, T const & rhs);
- template<typename T> bool operator == (::std::complex<T> const & lhs, quaternion<T> const & rhs);
- template<typename T> bool operator == (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> bool operator == (quaternion<T> const & lhs, quaternion<T> const & rhs);
-
-These return true if and only if the four components of `quaternion<T>(lhs)`
-are equal to their counterparts in `quaternion<T>(rhs)`. As with any
-floating-type entity, this is essentially meaningless.
-
-[h4 Inequality Operators]
-
- template<typename T> bool operator != (T const & lhs, quaternion<T> const & rhs);
- template<typename T> bool operator != (quaternion<T> const & lhs, T const & rhs);
- template<typename T> bool operator != (::std::complex<T> const & lhs, quaternion<T> const & rhs);
- template<typename T> bool operator != (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
- template<typename T> bool operator != (quaternion<T> const & lhs, quaternion<T> const & rhs);
-
-These return true if and only if `quaternion<T>(lhs) == quaternion<T>(rhs)` is
-false. As with any floating-type entity, this is essentially meaningless.
-
-[h4 Stream Extractor]
-
- template<typename T, typename charT, class traits>
- ::std::basic_istream<charT,traits>& operator >> (::std::basic_istream<charT,traits> & is, quaternion<T> & q);
-
-Extracts a quaternion q of one of the following forms
-(with a, b, c and d of type `T`):
-
-[^a (a), (a,b), (a,b,c), (a,b,c,d) (a,(c)), (a,(c,d)), ((a)), ((a),c), ((a),(c)), ((a),(c,d)), ((a,b)), ((a,b),c), ((a,b),(c)), ((a,b),(c,d))]
-
-The input values must be convertible to `T`. If bad input is encountered,
-calls `is.setstate(ios::failbit)` (which may throw ios::failure (27.4.5.3)).
-
-[*Returns:] `is`.
-
-The rationale for the list of accepted formats is that either we have a
-list of up to four reals, or else we have a couple of complex numbers,
-and in that case if it formated as a proper complex number, then it should
-be accepted. Thus potential ambiguities are lifted (for instance (a,b) is
-(a,b,0,0) and not (a,0,b,0), i.e. it is parsed as a list of two real numbers
-and not two complex numbers which happen to have imaginary parts equal to zero).
-
-[h4 Stream Inserter]
-
- template<typename T, typename charT, class traits>
- ::std::basic_ostream<charT,traits>& operator << (::std::basic_ostream<charT,traits> & os, quaternion<T> const & q);
-
-Inserts the quaternion q onto the stream `os` as if it were implemented as follows:
-
- template<typename T, typename charT, class traits>
- ::std::basic_ostream<charT,traits>& operator << (
- ::std::basic_ostream<charT,traits> & os,
- quaternion<T> const & q)
- {
- ::std::basic_ostringstream<charT,traits> s;
-
- s.flags(os.flags());
- s.imbue(os.getloc());
- s.precision(os.precision());
-
- s << '(' << q.R_component_1() << ','
- << q.R_component_2() << ','
- << q.R_component_3() << ','
- << q.R_component_4() << ')';
-
- return os << s.str();
- }
-
-[endsect]
-
-[section Quaternion Value Operations]
-
-[h4 real and unreal]
-
- template<typename T> T real(quaternion<T> const & q);
- template<typename T> quaternion<T> unreal(quaternion<T> const & q);
-
-These return `q.real()` and `q.unreal()` respectively.
-
-[h4 conj]
-
- template<typename T> quaternion<T> conj(quaternion<T> const & q);
-
-This returns the conjugate of the quaternion.
-
-[h4 sup]
-
-template<typename T> T sup(quaternion<T> const & q);
-
-This return the sup norm (the greatest among
-`abs(q.R_component_1())...abs(q.R_component_4()))` of the quaternion.
-
-[h4 l1]
-
- template<typename T> T l1(quaternion<T> const & q);
-
-This return the l1 norm `(abs(q.R_component_1())+...+abs(q.R_component_4()))`
-of the quaternion.
-
-[h4 abs]
-
- template<typename T> T abs(quaternion<T> const & q);
-
-This return the magnitude (Euclidian norm) of the quaternion.
-
-[h4 norm]
-
- template<typename T> T norm(quaternion<T>const & q);
-
-This return the (Cayley) norm of the quaternion.
-The term "norm" might be confusing, as most people associate it with the
-Euclidian norm (and quadratic functionals). For this version of
-(the mathematical objects known as) quaternions, the Euclidian norm
-(also known as magnitude) is the square root of the Cayley norm.
-
-[endsect]
-
-[section Quaternion Creation Functions]
-
- template<typename T> quaternion<T> spherical(T const & rho, T const & theta, T const & phi1, T const & phi2);
- template<typename T> quaternion<T> semipolar(T const & rho, T const & alpha, T const & theta1, T const & theta2);
- template<typename T> quaternion<T> multipolar(T const & rho1, T const & theta1, T const & rho2, T const & theta2);
- template<typename T> quaternion<T> cylindrospherical(T const & t, T const & radius, T const & longitude, T const & latitude);
- template<typename T> quaternion<T> cylindrical(T const & r, T const & angle, T const & h1, T const & h2);
-
-These build quaternions in a way similar to the way polar builds complex
-numbers, as there is no strict equivalent to polar coordinates for quaternions.
-
-[#boost_math.quaternions.creation_spherical] `spherical` is a simple transposition of `polar`, it takes as inputs
-a (positive) magnitude and a point on the hypersphere, given by three angles.
-The first of these, `theta` has a natural range of `-pi` to `+pi`, and the other
-two have natural ranges of `-pi/2` to `+pi/2` (as is the case with the usual
-spherical coordinates in __R3). Due to the many symmetries and periodicities,
-nothing untoward happens if the magnitude is negative or the angles are
-outside their natural ranges. The expected degeneracies (a magnitude of
-zero ignores the angles settings...) do happen however.
-
-[#boost_math.quaternions.creation_cylindrical] `cylindrical` is likewise a simple transposition of the usual
-cylindrical coordinates in __R3, which in turn is another derivative of
-planar polar coordinates. The first two inputs are the polar coordinates of
-the first __C component of the quaternion. The third and fourth inputs
-are placed into the third and fourth __R components of the quaternion,
-respectively.
-
-[#boost_math.quaternions.creation_multipolar] `multipolar` is yet another simple generalization of polar coordinates.
-This time, both __C components of the quaternion are given in polar coordinates.
-
-[#boost_math.quaternions.creation_cylindrospherical] `cylindrospherical` is specific to quaternions. It is often interesting to
-consider __H as the cartesian product of __R by __R3 (the quaternionic
-multiplication as then a special form, as given here). This function
-therefore builds a quaternion from this representation, with the __R3
-component given in usual __R3 spherical coordinates.
-
-[#boost_math.quaternions.creation_semipolar] `semipolar` is another generator which is specific to quaternions.
-It takes as a first input the magnitude of the quaternion, as a
-second input an angle in the range `0` to `+pi/2` such that magnitudes
-of the first two __C components of the quaternion are the product of the
-first input and the sine and cosine of this angle, respectively, and finally
-as third and fourth inputs angles in the range `-pi/2` to `+pi/2` which
-represent the arguments of the first and second __C components of
-the quaternion, respectively. As usual, nothing untoward happens if
-what should be magnitudes are negative numbers or angles are out of their
-natural ranges, as symmetries and periodicities kick in.
-
-In this version of our implementation of quaternions, there is no
-analogue of the complex value operation `arg` as the situation is
-somewhat more complicated. Unit quaternions are linked both to
-rotations in __R3 and in __R4, and the correspondences are not too complicated,
-but there is currently a lack of standard (de facto or de jure) matrix
-library with which the conversions could work. This should be remedied in
-a further revision. In the mean time, an example of how this could be
-done is presented here for
-[@../../libs/math/quaternion/HSO3.hpp __R3], and here for
-[@../../libs/math/quaternion/HSO4.hpp __R4]
-([@../../libs/math/quaternion/HSO3SO4.cpp example test file]).
-
-[endsect]
-
-[section Quaternion Transcendentals]
-
-There is no `log` or `sqrt` provided for quaternions in this implementation,
-and `pow` is likewise restricted to integral powers of the exponent.
-There are several reasons to this: on the one hand, the equivalent of
-analytic continuation for quaternions ("branch cuts") remains to be
-investigated thoroughly (by me, at any rate...), and we wish to avoid the
-nonsense introduced in the standard by exponentiations of complexes by
-complexes (which is well defined, but not in the standard...).
-Talking of nonsense, saying that `pow(0,0)` is "implementation defined" is just
-plain brain-dead...
-
-We do, however provide several transcendentals, chief among which is the
-exponential. This author claims the complete proof of the "closed formula"
-as his own, as well as its independant invention (there are claims to prior
-invention of the formula, such as one by Professor Shoemake, and it is
-possible that the formula had been known a couple of centuries back, but in
-absence of bibliographical reference, the matter is pending, awaiting further
-investigation; on the other hand, the definition and existence of the
-exponential on the quaternions, is of course a fact known for a very long time).
-Basically, any converging power series with real coefficients which allows for a
-closed formula in __C can be transposed to __H. More transcendentals of this
-type could be added in a further revision upon request. It should be
-noted that it is these functions which force the dependency upon the
-[@../../boost/math/special_functions/sinc.hpp boost/math/special_functions/sinc.hpp] and the
-[@../../boost/math/special_functions/sinhc.hpp boost/math/special_functions/sinhc.hpp] headers.
-
-[h4 exp]
-
- template<typename T> quaternion<T> exp(quaternion<T> const & q);
-
-Computes the exponential of the quaternion.
-
-[h4 cos]
-
- template<typename T> quaternion<T> cos(quaternion<T> const & q);
-
-Computes the cosine of the quaternion
-
-[h4 sin]
-
- template<typename T> quaternion<T> sin(quaternion<T> const & q);
-
-Computes the sine of the quaternion.
-
-[h4 tan]
-
- template<typename T> quaternion<T> tan(quaternion<T> const & q);
-
-Computes the tangent of the quaternion.
-
-[h4 cosh]
-
- template<typename T> quaternion<T> cosh(quaternion<T> const & q);
-
-Computes the hyperbolic cosine of the quaternion.
-
-[h4 sinh]
-
- template<typename T> quaternion<T> sinh(quaternion<T> const & q);
-
-Computes the hyperbolic sine of the quaternion.
-
-[h4 tanh]
-
- template<typename T> quaternion<T> tanh(quaternion<T> const & q);
-
-Computes the hyperbolic tangent of the quaternion.
-
-[h4 pow]
-
- template<typename T> quaternion<T> pow(quaternion<T> const & q, int n);
-
-Computes the n-th power of the quaternion q.
-
-[endsect]
-
-[section Test Program]
-
-The [@../../libs/math/quaternion/quaternion_test.cpp quaternion_test.cpp]
-test program tests quaternions specializations for float, double and long double
-([@../../libs/math/quaternion/output.txt sample output], with message output
-enabled).
-
-If you define the symbol BOOST_QUATERNION_TEST_VERBOSE, you will get
-additional output ([@../../libs/math/quaternion/output_more.txt verbose output]);
-this will only be helpfull if you enable message output at the same time,
-of course (by uncommenting the relevant line in the test or by adding
-[^--log_level=messages] to your command line,...). In that case, and if you
-are running interactively, you may in addition define the symbol
-BOOST_INTERACTIVE_TEST_INPUT_ITERATOR to interactively test the input
-operator with input of your choice from the standard input
-(instead of hard-coding it in the test).
-
-[endsect]
-
-[section Acknowledgements]
-
-The mathematical text has been typeset with
-[@http://www.nisus-soft.com/ Nisus Writer]. Jens Maurer has helped with
-portability and standard adherence, and was the Review Manager
-for this library. More acknowledgements in the History section.
-Thank you to all who contributed to the discution about this library.
-
-[endsect]
-
-[section History]
-
-* 1.5.8 - 17/12/2005: Converted documentation to Quickbook Format.
-* 1.5.7 - 24/02/2003: transitionned to the unit test framework; <boost/config.hpp> now included by the library header (rather than the test files).
-* 1.5.6 - 15/10/2002: Gcc2.95.x and stlport on linux compatibility by Alkis Evlogimenos (alkis_at_[hidden]).
-* 1.5.5 - 27/09/2002: Microsoft VCPP 7 compatibility, by Michael Stevens (michael_at_[hidden]); requires the /Za compiler option.
-* 1.5.4 - 19/09/2002: fixed problem with multiple inclusion (in different translation units); attempt at an improved compatibility with Microsoft compilers, by Michael Stevens (michael_at_[hidden]) and Fredrik Blomqvist; other compatibility fixes.
-* 1.5.3 - 01/02/2002: bugfix and Gcc 2.95.3 compatibility by Douglas Gregor (gregod_at_[hidden]).
-* 1.5.2 - 07/07/2001: introduced namespace math.
-* 1.5.1 - 07/06/2001: (end of Boost review) now includes <boost/math/special_functions/sinc.hpp> and <boost/math/special_functions/sinhc.hpp> instead of <boost/special_functions.hpp>; corrected bug in sin (Daryle Walker); removed check for self-assignment (Gary Powel); made converting functions explicit (Gary Powel); added overflow guards for division operators and abs (Peter Schmitteckert); added sup and l1; used Vesa Karvonen's CPP metaprograming technique to simplify code.
-* 1.5.0 - 26/03/2001: boostification, inlining of all operators except input, output and pow, fixed exception safety of some members (template version) and output operator, added spherical, semipolar, multipolar, cylindrospherical and cylindrical.
-* 1.4.0 - 09/01/2001: added tan and tanh.
-* 1.3.1 - 08/01/2001: cosmetic fixes.
-* 1.3.0 - 12/07/2000: pow now uses Maarten Hilferink's (mhilferink_at_[hidden]) algorithm.
-* 1.2.0 - 25/05/2000: fixed the division operators and output; changed many signatures.
-* 1.1.0 - 23/05/2000: changed sinc into sinc_pi; added sin, cos, sinh, cosh.
-* 1.0.0 - 10/08/1999: first public version.
-
-[endsect]
-[section To Do]
-
-* Improve testing.
-* Rewrite input operatore using Spirit (creates a dependency).
-* Put in place an Expression Template mechanism (perhaps borrowing from uBlas).
-* Use uBlas for the link with rotations (and move from the
-[@../../libs/math/quaternion/HSO3SO4.cpp example]
-implementation to an efficient one).
-
-[endsect]
-[endsect]

Deleted: branches/bcbboost/libs/math/doc/math-sf.qbk
==============================================================================
--- branches/bcbboost/libs/math/doc/math-sf.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
+++ (empty file)
@@ -1,314 +0,0 @@
-
-[def __asinh [link boost_math.math_special_functions.asinh asinh]]
-[def __acosh [link boost_math.math_special_functions.acosh acosh]]
-[def __atanh [link boost_math.math_special_functions.atanh atanh]]
-[def __sinc_pi [link boost_math.math_special_functions.sinc_pi sinc_pi]]
-[def __sinhc_pi [link boost_math.math_special_functions.sinhc_pi sinhc_pi]]
-
-[def __log1p [link boost_math.math_special_functions.log1p log1p]]
-[def __expm1 [link boost_math.math_special_functions.expm1 expm1]]
-[def __hypot [link boost_math.math_special_functions.hypot hypot]]
-
-[def __form1 [^\[0;+'''&#x221E;'''\[]]
-[def __form2 [^\]-'''&#x221E;''';+1\[]]
-[def __form3 [^\]-'''&#x221E;''';-1\[]]
-[def __form4 [^\]+1;+'''&#x221E;'''\[]]
-[def __form5 `[^\[-1;-1+'''&#x03B5;'''\[]]
-[def __form6 '''&#x03B5;''']
-[def __form7 [^\]+1-'''&#x03B5;''';+1\]]]
-
-[def __effects [*Effects: ]]
-[def __formula [*Formula: ]]
-[def __exm1 '''<code>e<superscript>x</superscript> - 1</code>''']
-[def __ex '''<code>e<superscript>x</superscript></code>''']
-[def __te '''2&#x03B5;''']
-
-
-[section Math Special Functions]
-
-[section Overview]
-
-The Special Functions library currently provides eight templated special functions,
-in namespace boost. Two of these (__sinc_pi and __sinhc_pi) are needed by our
-implementation of quaternions and octonions.
-
-The functions __acosh, __asinh and __atanh are entirely classical,
-the function __sinc_pi sees heavy use in signal processing tasks,
-and the function __sinhc_pi is an ad'hoc function whose naming is modelled on
-__sinc_pi and hyperbolic functions.
-
-The functions __log1p, __expm1 and __hypot are all part of the C99 standard
-but not yet C++. Two of these (__log1p and __hypot) were needed for the
-[link boost_math.inverse_complex complex number inverse trigonometric functions].
-
-The functions implemented here can throw standard exceptions, but no
-exception specification has been made.
-
-[endsect]
-
-[section Header Files]
-
-The interface and implementation for each function (or forms of a function)
-are both supplied by one header file:
-
-* [@../../boost/math/special_functions/acosh.hpp acosh.hpp]
-* [@../../boost/math/special_functions/asinh.hpp asinh.hpp]
-* [@../../boost/math/special_functions/atanh.hpp atanh.hpp]
-* [@../../boost/math/special_functions/expm1.hpp expm1.hpp]
-* [@../../boost/math/special_functions/hypot.hpp hypot.hpp]
-* [@../../boost/math/special_functions/log1p.hpp log1p.hpp]
-* [@../../boost/math/special_functions/sinc.hpp sinc.hpp]
-* [@../../boost/math/special_functions/sinhc.hpp sinhc.hpp]
-
-[endsect]
-
-[section Synopsis]
-
- namespace boost{ namespace math{
-
- template<typename T>
- T __acosh(const T x);
-
- template<typename T>
- T __asinh(const T x);
-
- template<typename T>
- T __atanh(const T x);
-
- template<typename T>
- T __expm1(const T x);
-
- template<typename T>
- T __hypot(const T x);
-
- template<typename T>
- T __log1p(const T x);
-
- template<typename T>
- T __sinc_pi(const T x);
-
- template<typename T, template<typename> class U>
- U<T> __sinc_pi(const U<T> x);
-
- template<typename T>
- T __sinhc_pi(const T x);
-
- template<typename T, template<typename> class U>
- U<T> __sinhc_pi(const U<T> x);
-
- }
- }
-
-[endsect]
-
-[section acosh]
-
- template<typename T>
- T acosh(const T x);
-
-Computes the reciprocal of (the restriction to the range of __form1)
-[link boost_math.background_information_and_white_papers.the_inverse_hyperbolic_functions
-the hyperbolic cosine function], at x. Values returned are positive. Generalised
-Taylor series are used near 1 and Laurent series are used near the
-infinity to ensure accuracy.
-
-If x is in the range __form2 a quiet NaN is returned (if the system allows,
-otherwise a `domain_error` exception is generated).
-
-[endsect]
-
-[section asinh]
-
- template<typename T>
- T asinh(const T x);
-
-Computes the reciprocal of
-[link boost_math.background_information_and_white_papers.the_inverse_hyperbolic_functions
-the hyperbolic sine function].
-Taylor series are used at the origin and Laurent series are used near the
-infinity to ensure accuracy.
-
-[endsect]
-
-[section atanh]
-
- template<typename T>
- T atanh(const T x);
-
-Computes the reciprocal of
-[link boost_math.background_information_and_white_papers.the_inverse_hyperbolic_functions
-the hyperbolic tangent function], at x.
-Taylor series are used at the origin to ensure accuracy.
-
-If x is in the range
-__form3
-or in the range
-__form4
-a quiet NaN is returned
-(if the system allows, otherwise a `domain_error` exception is generated).
-
-If x is in the range
-__form5,
-minus infinity is returned
-(if the system allows, otherwise an `out_of_range` exception
-is generated), with
-__form6
-denoting numeric_limits<T>::epsilon().
-
-If x is in the range
-__form7,
-plus infinity is returned (if the system allows,
-otherwise an `out_of_range` exception is generated), with
-__form6
-denoting
-numeric_limits<T>::epsilon().
-
-[endsect]
-
-[section:expm1 expm1]
-
- template <class T>
- T expm1(T t);
-
-__effects returns __exm1.
-
-For small x, then __ex is very close to 1, as a result calculating __exm1 results
-in catastrophic cancellation errors when x is small. `expm1` calculates __exm1 using
-a series expansion when x is small (giving an accuracy of less than __te).
-
-Finally when BOOST_HAS_EXPM1 is defined then the `float/double/long double`
-specializations of this template simply forward to the platform's
-native implementation of this function.
-
-[endsect]
-
-[section:hypot hypot]
-
- template <class T>
- T hypot(T x, T y);
-
-__effects computes [$../../libs/math/doc/images/hypot.png] in such a way as to avoid undue underflow and overflow.
-
-When calculating [$../../libs/math/doc/images/hypot.png] it's quite easy for the intermediate terms to either
-overflow or underflow, even though the result is in fact perfectly representable.
-One possible alternative form is [$../../libs/math/doc/images/hypot2.png], but that can overflow or underflow
-if x and y are of very differing magnitudes. The `hypot` function takes care of
-all the special cases for you, so you don't have to.
-
-[endsect]
-
-[section:log1p log1p]
-
- template <class T>
- T log1p(T x);
-
-__effects returns the natural logarithm of `x+1`.
-
-There are many situations where it is desirable to compute `log(x+1)`.
-However, for small `x` then `x+1` suffers from catastrophic cancellation errors
-so that `x+1 == 1` and `log(x+1) == 0`, when in fact for very small x, the
-best approximation to `log(x+1)` would be `x`. `log1p` calculates the best
-approximation to `log(1+x)` using a Taylor series expansion for accuracy
-(less than __te).
-Note that there are faster methods available, for example using the equivalence:
-
- log(1+x) == (log(1+x) * x) / ((1-x) - 1)
-
-However, experience has shown that these methods tend to fail quite spectacularly
-once the compiler's optimizations are turned on. In contrast, the series expansion
-method seems to be reasonably immune optimizer-induced errors.
-
-Finally when BOOST_HAS_LOG1P is defined then the `float/double/long double`
-specializations of this template simply forward to the platform's
-native implementation of this function.
-
-[endsect]
-
-[section sinc_pi]
-
- template<typename T>
- T sinc_pi(const T x);
-
- template<typename T, template<typename> class U>
- U<T> sinc_pi(const U<T> x);
-
-Computes
-[link boost_math.background_information_and_white_papers.sinus_cardinal_and_hyperbolic_sinus_cardinal_functions
-the Sinus Cardinal] of x. The second form is for complexes,
-quaternions, octonions... Taylor series are used at the origin
-to ensure accuracy.
-
-[endsect]
-
-[section sinhc_pi]
-
- template<typename T>
- T sinhc_pi(const T x);
-
- template<typename T, template<typename> class U>
- U<T> sinhc_pi(const U<T> x);
-
-Computes
-[link boost_math.background_information_and_white_papers.sinus_cardinal_and_hyperbolic_sinus_cardinal_functions
-the Hyperbolic Sinus Cardinal] of x. The second form is for
-complexes, quaternions, octonions... Taylor series are used at the origin
-to ensure accuracy.
-
-[endsect]
-
-[section Test Programs]
-
-The [@../../libs/math/special_functions/special_functions_test.cpp
-special_functions_test.cpp]
-and [@../../libs/math/test/log1p_expm1_test.cpp log1p_expm1_test.cpp] test programs test the functions for
-float, double and long double arguments ([@../../libs/math/special_functions/output.txt sample output], with message
-output enabled).
-
-If you define the symbol BOOST_SPECIAL_FUNCTIONS_TEST_VERBOSE, you will
-get additional output
-([@../../libs/math/special_functions/output_more.txt verbose output]),
-which may prove useful for
-tuning on your platform (the library use "reasonable" tolerances,
-which may prove to be too strict for your platform); this will only be
-helpfull if you enable message output at the same time, of course
-(by uncommenting the relevant line in the test or by adding `--log_level=messages`
-to your command line,...).
-
-[endsect]
-
-[section Acknowledgements]
-
-The mathematical text has been typeset with [@http://www.nisus-soft.com/
-Nisus Writer], and the
-illustrations have been made with [@http://www.pacifict.com/
-Graphing Calculator]. Jens Maurer
-was the Review Manager for this library. More acknowledgements in the
-History section. Thank you to all who contributed to the discution
-about this library.
-
-[endsect]
-
-[section History]
-
-* 1.5.0 - 17/12/2005: John Maddock added __log1p, __expm1 and __hypot. Converted documentation to Quickbook Format.
-* 1.4.2 - 03/02/2003: transitionned to the unit test framework; <boost/config.hpp> now included by the library headers (rather than the test files).
-* 1.4.1 - 18/09/2002: improved compatibility with Microsoft compilers.
-* 1.4.0 - 14/09/2001: added (after rewrite) __acosh and __asinh, which were submited by Eric Ford; applied changes for Gcc 2.9.x suggested by John Maddock; improved accuracy; sanity check for test file, related to accuracy.
-* 1.3.2 - 07/07/2001: introduced namespace math.
-* 1.3.1 - 07/06/2001:(end of Boost review) split special_functions.hpp into atanh.hpp, sinc.hpp and sinhc.hpp; improved efficiency of __atanh with compile-time technique (Daryle Walker); improved accuracy of all functions near zero (Peter Schmitteckert).
-* 1.3.0 - 26/03/2001: support for complexes & all, for cardinal functions.
-* 1.2.0 - 31/01/2001: minor modifications for Koenig lookup.
-* 1.1.0 - 23/01/2001: boostification.
-* 1.0.0 - 10/08/1999: first public version.
-
-[endsect]
-
-[section To Do]
-
-* Add more functions.
-* Improve test of each function.
-
-[endsect]
-[endsect]
-
-

Deleted: branches/bcbboost/libs/math/doc/math-tr1.qbk
==============================================================================
--- branches/bcbboost/libs/math/doc/math-tr1.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
+++ (empty file)
@@ -1,142 +0,0 @@
-
-[def __effects [*Effects: ]]
-[def __formula [*Formula: ]]
-[def __exm1 '''<code>e<superscript>x</superscript> - 1</code>''']
-[def __ex '''<code>e<superscript>x</superscript></code>''']
-[def __te '''2&#x03B5;''']
-
-[section:inverse_complex Complex Number Inverse Trigonometric Functions]
-
-The following complex number algorithms are the inverses of trigonometric functions currently
-present in the C++ standard. Equivalents to these functions are part of the C99 standard, and
-will be part of the forthcoming Technical Report on C++ Standard Library Extensions.
-
-[section Implementation and Accuracy]
-
-Although there are deceptively simple formulae available for all of these functions, a naive
-implementation that used these formulae would fail catastrophically for some input
-values. The Boost versions of these functions have been implemented using the methodology
-described in "Implementing the Complex Arcsine and Arccosine Functions Using Exception Handling"
-by T. E. Hull Thomas F. Fairgrieve and Ping Tak Peter Tang, ACM Transactions on Mathematical Software,
-Vol. 23, No. 3, September 1997. This means that the functions are well defined over the entire
-complex number range, and produce accurate values even at the extremes of that range, where as a naive
-formula would cause overflow or underflow to occur during the calculation, even though the result is
-actually a representable value. The maximum theoretical relative error for all of these functions
-is less than 9.5E for every machine-representable point in the complex plane. Please refer to
-comments in the header files themselves and to the above mentioned paper for more information
-on the implementation methodology.
-
-[endsect]
-[section:asin asin]
-
-[h4 Header:]
-
- #include <boost/math/complex/asin.hpp>
-
-[h4 Synopsis:]
-
- template<class T>
- std::complex<T> asin(const std::complex<T>& z);
-
-__effects returns the inverse sine of the complex number z.
-
-__formula [$../../libs/math/doc/images/asin.png]
-
-[endsect]
-
-[section:acos acos]
-
-[h4 Header:]
-
- #include <boost/math/complex/acos.hpp>
-
-[h4 Synopsis:]
-
- template<class T>
- std::complex<T> acos(const std::complex<T>& z);
-
-__effects returns the inverse cosine of the complex number z.
-
-__formula [$../../libs/math/doc/images/acos.png]
-
-[endsect]
-
-[section:atan atan]
-
-[h4 Header:]
-
- #include <boost/math/complex/atan.hpp>
-
-[h4 Synopsis:]
-
- template<class T>
- std::complex<T> atan(const std::complex<T>& z);
-
-__effects returns the inverse tangent of the complex number z.
-
-__formula [$../../libs/math/doc/images/atan.png]
-
-[endsect]
-
-[section:asinh asinh]
-
-[h4 Header:]
-
- #include <boost/math/complex/asinh.hpp>
-
-[h4 Synopsis:]
-
- template<class T>
- std::complex<T> asinh(const std::complex<T>& z);
-
-__effects returns the inverse hyperbolic sine of the complex number z.
-
-__formula [$../../libs/math/doc/images/asinh.png]
-
-[endsect]
-
-[section:acosh acosh]
-
-[h4 Header:]
-
- #include <boost/math/complex/acosh.hpp>
-
-[h4 Synopsis:]
-
- template<class T>
- std::complex<T> acosh(const std::complex<T>& z);
-
-__effects returns the inverse hyperbolic cosine of the complex number z.
-
-__formula [$../../libs/math/doc/images/acosh.png]
-
-[endsect]
-
-[section:atanh atanh]
-
-[h4 Header:]
-
- #include <boost/math/complex/atanh.hpp>
-
-[h4 Synopsis:]
-
- template<class T>
- std::complex<T> atanh(const std::complex<T>& z);
-
-__effects returns the inverse hyperbolic tangent of the complex number z.
-
-__formula [$../../libs/math/doc/images/atanh.png]
-
-[endsect]
-
-[section History]
-
-* 2005/12/17: Added support for platforms with no meaningful numeric_limits<>::infinity().
-* 2005/12/01: Initial version, added as part of the TR1 library.
-
-
-[endsect]
-
-[endsect]
-
-

Modified: branches/bcbboost/libs/math/doc/math.qbk
==============================================================================
--- branches/bcbboost/libs/math/doc/math.qbk (original)
+++ branches/bcbboost/libs/math/doc/math.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,63 +1,189 @@
-[library Boost.Math
- [quickbook 1.3]
- [copyright 2001-2002 Daryle Walker, 2001-2003 Hubert Holin, 2005 John Maddock]
- [purpose Various mathematical functions and data types]
+[article Boost.Math
+ [quickbook 1.4]
     [license
         Distributed under 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 http://www.boost.org/LICENSE_1_0.txt])
     ]
- [authors [Holin, Hubert], [Maddock, John], [Walker, Daryle]]
     [category math]
     [last-revision $Date$]
 ]
 
-[def __asinh [link boost_math.math_special_functions.asinh asinh]]
-[def __acosh [link boost_math.math_special_functions.acosh acosh]]
-[def __atanh [link boost_math.math_special_functions.atanh atanh]]
-[def __sinc_pi [link boost_math.math_special_functions.sinc_pi sinc_pi]]
-[def __sinhc_pi [link boost_math.math_special_functions.sinhc_pi sinhc_pi]]
-
-[def __log1p [link boost_math.math_special_functions.log1p log1p]]
-[def __expm1 [link boost_math.math_special_functions.expm1 expm1]]
-[def __hypot [link boost_math.math_special_functions.hypot hypot]]
-
-
-[section Overview]
-
-The [link boost_math.gcd_lcm Greatest Common Divisor and Least Common Multiple library]
-provides run-time and compile-time evaluation of the greatest common divisor (GCD)
-or least common multiple (LCM) of two integers.
-
-The [link boost_math.math_special_functions Special Functions library] currently provides eight templated special functions,
-in namespace boost. Two of these (__sinc_pi and __sinhc_pi) are needed by our
-implementation of quaternions and octonions. The functions __acosh,
-__asinh and __atanh are entirely classical,
-the function __sinc_pi sees heavy use in signal processing tasks,
-and the function __sinhc_pi is an ad'hoc function whose naming is modelled on
-__sinc_pi and hyperbolic functions. The functions __log1p, __expm1 and __hypot are all part of the C99 standard
-but not yet C++. Two of these (__log1p and __hypot) were needed for the
-[link boost_math.inverse_complex complex number inverse trigonometric functions].
-
-The [link boost_math.inverse_complex Complex Number Inverse Trigonometric Functions]
-are the inverses of trigonometric functions currently present in the C++ standard.
-Equivalents to these functions are part of the C99 standard, and they
-will be part of the forthcoming Technical Report on C++ Standard Library Extensions.
-
-[link boost_math.quaternions Quaternions] are a relative of
-complex numbers often used to parameterise rotations in three
-dimentional space.
-
-[link boost_math.octonions Octonions], like [link boost_math.quaternions quaternions],
-are a relative of complex numbers. [link boost_math.octonions Octonions]
-see some use in theoretical physics.
-
-[endsect]
-
-[include math-gcd.qbk]
-[include math-sf.qbk]
-[include math-tr1.qbk]
-[include math-quaternion.qbk]
-[include math-octonion.qbk]
-[include math-background.qbk]
+[def __R ['[*R]]]
+[def __C ['[*C]]]
+[def __H ['[*H]]]
+[def __O ['[*O]]]
+[def __R3 ['[*'''R<superscript>3</superscript>''']]]
+[def __R4 ['[*'''R<superscript>4</superscript>''']]]
+[def __quadrulple ('''&#x03B1;,&#x03B2;,&#x03B3;,&#x03B4;''')]
+[def __quat_formula ['[^q = '''&#x03B1; + &#x03B2;i + &#x03B3;j + &#x03B4;k''']]]
+[def __quat_complex_formula ['[^q = ('''&#x03B1; + &#x03B2;i) + (&#x03B3; + &#x03B4;i)j''' ]]]
+[def __not_equal ['[^xy '''&#x2260;''' yx]]]
+[def __octulple ('''&#x03B1;,&#x03B2;,&#x03B3;,&#x03B4;,&#x03B5;,&#x03B6;,&#x03B7;,&#x03B8;''')]
+[def __oct_formula ['[^o = '''&#x03B1; + &#x03B2;i + &#x03B3;j + &#x03B4;k + &#x03B5;e' + &#x03B6;i' + &#x03B7;j' + &#x03B8;k' ''']]]
+[def __oct_complex_formula ['[^o = ('''&#x03B1; + &#x03B2;i) + (&#x03B3; + &#x03B4;i)j + (&#x03B5; + &#x03B6;i)e' + (&#x03B7; - &#x03B8;i)j' ''']]]
+[def __oct_quat_formula ['[^o = ('''&#x03B1; + &#x03B2;i + &#x03B3;j + &#x03B4;k) + (&#x03B5; + &#x03B6;i + &#x03B7;j - &#x03B8;j)e' ''']]]
+[def __oct_not_equal ['[^x(yz) '''&#x2260;''' (xy)z]]]
+[template tr1[] [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf Technical Report on C++ Library Extensions]]
+
+The following mathematical libraries are present in Boost:
+
+[table
+[[Library][Description]]
+
+ [[[@../complex/html/index.html Complex Number Inverse Trigonometric Functions]]
+ [
+These complex number algorithms are the inverses of trigonometric functions currently
+present in the C++ standard. Equivalents to these functions are part of the C99 standard, and
+are part of the [tr1].
+ ]]
+
+ [[[@../gcd/html/index.html Greatest Common Divisor and Least Common Multiple]]
+ [
+The class and function templates in <boost/math/common_factor.hpp>
+provide run-time and compile-time evaluation of the greatest common divisor
+(GCD) or least common multiple (LCM) of two integers.
+These facilities are useful for many numeric-oriented generic
+programming problems.
+ ]]
+
+ [[[@../../../integer/index.html Integer]]
+ [Headers to ease dealing with integral types.]]
+
+ [[[@../../../numeric/interval/doc/interval.htm Interval]]
+ [As implied by its name, this library is intended to help manipulating
+ mathematical intervals. It consists of a single header
+ <boost/numeric/interval.hpp> and principally a type which can be
+ used as interval<T>. ]]
+
+ [[[@../../../multi_array/doc/index.html Multi Array]]
+ [Boost.MultiArray provides a generic N-dimensional array concept
+ definition and common implementations of that interface.]]
+
+ [[[@../../../numeric/conversion/doc/index.html Numeric.Conversion]]
+ [The Boost Numeric Conversion library is a collection of tools to
+ describe and perform conversions between values of different numeric types.]]
+
+[[[@../octonion/html/index.html Octonions]]
+ [
+Octonions, like [@../../quaternions/html/index.html quaternions], are a relative of complex numbers.
+
+Octonions see some use in theoretical physics.
+
+In practical terms, an octonion is simply an octuple of real numbers __octulple,
+which we can write in the form __oct_formula, where ['[^i]], ['[^j]] and ['[^k]]
+are the same objects as for quaternions, and ['[^e']], ['[^i']], ['[^j']] and ['[^k']]
+are distinct objects which play essentially the same kind of role as ['[^i]] (or ['[^j]] or ['[^k]]).
+
+Addition and a multiplication is defined on the set of octonions,
+which generalize their quaternionic counterparts. The main novelty this time
+is that [*the multiplication is not only not commutative, is now not even
+associative] (i.e. there are quaternions ['[^x]], ['[^y]] and ['[^z]] such that __oct_not_equal).
+A way of remembering things is by using the following multiplication table:
+
+[$../../octonion/graphics/octonion_blurb17.jpeg]
+
+Octonions (and their kin) are described in far more details in this other
+[@../../quaternion/TQE.pdf document]
+(with [@../../quaternion/TQE_EA.pdf errata and addenda]).
+
+Some traditional constructs, such as the exponential, carry over without too
+much change into the realms of octonions, but other, such as taking a square root,
+do not (the fact that the exponential has a closed form is a result of the
+author, but the fact that the exponential exists at all for octonions is known
+since quite a long time ago).
+ ]]
+
+ [[[@../../../utility/operators.htm Operators]]
+ [The header <boost/operators.hpp> supplies several sets of class
+ templates (in namespace boost). These templates define operators at
+ namespace scope in terms of a minimal number of fundamental
+ operators provided by the class.]]
+
+[[[@../sf_and_dist/html/index.html Special Functions]]
+ [ Provides a number of high quality special functions, initially
+ these were concentrated on functions used in statistical applications
+ along with those in the Technical Report on C++ Library Extensions.
+
+ The function families currently implemented are the gamma, beta & erf
+ functions along with the incomplete gamma and beta functions
+ (four variants of each) and all the possible inverses of these,
+ plus digamma, various factorial functions, Bessel functions,
+ elliptic integrals, sinus cardinals (along with their
+ hyperbolic variants), inverse hyperbolic functions,
+ Legrendre/Laguerre/Hermite polynomials and various special power
+ and logarithmic functions.
+
+ All the implementations are fully generic and support the use of
+ arbitrary "real-number" types, although they are optimised for
+ use with types with known-about significand (or mantissa)
+ sizes: typically float, double or long double. ]]
+
+[[[@../sf_and_dist/html/index.html Statistical Distributions]]
+ [Provides a reasonably comprehensive set of statistical distributions,
+ upon which higher level statistical tests can be built.
+
+ The initial focus is on the central univariate distributions.
+ Both continuous (like normal & Fisher) and discrete (like binomial
+ & Poisson) distributions are provided.
+
+ A comprehensive tutorial is provided, along with a series of worked
+ examples illustrating how the library is used to conduct statistical tests. ]]
+
+[[[@../quaternion/html/index.html Quaternions]]
+ [
+Quaternions are a relative of complex numbers.
+
+Quaternions are in fact part of a small hierarchy of structures built
+upon the real numbers, which comprise only the set of real numbers
+(traditionally named __R), the set of complex numbers (traditionally named __C),
+the set of quaternions (traditionally named __H) and the set of octonions
+(traditionally named __O), which possess interesting mathematical properties
+(chief among which is the fact that they are ['division algebras],
+['i.e.] where the following property is true: if ['[^y]] is an element of that
+algebra and is [*not equal to zero], then ['[^yx = yx']], where ['[^x]] and ['[^x']]
+denote elements of that algebra, implies that ['[^x = x']]).
+Each member of the hierarchy is a super-set of the former.
+
+One of the most important aspects of quaternions is that they provide an
+efficient way to parameterize rotations in __R3 (the usual three-dimensional space)
+and __R4.
+
+In practical terms, a quaternion is simply a quadruple of real numbers __quadrulple,
+which we can write in the form __quat_formula, where ['[^i]] is the same object as for complex numbers,
+and ['[^j]] and ['[^k]] are distinct objects which play essentially the same kind of role as ['[^i]].
+
+An addition and a multiplication is defined on the set of quaternions,
+which generalize their real and complex counterparts. The main novelty
+here is that [*the multiplication is not commutative] (i.e. there are
+quaternions ['[^x]] and ['[^y]] such that __not_equal). A good mnemotechnical way of remembering
+things is by using the formula ['[^i*i = j*j = k*k = -1]].
+
+Quaternions (and their kin) are described in far more details in this
+other [@../../../quaternion/TQE.pdf document]
+(with [@../../../quaternion/TQE_EA.pdf errata and addenda]).
+
+Some traditional constructs, such as the exponential, carry over without
+too much change into the realms of quaternions, but other, such as taking
+a square root, do not.
+ ]]
+
+ [[[@../../../random/index.html Random]]
+ [Random numbers are useful in a variety of applications. The Boost
+ Random Number Library (Boost.Random for short) provides a vast variety
+ of generators and distributions to produce random numbers having useful
+ properties, such as uniform distribution.]]
+
+ [[[@../../../rational/index.html Rational]]
+ [The header rational.hpp provides an implementation of rational numbers.
+ The implementation is template-based, in a similar manner to the
+ standard complex number class.]]
+
+ [[[@../../../numeric/ublas/doc/index.htm uBLAS]]
+ [uBLAS is a C++ template class library that provides BLAS level 1, 2, 3
+ functionality for dense, packed and sparse matrices. The design and
+ implementation unify mathematical notation via operator overloading and
+ efficient code generation via expression templates.]]
+
+]
 

Copied: branches/bcbboost/libs/math/doc/sf_and_dist/Jamfile.v2 (from r39819, /trunk/libs/math/doc/sf_and_dist/Jamfile.v2)
==============================================================================
--- /trunk/libs/math/doc/sf_and_dist/Jamfile.v2 (original)
+++ branches/bcbboost/libs/math/doc/sf_and_dist/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -61,7 +61,7 @@
         <format>pdf:<xsl:param>use.role.for.mediaobject=1
         <format>pdf:<xsl:param>preferred.mediaobject.role=print
         <format>pdf:<xsl:param>img.src.path=$(images_location)/
- <format>pdf:<xsl:param>admon.graphics.path=$(images_location)/../svg-admon/
+ <format>pdf:<xsl:param>admon.graphics.path=$(images_location)/../../svg-admon/
     ;
 
 
@@ -71,3 +71,4 @@
 
 
 
+

Copied: branches/bcbboost/libs/math/doc/sf_and_dist/distributions/distribution_construction.qbk (from r39819, /trunk/libs/math/doc/sf_and_dist/distributions/distribution_construction.qbk)
==============================================================================
--- /trunk/libs/math/doc/sf_and_dist/distributions/distribution_construction.qbk (original)
+++ branches/bcbboost/libs/math/doc/sf_and_dist/distributions/distribution_construction.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-[section:distribution_construction_eg Distribution Construction Example]
+[section:dist_construct_eg Distribution Construction Example]
 
 See [@../../../example/distribution_construction.cpp distribution_construction.cpp] for full source code.
 
@@ -6,4 +6,4 @@
 [distribution_construction1]
 [distribution_construction2]
 
-[endsect] [/section:distribution_construction_eg Distribution Construction Example]
+[endsect] [/section:dist_construct_eg Distribution Construction Example]

Copied: branches/bcbboost/libs/math/doc/sf_and_dist/error_handling.qbk (from r39819, /trunk/libs/math/doc/sf_and_dist/error_handling.qbk)
==============================================================================
--- /trunk/libs/math/doc/sf_and_dist/error_handling.qbk (original)
+++ branches/bcbboost/libs/math/doc/sf_and_dist/error_handling.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -44,7 +44,7 @@
 appropriate result]]
 [[ignore_error][Ignores the error and simply the returns the most appropriate result.]]
 [[user_error][Calls a
- [link math_toolkit.policy.pol_tutorial.user_defined_error_policies user-supplied error handler].]]
+ [link math_toolkit.policy.pol_tutorial.user_def_err_pol user-supplied error handler].]]
 ]
 
 The following tables show all the permutations of errors and actions,
@@ -56,7 +56,7 @@
 [[errno_on_error][Sets `::errno` to `EDOM` and returns `std::numeric_limits<T>::quiet_NaN()`]]
 [[ignore_error][Returns `std::numeric_limits<T>::quiet_NaN()`]]
 [[user_error][Returns the result of `boost::math::policies::user_domain_error`:
- [link math_toolkit.policy.pol_tutorial.user_defined_error_policies
+ [link math_toolkit.policy.pol_tutorial.user_def_err_pol
             this function must be defined by the user].]]
 ]
     
@@ -66,7 +66,7 @@
 [[errno_on_error][Sets `::errno` to `EDOM` and returns `std::numeric_limits<T>::quiet_NaN()`]]
 [[ignore_error][Returns `std::numeric_limits<T>::quiet_NaN()`]]
 [[user_error][Returns the result of `boost::math::policies::user_pole_error`:
- [link math_toolkit.policy.pol_tutorial.user_defined_error_policies
+ [link math_toolkit.policy.pol_tutorial.user_def_err_pol
             this function must be defined by the user].]]
 ]
 
@@ -76,7 +76,7 @@
 [[errno_on_error][Sets `::errno` to `ERANGE` and returns `std::numeric_limits<T>::infinity()`]]
 [[ignore_error][Returns `std::numeric_limits<T>::infinity()`]]
 [[user_error][Returns the result of `boost::math::policies::user_overflow_error`:
- [link math_toolkit.policy.pol_tutorial.user_defined_error_policies
+ [link math_toolkit.policy.pol_tutorial.user_def_err_pol
             this function must be defined by the user].]]
 ]
 
@@ -86,7 +86,7 @@
 [[errno_on_error][Sets `::errno` to `ERANGE` and returns 0.]]
 [[ignore_error][[*Returns 0]]]
 [[user_error][Returns the result of `boost::math::policies::user_underflow_error`:
- [link math_toolkit.policy.pol_tutorial.user_defined_error_policies
+ [link math_toolkit.policy.pol_tutorial.user_def_err_pol
             this function must be defined by the user].]]
 ]
 
@@ -96,7 +96,7 @@
 [[errno_on_error][Sets `::errno` to `ERANGE` and returns the denormalised value.]]
 [[ignore_error][[*Returns the denormalised value.]]]
 [[user_error][Returns the result of `boost::math::policies::user_denorm_error`:
- [link math_toolkit.policy.pol_tutorial.user_defined_error_policies
+ [link math_toolkit.policy.pol_tutorial.user_def_err_pol
             this function must be defined by the user].]]
 ]
 
@@ -106,7 +106,7 @@
 [[errno_on_error][Sets `::errno` to `EDOM` and returns `std::numeric_limits<T>::infinity()`.]]
 [[ignore_error][Returns `std::numeric_limits<T>::infinity()`.]]
 [[user_error][Returns the result of `boost::math::policies::user_evaluation_error`:
- [link math_toolkit.policy.pol_tutorial.user_defined_error_policies
+ [link math_toolkit.policy.pol_tutorial.user_def_err_pol
             this function must be defined by the user].]]
 ]
 

Copied: branches/bcbboost/libs/math/doc/sf_and_dist/math.qbk (from r39819, /trunk/libs/math/doc/sf_and_dist/math.qbk)
==============================================================================
--- /trunk/libs/math/doc/sf_and_dist/math.qbk (original)
+++ branches/bcbboost/libs/math/doc/sf_and_dist/math.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -206,7 +206,7 @@
 [def __math_discrete [link math_toolkit.policy.pol_ref.discrete_quant_ref discrete functions]]
 [def __error_policy [link math_toolkit.policy.pol_ref.error_handling_policies error handling policies]]
 [def __changing_policy_defaults [link math_toolkit.policy.pol_ref.policy_defaults changing policies defaults]]
-[def __user_error_handling [link math_toolkit.policy.pol_tutorial.user_defined_error_policies user error handling]]
+[def __user_error_handling [link math_toolkit.policy.pol_tutorial.user_def_err_pol user error handling]]
 
 [def __usual_accessors __cdf, __pdf, __quantile, __hazard,
    __chf, __mean, __median, __mode, __variance, __sd, __skewness,

Copied: branches/bcbboost/libs/math/doc/sf_and_dist/policy.qbk (from r39819, /trunk/libs/math/doc/sf_and_dist/policy.qbk)
==============================================================================
--- /trunk/libs/math/doc/sf_and_dist/policy.qbk (original)
+++ branches/bcbboost/libs/math/doc/sf_and_dist/policy.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -113,7 +113,7 @@
 should be replaced with the value of ['val].
 
 There is more information on user-defined error handlers in
-the [link math_toolkit.policy.pol_tutorial.user_defined_error_policies
+the [link math_toolkit.policy.pol_tutorial.user_def_err_pol
 tutorial here].
 
 [h4 Kinds of Error Raised]

Copied: branches/bcbboost/libs/math/doc/sf_and_dist/policy_tutorial.qbk (from r39819, /trunk/libs/math/doc/sf_and_dist/policy_tutorial.qbk)
==============================================================================
--- /trunk/libs/math/doc/sf_and_dist/policy_tutorial.qbk (original)
+++ branches/bcbboost/libs/math/doc/sf_and_dist/policy_tutorial.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -320,7 +320,7 @@
 
 [endsect][/section:namespace_policies Setting Policies at Namespace or Translation Unit Scope]
 
-[section:user_defined_error_policies Calling User Defined Error Handlers]
+[section:user_def_err_pol Calling User Defined Error Handlers]
 
 [import ../../example/policy_eg_8.cpp]
 
@@ -330,7 +330,7 @@
 
 [policy_eg_9]
 
-[endsect][/section:user_defined_error_policies Calling User Defined Error Handlers]
+[endsect][/section:user_def_err_pol Calling User Defined Error Handlers]
 
 [section:understand_dis_quant Understanding Quantiles of Discrete Distributions]
 

Copied: branches/bcbboost/libs/math/doc/sf_and_dist/roadmap.qbk (from r39819, /trunk/libs/math/doc/sf_and_dist/roadmap.qbk)
==============================================================================
--- /trunk/libs/math/doc/sf_and_dist/roadmap.qbk (original)
+++ branches/bcbboost/libs/math/doc/sf_and_dist/roadmap.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -57,6 +57,11 @@
 on error rates.
 * Provide sufficient docs for people to be able to find their way around the library.
 
+SVN Revisions:
+
+Sandbox revision merged to trunk: 39833.
+Trunk revision: 39833.
+
 ]
 [/
   Copyright 2006 John Maddock and Paul A. Bristow.

Modified: branches/bcbboost/libs/math/index.html
==============================================================================
--- branches/bcbboost/libs/math/index.html (original)
+++ branches/bcbboost/libs/math/index.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,13 +1,14 @@
 <html>
 <head>
-<meta http-equiv="refresh" content="0; URL=../../doc/html/boost_math.html">
+<meta http-equiv="refresh" content="0; URL=doc/html/index.html">
 </head>
 <body>
 Automatic redirection failed, please go to
-../../doc/html/boost_math.html.
+doc/html/index.html.
       <P>Copyright Daryle Walker, Hubert Holin and John Maddock 2006</P>
       <P>Distributed under the Boost Software License, Version 1.0. (See accompanying file <A href="../../LICENSE_1_0.txt">
             LICENSE_1_0.txt</A> or copy at www.boost.org/LICENSE_1_0.txt).</P>
 </body>
 </html>
 
+

Modified: branches/bcbboost/libs/math/test/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/math/test/Jamfile.v2 (original)
+++ branches/bcbboost/libs/math/test/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,11 +1,381 @@
-# Copyright Daryle Walker, Hubert Holin and John Maddock 2006
+# Copyright Daryle Walker, Hubert Holin, John Maddock and Paul A. Bristow 2006 - 2007
 # Distributed under 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.
+# \math_toolkit\libs\math\test\jamfile.v2
+# Runs all math toolkit tests, functions & distributions.
 
 # bring in the rules for testing
 import testing ;
 
+project
+ : requirements
+ <toolset>gcc:<cxxflags>-Wno-missing-braces
+ <toolset>darwin:<cxxflags>-Wno-missing-braces
+ <toolset>acc:<cxxflags>+W2068,2461,2236,4070,4069
+ <toolset>intel:<cxxflags>-Qwd264,239
+ <toolset>intel:<cxxflags>/nologo
+ <toolset>intel-linux:<cxxflags>-wd239
+ <toolset>intel:<linkflags>/nologo
+ <toolset>msvc:<warnings>all
+ <toolset>msvc:<asynch-exceptions>on
+ <toolset>msvc:<cxxflags>/wd4996
+ <toolset>msvc:<cxxflags>/wd4512
+ <toolset>msvc:<cxxflags>/wd4610
+ <toolset>msvc:<cxxflags>/wd4510
+ <toolset>msvc:<cxxflags>/wd4127
+ <toolset>msvc:<cxxflags>/wd4701 # needed for lexical cast - temporary.
+ <toolset>msvc-7.1:<source>../vc71_fix//vc_fix
+ <toolset>borland:<link>static
+ <toolset>borland:<runtime-link>static
+ # <toolset>msvc:<cxxflags>/wd4506 has no effect?
+ # suppress xstring(237) : warning C4506: no definition for inline function
+ <include>../../..
+ <source>../../regex/build//boost_regex
+ <link>shared:<define>BOOST_REGEX_DYN_LINK=1
+ <define>BOOST_ALL_NO_LIB=1
+ ;
+
+run hypot_test.cpp ;
+run log1p_expm1_test.cpp ;
+run powm1_sqrtp1m1_test.cpp ;
+run special_functions_test.cpp ../../test/build//boost_unit_test_framework/<link>static ;
+run test_bernoulli.cpp ;
+run test_constants.cpp ;
+run test_beta.cpp ;
+run test_beta_dist.cpp ;
+run test_binomial.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_FLOAT
+ : test_binomial_float ;
+run test_binomial.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_DOUBLE
+ : test_binomial_double ;
+run test_binomial.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_LDOUBLE
+ : test_binomial_long_double ;
+run test_binomial.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_REAL_CONCEPT
+ : test_binomial_real_concept ;
+run test_binomial_coeff.cpp ;
+run test_carlson.cpp ;
+run test_cauchy.cpp ;
+run test_cbrt.cpp ;
+run test_chi_squared.cpp ;
+run test_classify.cpp ;
+run test_digamma.cpp ;
+run test_dist_overloads.cpp ;
+run test_ellint_1.cpp ;
+run test_ellint_2.cpp ;
+run test_ellint_3.cpp ;
+run test_erf.cpp ;
+run test_error_handling.cpp ;
+run test_exponential_dist.cpp ;
+run test_extreme_value.cpp ;
+run test_factorials.cpp ;
+run test_find_location.cpp ;
+run test_find_scale.cpp ;
+run test_fisher_f.cpp ;
+run test_gamma.cpp ;
+run test_gamma_dist.cpp ;
+run test_hermite.cpp ;
+run test_ibeta.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_FLOAT
+ : test_ibeta_float ;
+run test_ibeta.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_DOUBLE
+ : test_ibeta_double ;
+run test_ibeta.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_LDOUBLE
+ : test_ibeta_long_double ;
+run test_ibeta.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_REAL_CONCEPT
+ : test_ibeta_real_concept ;
+run test_ibeta_inv.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_FLOAT
+ : test_ibeta_inv_float ;
+run test_ibeta_inv.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_DOUBLE
+ : test_ibeta_inv_double ;
+run test_ibeta_inv.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_LDOUBLE
+ : test_ibeta_inv_long_double ;
+run test_ibeta_inv.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_REAL_CONCEPT
+ : test_ibeta_inv_real_concept ;
+run test_ibeta_inv_ab.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_FLOAT
+ : test_ibeta_inv_ab_float ;
+run test_ibeta_inv_ab.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_DOUBLE
+ : test_ibeta_inv_ab_double ;
+run test_ibeta_inv_ab.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_LDOUBLE
+ : test_ibeta_inv_ab_long_double ;
+run test_ibeta_inv_ab.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_REAL_CONCEPT
+ : test_ibeta_inv_ab_real_concept ;
+run test_igamma.cpp ;
+run test_igamma_inv.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_FLOAT
+ : test_igamma_inv_float ;
+run test_igamma_inv.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_DOUBLE
+ : test_igamma_inv_double ;
+run test_igamma_inv.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_LDOUBLE
+ : test_igamma_inv_long_double ;
+run test_igamma_inv.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_REAL_CONCEPT
+ : test_igamma_inv_real_concept ;
+run test_igamma_inva.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_FLOAT
+ : test_igamma_inva_float ;
+run test_igamma_inva.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_DOUBLE
+ : test_igamma_inva_double ;
+run test_igamma_inva.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_LDOUBLE
+ : test_igamma_inva_long_double ;
+run test_igamma_inva.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_REAL_CONCEPT
+ : test_igamma_inva_real_concept ;
+run test_instantiate1.cpp test_instantiate2.cpp ;
+run test_laguerre.cpp ;
+run test_legendre.cpp ;
+run test_lognormal.cpp ;
+run test_minima.cpp ;
+run test_negative_binomial.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_FLOAT
+ : test_negative_binomial_float ;
+run test_negative_binomial.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_DOUBLE
+ : test_negative_binomial_double ;
+run test_negative_binomial.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_LDOUBLE
+ : test_negative_binomial_long_double ;
+run test_negative_binomial.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_REAL_CONCEPT
+ : test_negative_binomial_real_concept ;
+run test_normal.cpp ;
+run test_pareto.cpp ;
+run test_poisson.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_FLOAT
+ : test_poisson_float ;
+run test_poisson.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_DOUBLE
+ : test_poisson_double ;
+run test_poisson.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_LDOUBLE
+ : test_poisson_long_double ;
+run test_poisson.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_REAL_CONCEPT
+ : test_poisson_real_concept ;
+run test_rayleigh.cpp ;
+
+run test_rationals.cpp
+test_rational_instances/test_rational_double1.cpp
+test_rational_instances/test_rational_double2.cpp
+test_rational_instances/test_rational_double3.cpp
+test_rational_instances/test_rational_double4.cpp
+test_rational_instances/test_rational_double5.cpp
+test_rational_instances/test_rational_float1.cpp
+test_rational_instances/test_rational_float2.cpp
+test_rational_instances/test_rational_float3.cpp
+test_rational_instances/test_rational_float4.cpp
+test_rational_instances/test_rational_ldouble1.cpp
+test_rational_instances/test_rational_ldouble2.cpp
+test_rational_instances/test_rational_ldouble3.cpp
+test_rational_instances/test_rational_ldouble4.cpp
+test_rational_instances/test_rational_ldouble5.cpp
+test_rational_instances/test_rational_real_concept1.cpp
+test_rational_instances/test_rational_real_concept2.cpp
+test_rational_instances/test_rational_real_concept3.cpp
+test_rational_instances/test_rational_real_concept4.cpp
+test_rational_instances/test_rational_real_concept5.cpp
+;
+
+run test_remez.cpp ;
+run test_roots.cpp ;
+run test_spherical_harmonic.cpp ;
+run test_students_t.cpp ;
+run test_tgamma_ratio.cpp ;
+run test_toms748_solve.cpp ;
+run test_triangular.cpp ;
+run test_uniform.cpp ;
+run test_weibull.cpp ;
+run test_policy.cpp ;
+run test_policy_sf.cpp ;
+
+run test_bessel_j.cpp ;
+run test_bessel_y.cpp ;
+run test_bessel_i.cpp ;
+run test_bessel_k.cpp ;
+
+compile compile_test/dist_bernoulli_incl_test.cpp ;
+compile compile_test/dist_beta_incl_test.cpp ;
+compile compile_test/dist_binomial_incl_test.cpp ;
+compile compile_test/dist_cauchy_incl_test.cpp ;
+compile compile_test/dist_chi_squared_incl_test.cpp ;
+compile compile_test/dist_complement_incl_test.cpp ;
+compile compile_test/dist_exponential_incl_test.cpp ;
+compile compile_test/dist_extreme_value_incl_test.cpp ;
+compile compile_test/dist_fisher_f_incl_test.cpp ;
+compile compile_test/dist_gamma_incl_test.cpp ;
+compile compile_test/dist_lognormal_incl_test.cpp ;
+compile compile_test/dist_neg_binom_incl_test.cpp ;
+compile compile_test/dist_normal_incl_test.cpp ;
+compile compile_test/dist_poisson_incl_test.cpp ;
+compile compile_test/dist_students_t_incl_test.cpp ;
+compile compile_test/dist_triangular_incl_test.cpp ;
+compile compile_test/dist_uniform_incl_test.cpp ;
+compile compile_test/dist_weibull_incl_test.cpp ;
+compile compile_test/distribution_concept_check.cpp ;
+compile compile_test/sf_beta_incl_test.cpp ;
+compile compile_test/sf_bessel_incl_test.cpp ;
+compile compile_test/sf_binomial_incl_test.cpp ;
+compile compile_test/sf_cbrt_incl_test.cpp ;
+compile compile_test/sf_cos_pi_incl_test.cpp ;
+compile compile_test/sf_digamma_incl_test.cpp ;
+compile compile_test/sf_ellint_1_incl_test.cpp ;
+compile compile_test/sf_ellint_2_incl_test.cpp ;
+compile compile_test/sf_ellint_3_incl_test.cpp ;
+compile compile_test/sf_ellint_rc_incl_test.cpp ;
+compile compile_test/sf_ellint_rd_incl_test.cpp ;
+compile compile_test/sf_ellint_rf_incl_test.cpp ;
+compile compile_test/sf_ellint_rj_incl_test.cpp ;
+compile compile_test/sf_erf_incl_test.cpp ;
+compile compile_test/sf_expm1_incl_test.cpp ;
+compile compile_test/sf_factorials_incl_test.cpp ;
+compile compile_test/sf_fpclassify_incl_test.cpp ;
+compile compile_test/sf_gamma_incl_test.cpp ;
+compile compile_test/sf_hermite_incl_test.cpp ;
+compile compile_test/sf_hypot_incl_test.cpp ;
+compile compile_test/sf_laguerre_incl_test.cpp ;
+compile compile_test/sf_lanczos_incl_test.cpp ;
+compile compile_test/sf_legendre_incl_test.cpp ;
+compile compile_test/sf_log1p_incl_test.cpp ;
+compile compile_test/sf_math_fwd_incl_test.cpp ;
+compile compile_test/sf_powm1_incl_test.cpp ;
+compile compile_test/sf_sign_incl_test.cpp ;
+compile compile_test/sf_sin_pi_incl_test.cpp ;
+compile compile_test/sf_sinc_incl_test.cpp ;
+compile compile_test/sf_sinhc_incl_test.cpp ;
+compile compile_test/sf_sph_harm_incl_test.cpp ;
+compile compile_test/sf_sqrt1pm1_incl_test.cpp ;
+compile compile_test/std_real_concept_check.cpp ;
+compile compile_test/test_traits.cpp ;
+compile compile_test/tools_config_inc_test.cpp ;
+compile compile_test/tools_fraction_inc_test.cpp ;
+compile compile_test/tools_minima_inc_test.cpp ;
+compile compile_test/tools_polynomial_inc_test.cpp ;
+compile compile_test/tools_precision_inc_test.cpp ;
+compile compile_test/tools_rational_inc_test.cpp ;
+compile compile_test/tools_real_cast_inc_test.cpp ;
+compile compile_test/tools_remez_inc_test.cpp ;
+compile compile_test/tools_roots_inc_test.cpp ;
+compile compile_test/tools_series_inc_test.cpp ;
+compile compile_test/tools_solve_inc_test.cpp ;
+compile compile_test/tools_stats_inc_test.cpp ;
+compile compile_test/tools_test_data_inc_test.cpp ;
+compile compile_test/tools_test_inc_test.cpp ;
+compile compile_test/tools_toms748_solve_inc_test.cpp ;
+
 run ../test/common_factor_test.cpp
     ../../test/build//boost_unit_test_framework/<link>static ;
 
@@ -15,17 +385,14 @@
 run ../quaternion/quaternion_test.cpp
     ../../test/build//boost_unit_test_framework/<link>static ;
 
-run ../special_functions/special_functions_test.cpp
- ../../test/build//boost_unit_test_framework/<link>static ;
-
 run ../quaternion/quaternion_mult_incl_test.cpp
     ../quaternion/quaternion_mi1.cpp
     ../quaternion/quaternion_mi2.cpp
     ../../test/build//boost_unit_test_framework/<link>static ;
 
 run complex_test.cpp ;
-run hypot_test.cpp ;
-run log1p_expm1_test.cpp ;
+
+
 
 
 

Copied: branches/bcbboost/libs/math/test/compile_test/test_compile_result.hpp (from r39819, /trunk/libs/math/test/compile_test/test_compile_result.hpp)
==============================================================================
--- /trunk/libs/math/test/compile_test/test_compile_result.hpp (original)
+++ branches/bcbboost/libs/math/test/compile_test/test_compile_result.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -105,10 +105,11 @@
       check_result<value_type>(chf(dist, li));
    }
 private:
+ static Distribution* get_object_p();
    static Distribution& get_object()
    {
       // will never get called:
- return * reinterpret_cast<Distribution*>(0);
+ return *get_object_p();
    }
 }; // struct DistributionConcept
 

Modified: branches/bcbboost/libs/math/test/hypot_test.cpp
==============================================================================
--- branches/bcbboost/libs/math/test/hypot_test.cpp (original)
+++ branches/bcbboost/libs/math/test/hypot_test.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -3,6 +3,7 @@
 // Boost Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
+#define BOOST_MATH_OVERFLOW_ERROR_POLICY ignore_error
 #include <boost/test/included/test_exec_monitor.hpp>
 #include <boost/test/floating_point_comparison.hpp>
 #include <boost/math/special_functions/hypot.hpp>
@@ -115,6 +116,7 @@
 
 int test_main(int, char* [])
 {
+ BOOST_MATH_CONTROL_FP;
    test_boundaries();
    test_spots();
    return 0;

Modified: branches/bcbboost/libs/math/test/log1p_expm1_test.cpp
==============================================================================
--- branches/bcbboost/libs/math/test/log1p_expm1_test.cpp (original)
+++ branches/bcbboost/libs/math/test/log1p_expm1_test.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -3,556 +3,107 @@
 // Boost Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
+#define BOOST_MATH_OVERFLOW_ERROR_POLICY ignore_error
+
+#include <boost/math/concepts/real_concept.hpp>
 #include <boost/test/included/test_exec_monitor.hpp>
 #include <boost/test/floating_point_comparison.hpp>
 #include <boost/math/special_functions/log1p.hpp>
 #include <boost/math/special_functions/expm1.hpp>
+#include <boost/array.hpp>
+#include "functor.hpp"
 
-#include <cmath>
-
-#ifdef BOOST_NO_STDC_NAMESPACE
-namespace std{ using ::sqrt; using ::exp; }
-#endif
+#include "handle_test_result.hpp"
 
 //
-// These test values were generated at 256-bit precision with NTL,
-// we'll use these as a comparison for our own algorithms:
+// DESCRIPTION:
+// ~~~~~~~~~~~~
+//
+// This file tests the functions log1p and expm1. The accuracy tests
+// use values generated with NTL::RR at 1000-bit precision
+// and our generic versions of these functions.
 //
-long double data[][3] = {
- { 0.7071067811865475244008443621048490392848L, 0.5347999967395703705239932642507040249904L, 1.028114981647472451108126112746351175174L, },
- { -0.7071067811865475244008443621048490392848L, -1.227947177299515679941225385708880593066L, -0.5069313086047602121540426193848225247642L, },
- { 0.5L, 0.405465108108164381978013115464349136572L, 0.6487212707001281468486507878141635716538L, },
- { -0.5L, -0.6931471805599453094172321214581765680755L, -0.3934693402873665763962004650088195465581L, },
- { 0.3535533905932737622004221810524245196424L, 0.3027332756136080026565008168738916532429L, 0.4241190194809816004138284781974755046316L, },
- { -0.3535533905932737622004221810524245196424L, -0.4362646682381306258028444378052416278323L, -0.2978114986734404037618125202537819364955L, },
- { 0.25L, 0.2231435513142097557662950903098345033746L, 0.2840254166877414840734205680624364583363L, },
- { -0.25L, -0.2876820724517809274392190059938274315035L, -0.2211992169285951317548297330216793527032L, },
- { 0.1767766952966368811002110905262122598212L, 0.1627790866561079067978577664745092478057L, 0.1933645794479495947956947190066751660075L, },
- { -0.1767766952966368811002110905262122598212L, -0.1945277849706882079548540492230348777333L, -0.1620331144212442112773768997051282549751L, },
- { 0.125L, 0.1177830356563834545387941094705217050685L, 0.1331484530668263168290072278117938725655L, },
- { -0.125L, -0.1335313926245226231463436209313499745894L, -0.117503097415404597135107856770949263778L, },
- { 0.0883883476483184405501055452631061299106L, 0.08469802192359444824992033285217108168932L, 0.09241227540153062617063135584671815396877L, },
- { -0.0883883476483184405501055452631061299106L, -0.09254119938462034112310437534311466334391L, -0.08459468781377732889540834505145255847266L, },
- { 0.0625L, 0.0606246218164348425806061320404202632862L, 0.06449445891785942956339059464288967310073L, },
- { -0.0625L, -0.06453852113757117167292391568399292812891L, -0.06058693718652421388028917537769491547532L, },
- { 0.0441941738241592202750527726315530649553L, 0.0432454624194302551610854640871481968471L, 0.04518528280947901327000081260336002430674L, },
- { -0.0441941738241592202750527726315530649553L, -0.04520049725523360571871295632901500898476L, -0.04323183989734343213613354147207468639883L, },
- { 0.03125L, 0.0307716586667536883710282075967721640917L, 0.0317434074991026709387478152815071441945L, },
- { -0.03125L, -0.03174869831458030115699628274852562992756L, -0.03076676552365591815189080675364721639527L, },
- { 0.02209708691207961013752638631577653247765L, 0.02185648424813694627588486704954425304883L, 0.02234303578078870447841893477675632033383L, },
- { -0.02209708691207961013752638631577653247765L, -0.02234488474624582074086983060944116403229L, -0.02185473466225040063461756538971286083712L, },
- { 0.015625L, 0.01550418653596525415085404604244683587787L, 0.01574770858668574745853507208235174890672L, },
- { -0.015625L, -0.01574835696813916860754951146082826952093L, -0.01550356299459159401301117030297963029214L, },
- { 0.01104854345603980506876319315788826623883L, 0.01098795417351052684893633616419361769653L, 0.01110980401773807767277088699717081730887L, },
- { -0.01104854345603980506876319315788826623883L, -0.01111003193719750909051920695450559324905L, -0.0109877324634695920927755509825266486829L, },
- { 0.0078125L, 0.007782140442054948947462900061136763678126L, 0.007843097206447977693453559760123579193392L, },
- { -0.0078125L, -0.007843177461025892873184042490943581654592L, -0.00778206173975648789406277388638216992911L, },
- { 0.005524271728019902534381596578944133119413L, 0.005509068902949034570040757911345564446908L, 0.005539558653829430569890102084787436958606L, },
- { -0.005524271728019902534381596578944133119413L, -0.00553958694674479599776921231398085523465L, -0.005509040998094137069364339639027839483272L, },
- { 0.00390625L, 0.003898640415657323013937343095842907010724L, 0.003913889338347573443609603903460281898814L, },
- { -0.00390625L, -0.003913899321136329092317783643572664842706L, -0.003898630529882509937135338054830955713597L, },
- { 0.002762135864009951267190798289472066559706L, 0.002758328176699244507992500461404507081665L, 0.002765954075939611809020032526494603236975L, },
- { -0.002762135864009951267190798289472066559706L, -0.002765957600334472995309858879390478447378L, -0.002758324676557722165983108723111282889863L, },
- { 0.001953125L, 0.00195122013126174943967404953184153850035L, 0.001955033591002812046518898047477215867356L, },
- { -0.001953125L, -0.001955034835803350557627492241866812137664L, -0.001951218892524527289957340917326404744062L, },
- { 0.001381067932004975633595399144736033279853L, 0.001380115134839422362840066413196608682497L, 0.001382022045502678201141870910789095246896L, },
- { -0.001381067932004975633595399144736033279853L, -0.001382022485291226579353866252268409285565L, -0.001380114696566700781276188886360328730002L, },
- { 0.0009765625L, 0.0009760859730554588959608249080171866726118L, 0.0009770394924165352428452926116065064658516L, },
- { -0.0009765625L, -0.000977039647826612785968075151753465835865L, -0.0009760858180243377652882103896705696807979L, },
- { 0.0006905339660024878167976995723680166399266L, 0.0006902956571239922163465924178424595489941L, 0.0006907724394697735895620855250217767118257L, },
- { -0.0006905339660024878167976995723680166399266L, -0.0006907724943958822152082937884673220890625L, -0.0006902956022926226579739822473659270196051L, },
- { 0.00048828125L, 0.0004881620795013511885370496926454098503177L, 0.0004884004786944731261736238071633537881055L, },
- { -0.00048828125L, -0.0004884004981088744649849635598969109834608L, -0.0004881620601106346120642438969970786650047L, },
- { 0.0003452669830012439083988497861840083199633L, 0.0003452073920725940347605594851408457654352L, 0.0003453265945064500836804861194113777618491L, },
- { -0.0003452669830012439083988497861840083199633L, -0.0003453266013692502439328491689895266497932L, -0.0003452073852157150645328468804957180492811L, },
- { 0.000244140625L, 0.0002441108275273627091604790858234536994612L, 0.0002441704297478549370052339241357737575196L, },
- { -0.000244140625L, -0.0002441704321739144566954654183814336430665L, -0.0002441108251027834869064123317332192226443L, },
- { 0.0001726334915006219541994248930920041599816L, 0.0001726185920541657488047052564217192486562L, 0.0001726483935193326386701093624723297495011L, },
- { -0.0001726334915006219541994248930920041599816L, -0.0001726483943769975333358785791023362275292L, -0.0001726185911968709284892274915373687749247L, },
- { 0.0001220703125L, 0.0001220628625256773716230553671622032006662L, 0.0001220777633837710765035196704053169651876L, },
- { -0.0001220703125L, -0.0001220777636869822415828707903119755525239L, -0.0001220628622225587251301833935672790920603L, },
- { 0.8631674575031097709971244654600207999082e-4L, 0.8631302067436859538170634567406786112601e-4L, 0.8632047114779673053115205017424336944456e-4L, },
- { -0.8631674575031097709971244654600207999082e-4L, -0.8632047125499327478558483802377432851254e-4L, -0.8631302056719518077375662982669623892259e-4L, },
- { 0.6103515625e-4L, 0.6103329368063852491315878964896399244278e-4L, 0.610370189330454217791205985471093033817e-4L, },
- { -0.6103515625e-4L, -0.6103701897094392572114242980681797646601e-4L, -0.6103329364274580338274063706796778431152e-4L, },
- { 0.4315837287515548854985622327300103999541e-4L, 0.4315744157937625036775176424278410274829e-4L, 0.4315930421112837090401086653281340081162e-4L, },
- { -0.4315837287515548854985622327300103999541e-4L, -0.4315930422452721604826114516606004744788e-4L, -0.4315744156597885082640026911399617719788e-4L, },
- { 0.30517578125e-4L, 0.3051711247318637856906951416899468124305e-4L, 0.3051804379102429545128481254124317032922e-4L, },
- { -0.30517578125e-4L, -0.3051804379576142772845440263529078774196e-4L, -0.3051711246844960769262435293040988383306e-4L, },
- { 0.2157918643757774427492811163650051999771e-4L, 0.2157895361028356677465179910857365631679e-4L, 0.2157941926989617246887680913732626816569e-4L, },
- { -0.2157918643757774427492811163650051999771e-4L, -0.2157941927157098293412689381708235824685e-4L, -0.2157895360860884665958278826510182396057e-4L, },
- { 0.152587890625e-4L, 0.1525867264836239740575732513488881988266e-4L, 0.1525890547841394814004262248066173018701e-4L, },
- { -0.152587890625e-4L, -0.152589054790060783804405477297578319824e-4L, -0.1525867264777028975290466417266610381266e-4L, },
- { 0.1078959321878887213746405581825025999885e-4L, 0.1078953501154664660426995857578938351957e-4L, 0.1078965142665913183071896911252005879737e-4L, },
- { -0.1078959321878887213746405581825025999885e-4L, -0.1078965142686848031534799026109936625941e-4L, -0.1078953501133730376652725297740371278837e-4L, },
- { 0.762939453125e-5L, 0.7629365427567572155885296849132278805619e-5L, 0.7629423635154471743184330338220061308624e-5L, },
- { -0.762939453125e-5L, -0.7629423635228487317358417985971365713551e-5L, -0.7629365427493557993432788023738794879446e-5L, },
- { 0.5394796609394436068732027909125129999427e-5L, 0.5394782057531543905412357533557238337288e-5L, 0.5394811161335832678521641682790705055058e-5L, },
- { -0.5394796609394436068732027909125129999427e-5L, -0.5394811161362001062632444450174708967681e-5L, -0.5394782057505375874231949463613865956897e-5L, },
- { 0.3814697265625e-5L, 0.3814689989685889480711784976833932293351e-5L, 0.3814704541591866050787712890332329861816e-5L, },
- { -0.3814697265625e-5L, -0.3814704541601117953442710025273637313909e-5L, -0.3814689989676637666289386515234179775918e-5L, },
- { 0.2697398304697218034366013954562564999713e-5L, 0.2697394666724952981329383449389929775742e-5L, 0.2697401942679296154240372969560137048828e-5L, },
- { -0.2697398304697218034366013954562564999713e-5L, -0.2697401942682567191225066371527710701254e-5L, -0.2697394666721681966402839715630419488434e-5L, },
- { 0.19073486328125e-5L, 0.1907346813825409415469442511204082252649e-5L, 0.1907350451803060028725247653539392997757e-5L, },
- { -0.19073486328125e-5L, -0.1907350451804216513799839071800603067824e-5L, -0.1907346813824252935909388509978972352794e-5L, },
- { 0.1348699152348609017183006977281282499857e-5L, 0.1348698242854724999916487141692522749195e-5L, 0.134870006184371966849355726468816803105e-5L, },
- { -0.1348699152348609017183006977281282499857e-5L, -0.1348700061844128547427324196878709275963e-5L, -0.134869824285431612236135456375901708795e-5L, },
- { 0.95367431640625e-6L, 0.9536738616591882339084155149633361436031e-6L, 0.9536747711537454467882495568742836518855e-6L, },
- { -0.95367431640625e-6L, -0.953674771153890007250243736279163253167e-6L, -0.9536738616590436737910799241224667558785e-6L, },
- { 0.6743495761743045085915034886406412499283e-6L, 0.6743493488007312848688574744255030867349e-6L, 0.6743498035480310616127355457459842044318e-6L, },
- { -0.6743495761743045085915034886406412499283e-6L, -0.6743498035480821714363740085141941426098e-6L, -0.6743493488006801751313836587982646166511e-6L, },
- { 0.476837158203125e-6L, 0.476837044516323418443461751960488410315e-6L, 0.4768372718899807916543919475044056566776e-6L, },
- { -0.476837158203125e-6L, -0.4768372718899988617013706248625400684693e-6L, -0.476837044516305348418024236387592979885e-6L, },
- { 0.3371747880871522542957517443203206249642e-6L, 0.3371747312437461709296447293515154324249e-6L, 0.3371748449305775038268746571498812558228e-6L, },
- { -0.3371747880871522542957517443203206249642e-6L, -0.3371748449305838925521368172669692634241e-6L, -0.3371747312437397822097678596807366844562e-6L, },
- { 0.2384185791015625e-6L, 0.2384185506798575871042367946772990434454e-6L, 0.2384186075232741891586680785801190380695e-6L, },
- { -0.2384185791015625e-6L, -0.2384186075232764479138672515011331430966e-6L, -0.2384185506798553283503839443678621926131e-6L, },
- { 0.1685873940435761271478758721601603124821e-6L, 0.168587379832723009126312584887843306015e-6L, 0.168587408254431640940234436906404041751e-6L, },
- { -0.1685873940435761271478758721601603124821e-6L, -0.1685874082544324395307239165162871748373e-6L, -0.1685873798327222105361596859308544788882e-6L, },
- { 0.11920928955078125e-6L, 0.1192092824453544570875791570625307160609e-6L, 0.1192092966562088899453260246612120070545e-6L, },
- { -0.11920928955078125e-6L, -0.1192092966562091722896838486808843580911e-6L, -0.1192092824453541747433054782060819405655e-6L, },
- { 0.8429369702178806357393793608008015624104e-7L, 0.8429369346907458442100468226515995161268e-7L, 0.8429370057450184219823111772198430837325e-7L, },
- { -0.8429369702178806357393793608008015624104e-7L, -0.8429370057450194202203178452536969989128e-7L, -0.8429369346907448459722505175258045386137e-7L, },
- { 0.59604644775390625e-7L, 0.5960464299903385618582531773708049930377e-7L, 0.5960464655174749969329045951426788010322e-7L, },
- { -0.59604644775390625e-7L, -0.5960464655174753498633255797994360530379e-7L, -0.5960464299903382089278847834410624753006e-7L, },
- { 0.4214684851089403178696896804004007812052e-7L, 0.4214684762271563704279048400454781112143e-7L, 0.4214684939907246396506810043790990273791e-7L, },
- { -0.4214684851089403178696896804004007812052e-7L, -0.4214684939907247644304252640416892209222e-7L, -0.4214684762271562456481737280646416012198e-7L, },
- { 0.298023223876953125e-7L, 0.2980232194360611147319705384762092811637e-7L, 0.2980232283178452676169258265480484667506e-7L, },
- { -0.298023223876953125e-7L, -0.2980232283178453117332268061697887309516e-7L, -0.2980232194360610706156728457749074378475e-7L, },
- { 0.2107342425544701589348448402002003906026e-7L, 0.2107342403340241408794656877702442158955e-7L, 0.2107342447749162237826252139481573399431e-7L, },
- { -0.2107342425544701589348448402002003906026e-7L, -0.2107342447749162393800928355409024145238e-7L, -0.2107342403340241252819988879076087465356e-7L, },
- { 0.1490116119384765625e-7L, 0.1490116108282535489039181703572223587795e-7L, 0.1490116130486995926396939779870689685877e-7L, },
- { -0.1490116119384765625e-7L, -0.1490116130486995981542314977235185765273e-7L, -0.1490116108282535433893808560533001521451e-7L, },
- { 0.1053671212772350794674224201001001953013e-7L, 0.105367120722123571054210921755326087386e-7L, 0.1053671218323465937296840967886895134902e-7L, },
- { -0.1053671212772350794674224201001001953013e-7L, -0.1053671218323465956793675238087159758683e-7L, -0.1053671207221235691045275460934314753341e-7L, },
- { 0.7450580596923828125e-8L, 0.7450580569168252647234521144541847613178e-8L, 0.7450580624679403809560631351738427758694e-8L, },
- { -0.7450580596923828125e-8L, -0.7450580624679403878492349706467386527508e-8L, -0.7450580569168252578302804073766185102522e-8L, },
- { 0.5268356063861753973371121005005009765065e-8L, 0.5268356049983966214298749090640627494123e-8L, 0.5268356077739541805556620309161241660075e-8L, },
- { -0.5268356063861753973371121005005009765065e-8L, -0.5268356077739541829927662986417408073841e-8L, -0.5268356049983966189927706734372785144896e-8L, },
- { 0.37252902984619140625e-8L, 0.3725290291523020175825701002392130168065e-8L, 0.372529030540080797502369309976644431307e-8L, },
- { -0.37252902984619140625e-8L, -0.3725290305400807983640157853984023238563e-8L, -0.3725290291523020167209236328421632258708e-8L, },
- { 0.2634178031930876986685560502502504882532e-8L, 0.2634178028461430040824706930832094693594e-8L, 0.2634178035400323941685555007927781322226e-8L, },
- { -0.2634178031930876986685560502502504882532e-8L, -0.2634178035400323944731935332553916924003e-8L, -0.2634178028461430037778326626267729345852e-8L, },
- { 0.186264514923095703125e-8L, 0.1862645147496233557427309081102319554965e-8L, 0.1862645150965680508303865184175223522918e-8L, },
- { -0.186264514923095703125e-8L, -0.1862645150965680509380923275944699593959e-8L, -0.1862645147496233556350250994348286047433e-8L, },
- { 0.1317089015965438493342780251251252441266e-8L, 0.1317089015098076756115971781941786429449e-8L, 0.1317089016832800231711981337907007052389e-8L, },
- { -0.1317089015965438493342780251251252441266e-8L, -0.1317089016832800232092778877858343679894e-8L, -0.1317089015098076755735174243244310442822e-8L, },
- { 0.931322574615478515625e-9L, 0.9313225741817976469000627485243784799078e-9L, 0.9313225750491593847538340347920469844993e-9L, },
- { -0.931322574615478515625e-9L, -0.9313225750491593848884662961064989128669e-9L, -0.9313225741817976467654304875233917117595e-9L, },
- { 0.6585445079827192466713901256256262206331e-9L, 0.6585445077658788122694886236082174630276e-9L, 0.6585445081995596812160907048505041981019e-9L, },
- { -0.6585445079827192466713901256256262206331e-9L, -0.6585445081995596812636903973052381314413e-9L, -0.658544507765878812221888931231849819743e-9L, },
- { 0.4656612873077392578125e-9L, 0.4656612871993190405976076218769296134401e-9L, 0.465661287416159475077879476047419355854e-9L, },
- { -0.4656612873077392578125e-9L, -0.4656612874161594750947085087019300606305e-9L, -0.4656612871993190405807785892420104811773e-9L, },
- { 0.3292722539913596233356950628128131103166e-9L, 0.3292722539371495147233197642133894314689e-9L, 0.329272254045569731965920246065619388209e-9L, },
- { -0.3292722539913596233356950628128131103166e-9L, -0.32927225404556973197187020762001218331e-9L, -0.3292722539371495147173698026638945294963e-9L, },
- { 0.23283064365386962890625e-9L, 0.232830643626764574598319647310257725638e-9L, 0.2328306436809746832204912399308981321644e-9L, },
- { -0.23283064365386962890625e-9L, -0.23283064368097468322259486901209973362e-9L, -0.2328306436267645745962160182302805974645e-9L, },
- { 0.1646361269956798116678475314064065551583e-9L, 0.1646361269821272845132662163691156862891e-9L, 0.1646361270092323388246600820255233080682e-9L, },
- { -0.1646361269956798116678475314064065551583e-9L, -0.1646361270092323388254038272196693482955e-9L, -0.1646361269821272845125224711752757643824e-9L, },
- { 0.116415321826934814453125e-9L, 0.1164153218201585508756165045575548434501e-9L, 0.1164153218337110780314223563476279035653e-9L, },
- { -0.116415321826934814453125e-9L, -0.1164153218337110780316853099827398389571e-9L, -0.1164153218201585508753535509225194376384e-9L, },
- { 0.8231806349783990583392376570320327757914e-10L, 0.8231806349445177404509250064541675340615e-10L, 0.8231806350122803762303393520872760345474e-10L, },
- { -0.8231806349783990583392376570320327757914e-10L, -0.8231806350122803762312690335798629228563e-10L, -0.8231806349445177404499953249617719697029e-10L, },
- { 0.582076609134674072265625e-10L, 0.5820766091177334133211963773062890278984e-10L, 0.5820766091516147312110396988252133213646e-10L, },
- { -0.582076609134674072265625e-10L, -0.5820766091516147312113683908690793251107e-10L, -0.5820766091177334133208676852624708551399e-10L, },
- { 0.4115903174891995291696188285160163878957e-10L, 0.4115903174807291996973082454984487948242e-10L, 0.4115903174976698586422780420932622119689e-10L, },
- { -0.4115903174891995291696188285160163878957e-10L, -0.4115903174976698586423942522798295941341e-10L, -0.4115903174807291996971920353118933704059e-10L, },
- { 0.2910383045673370361328125e-10L, 0.2910383045631018713966231713156171158976e-10L, 0.2910383045715722008691250882008221724786e-10L, },
- { -0.2910383045673370361328125e-10L, -0.2910383045715722008691661747063039282285e-10L, -0.2910383045631018713965820848101383495845e-10L, },
- { 0.2057951587445997645848094142580081939479e-10L, 0.2057951587424821822167027159569772901036e-10L, 0.2057951587467173469529596913789992503469e-10L, },
- { -0.2057951587445997645848094142580081939479e-10L, -0.205795158746717346952974217652319799438e-10L, -0.2057951587424821822166881896836574883717e-10L, },
- { 0.14551915228366851806640625e-10L, 0.1455191522826097268823486462025345500282e-10L, 0.1455191522847273092504792612370204544388e-10L, },
- { -0.14551915228366851806640625e-10L, -0.1455191522847273092504843970502055804876e-10L, -0.1455191522826097268823435103893496108191e-10L, },
- { 0.1028975793722998822924047071290040969739e-10L, 0.1028975793717704867003744009854164112379e-10L, 0.1028975793728292778844404606250868251343e-10L, },
- { -0.1028975793722998822924047071290040969739e-10L, -0.1028975793728292778844422764092518704157e-10L, -0.1028975793717704867003725852012514126664e-10L, },
- { 0.72759576141834259033203125e-11L, 0.7275957614156956123718744009733740036928e-11L, 0.7275957614209895682922073583260698102783e-11L, },
- { -0.72759576141834259033203125e-11L, -0.7275957614209895682922137780925511594519e-11L, -0.7275957614156956123718679812068927712941e-11L, },
- { 0.5144878968614994114620235356450204848696e-11L, 0.5144878968601759224819432308256387682622e-11L, 0.5144878968628229004421106496550210191044e-11L, },
- { -0.5144878968614994114620235356450204848696e-11L, -0.5144878968628229004421129193852273111093e-11L, -0.514487896860175922481940961095432505451e-11L, },
- { 0.363797880709171295166015625e-11L, 0.3637978807085095506759748078017231913638e-11L, 0.3637978807098330396560588496107072890318e-11L, },
- { -0.363797880709171295166015625e-11L, -0.3637978807098330396560596520815174540293e-11L, -0.3637978807085095506759740053309130336648e-11L, },
- { 0.2572439484307497057310117678225102424348e-11L, 0.2572439484304188334859911241851132472152e-11L, 0.2572439484310805779760332626087345907701e-11L, },
- { -0.2572439484307497057310117678225102424348e-11L, -0.2572439484310805779760335463250103763584e-11L, -0.2572439484304188334859908404688374634515e-11L, },
- { 0.1818989403545856475830078125e-11L, 0.181898940354420211460497407582728258325e-11L, 0.1818989403547510837055185183438255519526e-11L, },
- { -0.1818989403545856475830078125e-11L, -0.1818989403547510837055186186526768223492e-11L, -0.1818989403544202114604973072738769883845e-11L, },
- { 0.1286219742153748528655058839112551212174e-11L, 0.1286219742152921348042506520728369264488e-11L, 0.1286219742154575709267612221432767351825e-11L, },
- { -0.1286219742153748528655058839112551212174e-11L, -0.128621974215457570926761257607811208324e-11L, -0.1286219742152921348042506166083024534213e-11L, },
- { 0.9094947017729282379150390625e-12L, 0.9094947017725146476087627994346924709042e-12L, 0.9094947017733418282213157017234997920852e-12L, },
- { -0.9094947017729282379150390625e-12L, -0.9094947017733418282213158271095638799384e-12L, -0.9094947017725146476087626740486283833361e-12L, },
- { 0.643109871076874264327529419556275606087e-12L, 0.6431098710766674691743912512988939365825e-12L, 0.6431098710770810594806677208056615496228e-12L, },
- { -0.643109871076874264327529419556275606087e-12L, -0.6431098710770810594806677651363296410141e-12L, -0.6431098710766674691743912069682258452625e-12L, },
- { 0.45474735088646411895751953125e-12L, 0.4547473508863607213809504341371570958305e-12L, 0.4547473508865675165340886753826169370521e-12L, },
- { -0.45474735088646411895751953125e-12L, -0.4547473508865675165340886910558749480249e-12L, -0.4547473508863607213809504184638990848755e-12L, },
- { 0.3215549355384371321637647097781378030435e-12L, 0.3215549355383854333754801566311253628365e-12L, 0.3215549355384888309520492795491507775067e-12L, },
- { -0.3215549355384371321637647097781378030435e-12L, -0.3215549355384888309520492850904842889284e-12L, -0.3215549355383854333754801510897918514193e-12L, },
- { 0.227373675443232059478759765625e-12L, 0.2273736754432062100846174874284747712187e-12L, 0.2273736754432579088729020496989969828922e-12L, },
- { -0.227373675443232059478759765625e-12L, -0.2273736754432579088729020516581542342633e-12L, -0.2273736754432062100846174854693175198487e-12L, },
- { 0.1607774677692185660818823548890689015218e-12L, 0.1607774677692056413848112152169824136156e-12L, 0.16077746776923149077895349663915545621e-12L, },
- { -0.1607774677692185660818823548890689015218e-12L, -0.1607774677692314907789534973318221451376e-12L, -0.1607774677692056413848112145243157246883e-12L, },
- { 0.1136868377216160297393798828125e-12L, 0.1136868377216095673908443127735793799622e-12L, 0.1136868377216224920879154535861045893017e-12L, },
- { -0.1136868377216160297393798828125e-12L, -0.1136868377216224920879154538309992457231e-12L, -0.1136868377216095673908443125286847235409e-12L, },
- { 0.8038873388460928304094117744453445076088e-13L, 0.8038873388460605186667339235334615655252e-13L, 0.8038873388461251421520896279547275331701e-13L, },
- { -0.8038873388460928304094117744453445076088e-13L, -0.8038873388461251421520896288205608943295e-13L, -0.803887338846060518666733922667628204366e-13L, },
- { 0.5684341886080801486968994140625e-13L, 0.5684341886080639928255604883529618088522e-13L, 0.5684341886080963045682383406903931527277e-13L, },
- { -0.5684341886080801486968994140625e-13L, -0.5684341886080963045682383409965114732543e-13L, -0.5684341886080639928255604880468434883256e-13L, },
- { 0.4019436694230464152047058872226722538044e-13L, 0.4019436694230383372690364242782431779937e-13L, 0.4019436694230544931403753504917888400498e-13L, },
- { -0.4019436694230464152047058872226722538044e-13L, -0.4019436694230544931403753506000180101947e-13L, -0.4019436694230383372690364241700140078488e-13L, },
- { 0.28421709430404007434844970703125e-13L, 0.2842170943040360353806149755273358720814e-13L, 0.2842170943040441133162844386499584981161e-13L, },
- { -0.28421709430404007434844970703125e-13L, -0.2842170943040441133162844386882232881819e-13L, -0.2842170943040360353806149754890710820156e-13L, },
- { 0.2009718347115232076023529436113361269022e-13L, 0.2009718347115211881184355778481715654133e-13L, 0.2009718347115252270862703094150866271954e-13L, },
- { -0.2009718347115232076023529436113361269022e-13L, -0.2009718347115252270862703094286152734636e-13L, -0.2009718347115211881184355778346429191452e-13L, },
- { 0.142108547152020037174224853515625e-13L, 0.1421085471520190274322661706300802705039e-13L, 0.1421085471520210469161835364155190257708e-13L, },
- { -0.142108547152020037174224853515625e-13L, -0.142108547152021046916183536420302124529e-13L, -0.1421085471520190274322661706252971717457e-13L, },
- { 0.1004859173557616038011764718056680634511e-13L, 0.1004859173557610989301971303614947615118e-13L, 0.1004859173557621086721558132549146077409e-13L, },
- { -0.1004859173557616038011764718056680634511e-13L, -0.1004859173557621086721558132566056885244e-13L, -0.1004859173557610989301971303598036807283e-13L, },
- { 0.710542735760100185871124267578125e-14L, 0.7105427357600976615162275603523054293642e-14L, 0.7105427357601027102260209748218811909792e-14L, },
- { -0.710542735760100185871124267578125e-14L, -0.710542735760102710226020974827860064427e-14L, -0.7105427357600976615162275603463265559164e-14L, },
- { 0.5024295867788080190058823590283403172555e-14L, 0.5024295867788067568284340054136793604486e-14L, 0.5024295867788092811833307126493428270006e-14L, },
- { -0.5024295867788080190058823590283403172555e-14L, -0.50242958677880928118333071265145667798e-14L, -0.5024295867788067568284340054115655094692e-14L, },
- { 0.3552713678800500929355621337890625e-14L, 0.3552713678800494618468379569811128889791e-14L, 0.3552713678800507240242863105992541885638e-14L, },
- { -0.3552713678800500929355621337890625e-14L, -0.3552713678800507240242863106000015477448e-14L, -0.3552713678800494618468379569803655297981e-14L, },
- { 0.2512147933894040095029411795141701586277e-14L, 0.2512147933894036939585790911099764566812e-14L, 0.2512147933894043250473032679191565546916e-14L, },
- { -0.2512147933894040095029411795141701586277e-14L, -0.251214793389404325047303267919420786064e-14L, -0.2512147933894036939585790911097122253087e-14L, },
- { 0.17763568394002504646778106689453125e-14L, 0.1776356839400248886956000226923570074495e-14L, 0.1776356839400252042399621110969857522433e-14L, },
- { -0.17763568394002504646778106689453125e-14L, -0.177635683940025204239962111097079172141e-14L, -0.1776356839400248886956000226922635875519e-14L, },
- { 0.1256073966947020047514705897570850793139e-14L, 0.1256073966947019258653800676559705959841e-14L, 0.1256073966947020836375611118582986494083e-14L, },
- { -0.1256073966947020047514705897570850793139e-14L, -0.1256073966947020836375611118583316783298e-14L, -0.1256073966947019258653800676559375670626e-14L, },
- { 0.88817841970012523233890533447265625e-15L, 0.8881784197001248379084527239669870938798e-15L, 0.8881784197001256267693579449786757307363e-15L, },
- { -0.88817841970012523233890533447265625e-15L, -0.8881784197001256267693579449787925056083e-15L, -0.8881784197001248379084527239668703190077e-15L, },
- { 0.6280369834735100237573529487854253965694e-15L, 0.6280369834735098265421266435325566159411e-15L, 0.6280369834735102209725792540384180356535e-15L, },
- { -0.6280369834735100237573529487854253965694e-15L, -0.6280369834735102209725792540384593218054e-15L, -0.6280369834735098265421266435325153297892e-15L, },
- { 0.444089209850062616169452667236328125e-15L, 0.4440892098500625175618395146098816422519e-15L, 0.4440892098500627147770658198628183983251e-15L, },
- { -0.444089209850062616169452667236328125e-15L, -0.4440892098500627147770658198628329951841e-15L, -0.4440892098500625175618395146098670453929e-15L, },
- { 0.3140184917367550118786764743927126982847e-15L, 0.3140184917367549625748698980794851815896e-15L, 0.3140184917367550611824830507059556972867e-15L, },
- { -0.3140184917367550118786764743927126982847e-15L, -0.3140184917367550611824830507059608580557e-15L, -0.3140184917367549625748698980794800208206e-15L, },
- { 0.2220446049250313080847263336181640625e-15L, 0.2220446049250312834328230454615487925982e-15L, 0.2220446049250313327366296217747848062239e-15L, },
- { -0.2220446049250313080847263336181640625e-15L, -0.2220446049250313327366296217747866308313e-15L, -0.2220446049250312834328230454615469679909e-15L, },
- { 0.1570092458683775059393382371963563491423e-15L, 0.1570092458683774936133865931180481797763e-15L, 0.1570092458683775182652898812746664537967e-15L, },
- { -0.1570092458683775059393382371963563491423e-15L, -0.1570092458683775182652898812746670988928e-15L, -0.1570092458683774936133865931180475346802e-15L, },
- { 0.11102230246251565404236316680908203125e-15L, 0.1110223024625156478793873447699277576227e-15L, 0.1110223024625156602053389888482369891051e-15L, },
- { -0.11102230246251565404236316680908203125e-15L, -0.111022302462515660205338988848237217181e-15L, -0.1110223024625156478793873447699275295468e-15L, },
- { 0.7850462293418875296966911859817817457117e-16L, 0.7850462293418874988818120757860097095564e-16L, 0.7850462293418875605115702961775562009775e-16L, },
- { -0.7850462293418875296966911859817817457117e-16L, -0.7850462293418875605115702961775570073477e-16L, -0.7850462293418874988818120757860089031862e-16L, },
- { 0.55511151231257827021181583404541015625e-16L, 0.555111512312578254804376278947523901992e-16L, 0.5551115123125782856192553891432972657927e-16L, },
- { -0.55511151231257827021181583404541015625e-16L, -0.5551115123125782856192553891432975508876e-16L, -0.5551115123125782548043762789475236168971e-16L, },
- { 0.3925231146709437648483455929908908728559e-16L, 0.3925231146709437571446258154419476622245e-16L, 0.392523114670943772552065370539834385876e-16L, },
- { -0.3925231146709437648483455929908908728559e-16L, -0.3925231146709437725520653705398344866723e-16L, -0.3925231146709437571446258154419475614282e-16L, },
- { 0.277555756156289135105907917022705078125e-16L, 0.2775557561562891312540480282482334432868e-16L, 0.2775557561562891389577678057971768198738e-16L, },
- { -0.277555756156289135105907917022705078125e-16L, -0.2775557561562891389577678057971768555107e-16L, -0.2775557561562891312540480282482334076499e-16L, },
- { 0.1962615573354718824241727964954454364279e-16L, 0.196261557335471880498242852108209608571e-16L, 0.1962615573354718843501027408826813020834e-16L, },
- { -0.1962615573354718824241727964954454364279e-16L, -0.196261557335471884350102740882681314683e-16L, -0.1962615573354718804982428521082095959715e-16L, },
- { 0.1387778780781445675529539585113525390625e-16L, 0.1387778780781445665899889863177346214437e-16L, 0.1387778780781445685159189307049704700451e-16L, },
- { -0.1387778780781445675529539585113525390625e-16L, -0.1387778780781445685159189307049704744997e-16L, -0.1387778780781445665899889863177346169891e-16L, },
- { 0.9813077866773594121208639824772271821396e-17L, 0.9813077866773594073060391215091375809985e-17L, 0.981307786677359416935688843445316830529e-17L, },
- { -0.9813077866773594121208639824772271821396e-17L, -0.9813077866773594169356888434453168462784e-17L, -0.9813077866773594073060391215091375652491e-17L, },
- { 0.6938893903907228377647697925567626953125e-17L, 0.693889390390722835357357362072717890129e-17L, 0.6938893903907228401721822230408075172007e-17L, },
- { -0.6938893903907228377647697925567626953125e-17L, -0.693889390390722840172182223040807522769e-17L, -0.6938893903907228353573573620727178845608e-17L, },
- { 0.4906538933386797060604319912386135910698e-17L, 0.4906538933386797048567257759965911868472e-17L, 0.4906538933386797072641382064806360011985e-17L, },
- { -0.4906538933386797060604319912386135910698e-17L, -0.4906538933386797072641382064806360031672e-17L, -0.4906538933386797048567257759965911848785e-17L, },
- { 0.3469446951953614188823848962783813476563e-17L, 0.3469446951953614182805317886573701449683e-17L, 0.3469446951953614194842380038993925524323e-17L, },
- { -0.3469446951953614188823848962783813476563e-17L, -0.3469446951953614194842380038993925531283e-17L, -0.3469446951953614182805317886573701442723e-17L, },
- { 0.2453269466693398530302159956193067955349e-17L, 0.2453269466693398527292894418088011939871e-17L, 0.245326946669339853331142549429812397821e-17L, },
- { -0.2453269466693398530302159956193067955349e-17L, -0.2453269466693398533311425494298123980671e-17L, -0.245326946669339852729289441808801193741e-17L, },
- { 0.1734723475976807094411924481391906738281e-17L, 0.1734723475976807092907291712339378729821e-17L, 0.1734723475976807095916557250444434749351e-17L, },
- { -0.1734723475976807094411924481391906738281e-17L, -0.1734723475976807095916557250444434750221e-17L, -0.1734723475976807092907291712339378728951e-17L, },
- { 0.1226634733346699265151079978096533977675e-17L, 0.122663473334669926439876359357026997319e-17L, 0.1226634733346699265903396362622797983082e-17L, },
- { -0.1226634733346699265151079978096533977675e-17L, -0.122663473334669926590339636262279798339e-17L, -0.1226634733346699264398763593570269972882e-17L, },
- { 0.8673617379884035472059622406959533691406e-18L, 0.8673617379884035468298040484328213668081e-18L, 0.8673617379884035475821204329590853717994e-18L, },
- { -0.8673617379884035472059622406959533691406e-18L, -0.8673617379884035475821204329590853719081e-18L, -0.8673617379884035468298040484328213666994e-18L, },
- { 0.6133173666733496325755399890482669888373e-18L, 0.6133173666733496323874608929167009876392e-18L, 0.6133173666733496327636190851798329901507e-18L, },
- { -0.6133173666733496325755399890482669888373e-18L, -0.6133173666733496327636190851798329901892e-18L, -0.6133173666733496323874608929167009876007e-18L, },
- { 0.4336808689942017736029811203479766845703e-18L, 0.43368086899420177350894157228219368396e-18L, 0.4336808689942017736970206684137596852214e-18L, },
- { -0.4336808689942017736029811203479766845703e-18L, -0.433680868994201773697020668413759685235e-18L, -0.4336808689942017735089415722821936839464e-18L, },
- { 0.3066586833366748162877699945241334944186e-18L, 0.3066586833366748162407502204912419941095e-18L, 0.3066586833366748163347897685570249947422e-18L, },
- { -0.3066586833366748162877699945241334944186e-18L, -0.306658683336674816334789768557024994747e-18L, -0.3066586833366748162407502204912419941047e-18L, },
- { 0.2168404344971008868014905601739883422852e-18L, 0.2168404344971008867779806731575425921292e-18L, 0.2168404344971008868250004471904340924462e-18L, },
- { -0.2168404344971008868014905601739883422852e-18L, -0.2168404344971008868250004471904340924479e-18L, -0.2168404344971008867779806731575425921275e-18L, },
- { 0.1533293416683374081438849972620667472093e-18L, 0.1533293416683374081321300537538438721308e-18L, 0.1533293416683374081556399407702896222896e-18L, },
- { -0.1533293416683374081438849972620667472093e-18L, -0.1533293416683374081556399407702896222902e-18L, -0.1533293416683374081321300537538438721302e-18L, },
- { 0.1084202172485504434007452800869941711426e-18L, 0.1084202172485504433948678083328827336032e-18L, 0.1084202172485504434066227518411056086826e-18L, },
- { -0.1084202172485504434007452800869941711426e-18L, -0.1084202172485504434066227518411056086828e-18L, -0.1084202172485504433948678083328827336029e-18L, },
- { 0.7666467083416870407194249863103337360466e-19L, 0.7666467083416870406900376275397765483489e-19L, 0.7666467083416870407488123450808909237466e-19L, },
- { -0.7666467083416870407194249863103337360466e-19L, -0.7666467083416870407488123450808909237473e-19L, -0.7666467083416870406900376275397765483481e-19L, },
- { 0.5421010862427522170037264004349708557129e-19L, 0.5421010862427522169890327210496922618638e-19L, 0.5421010862427522170184200798202494495628e-19L, },
- { -0.5421010862427522170037264004349708557129e-19L, -0.542101086242752217018420079820249449563e-19L, -0.5421010862427522169890327210496922618635e-19L, },
- { 0.3833233541708435203597124931551668680233e-19L, 0.3833233541708435203523656534625275710987e-19L, 0.3833233541708435203670593328478061649482e-19L, },
- { -0.3833233541708435203597124931551668680233e-19L, -0.3833233541708435203670593328478061649483e-19L, -0.3833233541708435203523656534625275710986e-19L, },
- { 0.2710505431213761085018632002174854278564e-19L, 0.2710505431213761084981897803711657793941e-19L, 0.2710505431213761085055366200638050763189e-19L, },
- { -0.2710505431213761085018632002174854278564e-19L, -0.2710505431213761085055366200638050763189e-19L, -0.2710505431213761084981897803711657793941e-19L, },
- { 0.1916616770854217601798562465775834340116e-19L, 0.1916616770854217601780195366544236097805e-19L, 0.1916616770854217601816929565007432582429e-19L, },
- { -0.1916616770854217601798562465775834340116e-19L, -0.1916616770854217601816929565007432582429e-19L, -0.1916616770854217601780195366544236097805e-19L, },
- { 0.1355252715606880542509316001087427139282e-19L, 0.1355252715606880542500132451471628018126e-19L, 0.1355252715606880542518499550703226260438e-19L, },
- { -0.1355252715606880542509316001087427139282e-19L, -0.1355252715606880542518499550703226260438e-19L, -0.1355252715606880542500132451471628018126e-19L, },
- { 0.9583083854271088008992812328879171700582e-20L, 0.9583083854271088008946894580800176094803e-20L, 0.9583083854271088009038730076958167306363e-20L, },
- { -0.9583083854271088008992812328879171700582e-20L, -0.9583083854271088009038730076958167306363e-20L, -0.9583083854271088008946894580800176094803e-20L, },
- { 0.6776263578034402712546580005437135696411e-20L, 0.6776263578034402712523621131397637893521e-20L, 0.6776263578034402712569538879476633499301e-20L, },
- { -0.6776263578034402712546580005437135696411e-20L, -0.6776263578034402712569538879476633499301e-20L, -0.6776263578034402712523621131397637893521e-20L, },
- { 0.4791541927135544004496406164439585850291e-20L, 0.4791541927135544004484926727419836948846e-20L, 0.4791541927135544004507885601459334751736e-20L, },
- { -0.4791541927135544004496406164439585850291e-20L, -0.4791541927135544004507885601459334751736e-20L, -0.4791541927135544004484926727419836948846e-20L, },
- { 0.3388131789017201356273290002718567848206e-20L, 0.3388131789017201356267550284208693397483e-20L, 0.3388131789017201356279029721228442298928e-20L, },
- { -0.3388131789017201356273290002718567848206e-20L, -0.3388131789017201356279029721228442298928e-20L, -0.3388131789017201356267550284208693397483e-20L, },
- { 0.2395770963567772002248203082219792925146e-20L, 0.2395770963567772002245333222964855699784e-20L, 0.2395770963567772002251072941474730150507e-20L, },
- { -0.2395770963567772002248203082219792925146e-20L, -0.2395770963567772002251072941474730150507e-20L, -0.2395770963567772002245333222964855699784e-20L, },
- { 0.1694065894508600678136645001359283924103e-20L, 0.1694065894508600678135210071731815311422e-20L, 0.1694065894508600678138079930986752536783e-20L, },
- { -0.1694065894508600678136645001359283924103e-20L, -0.1694065894508600678138079930986752536783e-20L, -0.1694065894508600678135210071731815311422e-20L, },
- { 0.1197885481783886001124101541109896462573e-20L, 0.1197885481783886001123384076296162156232e-20L, 0.1197885481783886001124819005923630768913e-20L, },
- { -0.1197885481783886001124101541109896462573e-20L, -0.1197885481783886001124819005923630768913e-20L, -0.1197885481783886001123384076296162156232e-20L, },
- { 0.8470329472543003390683225006796419620514e-21L, 0.8470329472543003390679637682727748088812e-21L, 0.8470329472543003390686812330865091152215e-21L, },
- { -0.8470329472543003390683225006796419620514e-21L, -0.8470329472543003390686812330865091152215e-21L, -0.8470329472543003390679637682727748088812e-21L, },
- { 0.5989427408919430005620507705549482312864e-21L, 0.5989427408919430005618714043515146547013e-21L, 0.5989427408919430005622301367583818078715e-21L, },
- { -0.5989427408919430005620507705549482312864e-21L, -0.5989427408919430005622301367583818078715e-21L, -0.5989427408919430005618714043515146547013e-21L, },
- { 0.4235164736271501695341612503398209810257e-21L, 0.4235164736271501695340715672381041927332e-21L, 0.4235164736271501695342509334415377693182e-21L, },
- { -0.4235164736271501695341612503398209810257e-21L, -0.4235164736271501695342509334415377693182e-21L, -0.4235164736271501695340715672381041927332e-21L, },
- { 0.2994713704459715002810253852774741156432e-21L, 0.2994713704459715002809805437266157214969e-21L, 0.2994713704459715002810702268283325097895e-21L, },
- { -0.2994713704459715002810253852774741156432e-21L, -0.2994713704459715002810702268283325097895e-21L, -0.2994713704459715002809805437266157214969e-21L, },
- { 0.2117582368135750847670806251699104905128e-21L, 0.2117582368135750847670582043944812934397e-21L, 0.211758236813575084767103045945339687586e-21L, },
- { -0.2117582368135750847670806251699104905128e-21L, -0.211758236813575084767103045945339687586e-21L, -0.2117582368135750847670582043944812934397e-21L, },
- { 0.1497356852229857501405126926387370578216e-21L, 0.149735685222985750140501482251022459285e-21L, 0.1497356852229857501405239030264516563582e-21L, },
- { -0.1497356852229857501405126926387370578216e-21L, -0.1497356852229857501405239030264516563582e-21L, -0.149735685222985750140501482251022459285e-21L, },
- { 0.1058791184067875423835403125849552452564e-21L, 0.1058791184067875423835347073910979459881e-21L, 0.1058791184067875423835459177788125445247e-21L, },
- { -0.1058791184067875423835403125849552452564e-21L, -0.1058791184067875423835459177788125445247e-21L, -0.1058791184067875423835347073910979459881e-21L, },
- { 0.748678426114928750702563463193685289108e-22L, 0.7486784261149287507025354372243987927666e-22L, 0.7486784261149287507025914891629717854494e-22L, },
- { -0.748678426114928750702563463193685289108e-22L, -0.7486784261149287507025914891629717854494e-22L, -0.7486784261149287507025354372243987927666e-22L, },
- { 0.5293955920339377119177015629247762262821e-22L, 0.5293955920339377119176875499401329781114e-22L, 0.5293955920339377119177155759094194744528e-22L, },
- { -0.5293955920339377119177015629247762262821e-22L, -0.5293955920339377119177155759094194744528e-22L, -0.5293955920339377119176875499401329781114e-22L, },
- { 0.374339213057464375351281731596842644554e-22L, 0.3743392130574643753512747251045210204686e-22L, 0.3743392130574643753512887380891642686394e-22L, },
- { -0.374339213057464375351281731596842644554e-22L, -0.3743392130574643753512887380891642686394e-22L, -0.3743392130574643753512747251045210204686e-22L, },
- { 0.2646977960169688559588507814623881131411e-22L, 0.2646977960169688559588472782162273010984e-22L, 0.2646977960169688559588542847085489251837e-22L, },
- { -0.2646977960169688559588507814623881131411e-22L, -0.2646977960169688559588542847085489251837e-22L, -0.2646977960169688559588472782162273010984e-22L, },
- { 0.187169606528732187675640865798421322277e-22L, 0.1871696065287321876756391141753409162557e-22L, 0.1871696065287321876756426174215017282983e-22L, },
- { -0.187169606528732187675640865798421322277e-22L, -0.1871696065287321876756426174215017282983e-22L, -0.1871696065287321876756391141753409162557e-22L, },
- { 0.1323488980084844279794253907311940565705e-22L, 0.1323488980084844279794245149196538535599e-22L, 0.1323488980084844279794262665427342595812e-22L, },
- { -0.1323488980084844279794253907311940565705e-22L, -0.1323488980084844279794262665427342595812e-22L, -0.1323488980084844279794245149196538535599e-22L, },
- { 0.935848032643660938378204328992106611385e-23L, 0.9358480326436609383781999499344055963317e-23L, 0.9358480326436609383782087080498076264383e-23L, },
- { -0.935848032643660938378204328992106611385e-23L, -0.9358480326436609383782087080498076264383e-23L, -0.9358480326436609383781999499344055963317e-23L, },
- { 0.6617444900424221398971269536559702828526e-23L, 0.661744490042422139897124764127119775326e-23L, 0.6617444900424221398971291431848207903793e-23L, },
- { -0.6617444900424221398971269536559702828526e-23L, -0.6617444900424221398971291431848207903793e-23L, -0.661744490042422139897124764127119775326e-23L, },
- { 0.4679240163218304691891021644960533056925e-23L, 0.4679240163218304691891010697316280519292e-23L, 0.4679240163218304691891032592604785594558e-23L, },
- { -0.4679240163218304691891021644960533056925e-23L, -0.4679240163218304691891032592604785594558e-23L, -0.4679240163218304691891010697316280519292e-23L, },
- { 0.3308722450212110699485634768279851414263e-23L, 0.3308722450212110699485629294457725145447e-23L, 0.330872245021211069948564024210197768308e-23L, },
- { -0.3308722450212110699485634768279851414263e-23L, -0.330872245021211069948564024210197768308e-23L, -0.3308722450212110699485629294457725145447e-23L, },
- { 0.2339620081609152345945510822480266528463e-23L, 0.2339620081609152345945508085569203394054e-23L, 0.2339620081609152345945513559391329662871e-23L, },
- { -0.2339620081609152345945510822480266528463e-23L, -0.2339620081609152345945513559391329662871e-23L, -0.2339620081609152345945508085569203394054e-23L, },
- { 0.1654361225106055349742817384139925707132e-23L, 0.1654361225106055349742816015684394139927e-23L, 0.1654361225106055349742818752595457274336e-23L, },
- { -0.1654361225106055349742817384139925707132e-23L, -0.1654361225106055349742818752595457274336e-23L, -0.1654361225106055349742816015684394139927e-23L, },
- { 0.1169810040804576172972755411240133264231e-23L, 0.1169810040804576172972754727012367480629e-23L, 0.1169810040804576172972756095467899047833e-23L, },
- { -0.1169810040804576172972755411240133264231e-23L, -0.1169810040804576172972756095467899047833e-23L, -0.1169810040804576172972754727012367480629e-23L, },
- { 0.8271806125530276748714086920699628535658e-24L, 0.8271806125530276748714083499560799617648e-24L, 0.8271806125530276748714090341838457453669e-24L, },
- { -0.8271806125530276748714086920699628535658e-24L, -0.8271806125530276748714090341838457453669e-24L, -0.8271806125530276748714083499560799617648e-24L, },
- { 0.5849050204022880864863777056200666321156e-24L, 0.5849050204022880864863775345631251862151e-24L, 0.5849050204022880864863778766770080780161e-24L, },
- { -0.5849050204022880864863777056200666321156e-24L, -0.5849050204022880864863778766770080780161e-24L, -0.5849050204022880864863775345631251862151e-24L, },
- { 0.4135903062765138374357043460349814267829e-24L, 0.4135903062765138374357042605065107038326e-24L, 0.4135903062765138374357044315634521497332e-24L, },
- { -0.4135903062765138374357043460349814267829e-24L, -0.4135903062765138374357044315634521497332e-24L, -0.4135903062765138374357042605065107038326e-24L, },
- { 0.2924525102011440432431888528100333160578e-24L, 0.2924525102011440432431888100457979545827e-24L, 0.2924525102011440432431888955742686775329e-24L, },
- { -0.2924525102011440432431888528100333160578e-24L, -0.2924525102011440432431888955742686775329e-24L, -0.2924525102011440432431888100457979545827e-24L, },
- { 0.2067951531382569187178521730174907133915e-24L, 0.2067951531382569187178521516353730326539e-24L, 0.206795153138256918717852194399608394129e-24L, },
- { -0.2067951531382569187178521730174907133915e-24L, -0.206795153138256918717852194399608394129e-24L, -0.2067951531382569187178521516353730326539e-24L, },
- { 0.1462262551005720216215944264050166580289e-24L, 0.1462262551005720216215944157139578176601e-24L, 0.1462262551005720216215944370960754983977e-24L, },
- { -0.1462262551005720216215944264050166580289e-24L, -0.1462262551005720216215944370960754983977e-24L, -0.1462262551005720216215944157139578176601e-24L, },
- { 0.1033975765691284593589260865087453566957e-24L, 0.1033975765691284593589260811632159365113e-24L, 0.1033975765691284593589260918542747768801e-24L, },
- { -0.1033975765691284593589260865087453566957e-24L, -0.1033975765691284593589260918542747768801e-24L, -0.1033975765691284593589260811632159365113e-24L, },
- { 0.7311312755028601081079721320250832901445e-25L, 0.7311312755028601081079721052974361892226e-25L, 0.7311312755028601081079721587527303910665e-25L, },
- { -0.7311312755028601081079721320250832901445e-25L, -0.7311312755028601081079721587527303910665e-25L, -0.7311312755028601081079721052974361892226e-25L, },
- { 0.5169878828456422967946304325437267834786e-25L, 0.5169878828456422967946304191799032330177e-25L, 0.5169878828456422967946304459075503339396e-25L, },
- { -0.5169878828456422967946304325437267834786e-25L, -0.5169878828456422967946304459075503339396e-25L, -0.5169878828456422967946304191799032330177e-25L, },
- { 0.3655656377514300540539860660125416450723e-25L, 0.3655656377514300540539860593306298698418e-25L, 0.3655656377514300540539860726944534203028e-25L, },
- { -0.3655656377514300540539860660125416450723e-25L, -0.3655656377514300540539860726944534203028e-25L, -0.3655656377514300540539860593306298698418e-25L, },
- { 0.2584939414228211483973152162718633917393e-25L, 0.2584939414228211483973152129309075041241e-25L, 0.2584939414228211483973152196128192793546e-25L, },
- { -0.2584939414228211483973152162718633917393e-25L, -0.2584939414228211483973152196128192793546e-25L, -0.2584939414228211483973152129309075041241e-25L, },
- { 0.1827828188757150270269930330062708225361e-25L, 0.1827828188757150270269930313357928787285e-25L, 0.1827828188757150270269930346767487663438e-25L, },
- { -0.1827828188757150270269930330062708225361e-25L, -0.1827828188757150270269930346767487663438e-25L, -0.1827828188757150270269930313357928787285e-25L, },
- { 0.1292469707114105741986576081359316958697e-25L, 0.1292469707114105741986576073006927239658e-25L, 0.1292469707114105741986576089711706677735e-25L, },
- { -0.1292469707114105741986576081359316958697e-25L, -0.1292469707114105741986576089711706677735e-25L, -0.1292469707114105741986576073006927239658e-25L, },
- { 0.9139140943785751351349651650313541126807e-26L, 0.9139140943785751351349651608551592531616e-26L, 0.9139140943785751351349651692075489721997e-26L, },
- { -0.9139140943785751351349651650313541126807e-26L, -0.9139140943785751351349651692075489721997e-26L, -0.9139140943785751351349651608551592531616e-26L, },
- { 0.6462348535570528709932880406796584793483e-26L, 0.6462348535570528709932880385915610495888e-26L, 0.6462348535570528709932880427677559091078e-26L, },
- { -0.6462348535570528709932880406796584793483e-26L, -0.6462348535570528709932880427677559091078e-26L, -0.6462348535570528709932880385915610495888e-26L, },
- { 0.4569570471892875675674825825156770563403e-26L, 0.4569570471892875675674825814716283414606e-26L, 0.4569570471892875675674825835597257712201e-26L, },
- { -0.4569570471892875675674825825156770563403e-26L, -0.4569570471892875675674825835597257712201e-26L, -0.4569570471892875675674825814716283414606e-26L, },
- { 0.3231174267785264354966440203398292396741e-26L, 0.3231174267785264354966440198178048822343e-26L, 0.323117426778526435496644020861853597114e-26L, },
- { -0.3231174267785264354966440203398292396741e-26L, -0.323117426778526435496644020861853597114e-26L, -0.3231174267785264354966440198178048822343e-26L, },
- { 0.2284785235946437837837412912578385281702e-26L, 0.2284785235946437837837412909968263494502e-26L, 0.2284785235946437837837412915188507068901e-26L, },
- { -0.2284785235946437837837412912578385281702e-26L, -0.2284785235946437837837412915188507068901e-26L, -0.2284785235946437837837412909968263494502e-26L, },
- { 0.1615587133892632177483220101699146198371e-26L, 0.1615587133892632177483220100394085304771e-26L, 0.161558713389263217748322010300420709197e-26L, },
- { -0.1615587133892632177483220101699146198371e-26L, -0.161558713389263217748322010300420709197e-26L, -0.1615587133892632177483220100394085304771e-26L, },
- { 0.1142392617973218918918706456289192640851e-26L, 0.1142392617973218918918706455636662194051e-26L, 0.1142392617973218918918706456941723087651e-26L, },
- { -0.1142392617973218918918706456289192640851e-26L, -0.1142392617973218918918706456941723087651e-26L, -0.1142392617973218918918706455636662194051e-26L, },
- { 0.8077935669463160887416100508495730991854e-27L, 0.8077935669463160887416100505233078757854e-27L, 0.8077935669463160887416100511758383225853e-27L, },
- { -0.8077935669463160887416100508495730991854e-27L, -0.8077935669463160887416100511758383225853e-27L, -0.8077935669463160887416100505233078757854e-27L, },
- { 0.5711963089866094594593532281445963204254e-27L, 0.5711963089866094594593532279814637087255e-27L, 0.5711963089866094594593532283077289321254e-27L, },
- { -0.5711963089866094594593532281445963204254e-27L, -0.5711963089866094594593532283077289321254e-27L, -0.5711963089866094594593532279814637087255e-27L, },
- { 0.4038967834731580443708050254247865495927e-27L, 0.4038967834731580443708050253432202437427e-27L, 0.4038967834731580443708050255063528554427e-27L, },
- { -0.4038967834731580443708050254247865495927e-27L, -0.4038967834731580443708050255063528554427e-27L, -0.4038967834731580443708050253432202437427e-27L, },
- { 0.2855981544933047297296766140722981602127e-27L, 0.2855981544933047297296766140315150072877e-27L, 0.2855981544933047297296766141130813131377e-27L, },
- { -0.2855981544933047297296766140722981602127e-27L, -0.2855981544933047297296766141130813131377e-27L, -0.2855981544933047297296766140315150072877e-27L, },
- { 0.2019483917365790221854025127123932747963e-27L, 0.2019483917365790221854025126920016983338e-27L, 0.2019483917365790221854025127327848512588e-27L, },
- { -0.2019483917365790221854025127123932747963e-27L, -0.2019483917365790221854025127327848512588e-27L, -0.2019483917365790221854025126920016983338e-27L, },
- { 0.1427990772466523648648383070361490801064e-27L, 0.1427990772466523648648383070259532918751e-27L, 0.1427990772466523648648383070463448683376e-27L, },
- { -0.1427990772466523648648383070361490801064e-27L, -0.1427990772466523648648383070463448683376e-27L, -0.1427990772466523648648383070259532918751e-27L, },
- { 0.1009741958682895110927012563561966373982e-27L, 0.1009741958682895110927012563510987432825e-27L, 0.1009741958682895110927012563612945315138e-27L, },
- { -0.1009741958682895110927012563561966373982e-27L, -0.1009741958682895110927012563612945315138e-27L, -0.1009741958682895110927012563510987432825e-27L, },
- { 0.7139953862332618243241915351807454005318e-28L, 0.7139953862332618243241915351552559299537e-28L, 0.7139953862332618243241915352062348711099e-28L, },
- { -0.7139953862332618243241915351807454005318e-28L, -0.7139953862332618243241915352062348711099e-28L, -0.7139953862332618243241915351552559299537e-28L, },
- { 0.5048709793414475554635062817809831869909e-28L, 0.5048709793414475554635062817682384517018e-28L, 0.5048709793414475554635062817937279222799e-28L, },
- { -0.5048709793414475554635062817809831869909e-28L, -0.5048709793414475554635062817937279222799e-28L, -0.5048709793414475554635062817682384517018e-28L, },
- { 0.3569976931166309121620957675903727002659e-28L, 0.3569976931166309121620957675840003326214e-28L, 0.3569976931166309121620957675967450679104e-28L, },
- { -0.3569976931166309121620957675903727002659e-28L, -0.3569976931166309121620957675967450679104e-28L, -0.3569976931166309121620957675840003326214e-28L, },
- { 0.2524354896707237777317531408904915934954e-28L, 0.2524354896707237777317531408873054096732e-28L, 0.2524354896707237777317531408936777773177e-28L, },
- { -0.2524354896707237777317531408904915934954e-28L, -0.2524354896707237777317531408936777773177e-28L, -0.2524354896707237777317531408873054096732e-28L, },
- { 0.1784988465583154560810478837951863501329e-28L, 0.1784988465583154560810478837935932582218e-28L, 0.1784988465583154560810478837967794420441e-28L, },
- { -0.1784988465583154560810478837951863501329e-28L, -0.1784988465583154560810478837967794420441e-28L, -0.1784988465583154560810478837935932582218e-28L, },
- { 0.1262177448353618888658765704452457967477e-28L, 0.1262177448353618888658765704444492507921e-28L, 0.1262177448353618888658765704460423427033e-28L, },
- { -0.1262177448353618888658765704452457967477e-28L, -0.1262177448353618888658765704460423427033e-28L, -0.1262177448353618888658765704444492507921e-28L, },
- { 0.8924942327915772804052394189759317506647e-29L, 0.8924942327915772804052394189719490208869e-29L, 0.8924942327915772804052394189799144804425e-29L, },
- { -0.8924942327915772804052394189759317506647e-29L, -0.8924942327915772804052394189799144804425e-29L, -0.8924942327915772804052394189719490208869e-29L, },
- { 0.6310887241768094443293828522262289837386e-29L, 0.6310887241768094443293828522242376188496e-29L, 0.6310887241768094443293828522282203486275e-29L, },
- { -0.6310887241768094443293828522262289837386e-29L, -0.6310887241768094443293828522282203486275e-29L, -0.6310887241768094443293828522242376188496e-29L, },
- { 0.4462471163957886402026197094879658753324e-29L, 0.4462471163957886402026197094869701928879e-29L, 0.4462471163957886402026197094889615577768e-29L, },
- { -0.4462471163957886402026197094879658753324e-29L, -0.4462471163957886402026197094889615577768e-29L, -0.4462471163957886402026197094869701928879e-29L, },
- { 0.3155443620884047221646914261131144918693e-29L, 0.3155443620884047221646914261126166506471e-29L, 0.3155443620884047221646914261136123330915e-29L, },
- { -0.3155443620884047221646914261131144918693e-29L, -0.3155443620884047221646914261136123330915e-29L, -0.3155443620884047221646914261126166506471e-29L, },
- { 0.2231235581978943201013098547439829376662e-29L, 0.2231235581978943201013098547437340170551e-29L, 0.2231235581978943201013098547442318582773e-29L, },
- { -0.2231235581978943201013098547439829376662e-29L, -0.2231235581978943201013098547442318582773e-29L, -0.2231235581978943201013098547437340170551e-29L, },
- { 0.1577721810442023610823457130565572459346e-29L, 0.1577721810442023610823457130564327856291e-29L, 0.1577721810442023610823457130566817062402e-29L, },
- { -0.1577721810442023610823457130565572459346e-29L, -0.1577721810442023610823457130566817062402e-29L, -0.1577721810442023610823457130564327856291e-29L, },
- { 0.1115617790989471600506549273719914688331e-29L, 0.1115617790989471600506549273719292386803e-29L, 0.1115617790989471600506549273720536989859e-29L, },
- { -0.1115617790989471600506549273719914688331e-29L, -0.1115617790989471600506549273720536989859e-29L, -0.1115617790989471600506549273719292386803e-29L, },
- { 0.7888609052210118054117285652827862296732e-30L, 0.7888609052210118054117285652824750789093e-30L, 0.7888609052210118054117285652830973804371e-30L, },
- { -0.7888609052210118054117285652827862296732e-30L, -0.7888609052210118054117285652830973804371e-30L, -0.7888609052210118054117285652824750789093e-30L, },
- { 0.5578088954947358002532746368599573441654e-30L, 0.5578088954947358002532746368598017687835e-30L, 0.5578088954947358002532746368601129195474e-30L, },
- { -0.5578088954947358002532746368599573441654e-30L, -0.5578088954947358002532746368601129195474e-30L, -0.5578088954947358002532746368598017687835e-30L, },
- { 0.3944304526105059027058642826413931148366e-30L, 0.3944304526105059027058642826413153271456e-30L, 0.3944304526105059027058642826414709025276e-30L, },
- { -0.3944304526105059027058642826413931148366e-30L, -0.3944304526105059027058642826414709025276e-30L, -0.3944304526105059027058642826413153271456e-30L, },
- { 0.2789044477473679001266373184299786720827e-30L, 0.2789044477473679001266373184299397782372e-30L, 0.2789044477473679001266373184300175659282e-30L, },
- { -0.2789044477473679001266373184299786720827e-30L, -0.2789044477473679001266373184300175659282e-30L, -0.2789044477473679001266373184299397782372e-30L, },
- { 0.1972152263052529513529321413206965574183e-30L, 0.1972152263052529513529321413206771104956e-30L, 0.197215226305252951352932141320716004341e-30L, },
- { -0.1972152263052529513529321413206965574183e-30L, -0.197215226305252951352932141320716004341e-30L, -0.1972152263052529513529321413206771104956e-30L, },
- { 0.1394522238736839500633186592149893360414e-30L, 0.13945222387368395006331865921497961258e-30L, 0.1394522238736839500633186592149990595027e-30L, },
- { -0.1394522238736839500633186592149893360414e-30L, -0.1394522238736839500633186592149990595027e-30L, -0.13945222387368395006331865921497961258e-30L, },
- { 0.9860761315262647567646607066034827870915e-31L, 0.9860761315262647567646607066034341697846e-31L, 0.9860761315262647567646607066035314043984e-31L, },
- { -0.9860761315262647567646607066034827870915e-31L, -0.9860761315262647567646607066035314043984e-31L, -0.9860761315262647567646607066034341697846e-31L, },
- { 0.6972611193684197503165932960749466802068e-31L, 0.6972611193684197503165932960749223715534e-31L, 0.6972611193684197503165932960749709888602e-31L, },
- { -0.6972611193684197503165932960749466802068e-31L, -0.6972611193684197503165932960749709888602e-31L, -0.6972611193684197503165932960749223715534e-31L, },
- { 0.4930380657631323783823303533017413935458e-31L, 0.493038065763132378382330353301729239219e-31L, 0.4930380657631323783823303533017535478725e-31L, },
- { -0.4930380657631323783823303533017413935458e-31L, -0.4930380657631323783823303533017535478725e-31L, -0.493038065763132378382330353301729239219e-31L, },
- { 0.3486305596842098751582966480374733401034e-31L, 0.34863055968420987515829664803746726294e-31L, 0.3486305596842098751582966480374794172668e-31L, },
- { -0.3486305596842098751582966480374733401034e-31L, -0.3486305596842098751582966480374794172668e-31L, -0.34863055968420987515829664803746726294e-31L, },
- { 0.2465190328815661891911651766508706967729e-31L, 0.2465190328815661891911651766508676581912e-31L, 0.2465190328815661891911651766508737353546e-31L, },
- { -0.2465190328815661891911651766508706967729e-31L, -0.2465190328815661891911651766508737353546e-31L, -0.2465190328815661891911651766508676581912e-31L, },
- { 0.1743152798421049375791483240187366700517e-31L, 0.1743152798421049375791483240187351507609e-31L, 0.1743152798421049375791483240187381893425e-31L, },
- { -0.1743152798421049375791483240187366700517e-31L, -0.1743152798421049375791483240187381893425e-31L, -0.1743152798421049375791483240187351507609e-31L, },
- { 0.1232595164407830945955825883254353483864e-31L, 0.123259516440783094595582588325434588741e-31L, 0.1232595164407830945955825883254361080319e-31L, },
- { -0.1232595164407830945955825883254353483864e-31L, -0.1232595164407830945955825883254361080319e-31L, -0.123259516440783094595582588325434588741e-31L, },
- { 0.8715763992105246878957416200936833502585e-32L, 0.8715763992105246878957416200936795520314e-32L, 0.8715763992105246878957416200936871484856e-32L, },
- { -0.8715763992105246878957416200936833502585e-32L, -0.8715763992105246878957416200936871484856e-32L, -0.8715763992105246878957416200936795520314e-32L, },
- { 0.6162975822039154729779129416271767419322e-32L, 0.6162975822039154729779129416271748428186e-32L, 0.6162975822039154729779129416271786410457e-32L, },
- { -0.6162975822039154729779129416271767419322e-32L, -0.6162975822039154729779129416271786410457e-32L, -0.6162975822039154729779129416271748428186e-32L, },
- { 0.4357881996052623439478708100468416751293e-32L, 0.4357881996052623439478708100468407255725e-32L, 0.435788199605262343947870810046842624686e-32L, },
- { -0.4357881996052623439478708100468416751293e-32L, -0.435788199605262343947870810046842624686e-32L, -0.4357881996052623439478708100468407255725e-32L, },
- { 0.3081487911019577364889564708135883709661e-32L, 0.3081487911019577364889564708135878961877e-32L, 0.3081487911019577364889564708135888457445e-32L, },
- { -0.3081487911019577364889564708135883709661e-32L, -0.3081487911019577364889564708135888457445e-32L, -0.3081487911019577364889564708135878961877e-32L, },
- { 0.2178940998026311719739354050234208375646e-32L, 0.2178940998026311719739354050234206001754e-32L, 0.2178940998026311719739354050234210749538e-32L, },
- { -0.2178940998026311719739354050234208375646e-32L, -0.2178940998026311719739354050234210749538e-32L, -0.2178940998026311719739354050234206001754e-32L, },
- { 0.154074395550978868244478235406794185483e-32L, 0.1540743955509788682444782354067940667885e-32L, 0.1540743955509788682444782354067943041776e-32L, },
- { -0.154074395550978868244478235406794185483e-32L, -0.1540743955509788682444782354067943041776e-32L, -0.1540743955509788682444782354067940667885e-32L, },
- { 0.1089470499013155859869677025117104187823e-32L, 0.108947049901315585986967702511710359435e-32L, 0.1089470499013155859869677025117104781296e-32L, },
- { -0.1089470499013155859869677025117104187823e-32L, -0.1089470499013155859869677025117104781296e-32L, -0.108947049901315585986967702511710359435e-32L, },
- { 0.7703719777548943412223911770339709274152e-33L, 0.7703719777548943412223911770339706306787e-33L, 0.7703719777548943412223911770339712241517e-33L, },
- { -0.7703719777548943412223911770339709274152e-33L, -0.7703719777548943412223911770339712241517e-33L, -0.7703719777548943412223911770339706306787e-33L, },
- { 0.5447352495065779299348385125585520939116e-33L, 0.5447352495065779299348385125585519455433e-33L, 0.5447352495065779299348385125585522422798e-33L, },
- { -0.5447352495065779299348385125585520939116e-33L, -0.5447352495065779299348385125585522422798e-33L, -0.5447352495065779299348385125585519455433e-33L, },
- { 0.3851859888774471706111955885169854637076e-33L, 0.3851859888774471706111955885169853895235e-33L, 0.3851859888774471706111955885169855378917e-33L, },
- { -0.3851859888774471706111955885169854637076e-33L, -0.3851859888774471706111955885169855378917e-33L, -0.3851859888774471706111955885169853895235e-33L, },
- { 0.2723676247532889649674192562792760469558e-33L, 0.2723676247532889649674192562792760098637e-33L, 0.2723676247532889649674192562792760840478e-33L, },
- { -0.2723676247532889649674192562792760469558e-33L, -0.2723676247532889649674192562792760840478e-33L, -0.2723676247532889649674192562792760098637e-33L, },
- { 0.1925929944387235853055977942584927318538e-33L, 0.1925929944387235853055977942584927133078e-33L, 0.1925929944387235853055977942584927503998e-33L, },
- { -0.1925929944387235853055977942584927318538e-33L, -0.1925929944387235853055977942584927503998e-33L, -0.1925929944387235853055977942584927133078e-33L, },
- { 0.1361838123766444824837096281396380234779e-33L, 0.1361838123766444824837096281396380142049e-33L, 0.1361838123766444824837096281396380327509e-33L, },
- { -0.1361838123766444824837096281396380234779e-33L, -0.1361838123766444824837096281396380327509e-33L, -0.1361838123766444824837096281396380142049e-33L, },
- { 0.9629649721936179265279889712924636592691e-34L, 0.962964972193617926527988971292463612904e-34L, 0.9629649721936179265279889712924637056341e-34L, },
- { -0.9629649721936179265279889712924636592691e-34L, -0.9629649721936179265279889712924637056341e-34L, -0.962964972193617926527988971292463612904e-34L, },
- { 0.6809190618832224124185481406981901173895e-34L, 0.6809190618832224124185481406981900942069e-34L, 0.680919061883222412418548140698190140572e-34L, },
- { -0.6809190618832224124185481406981901173895e-34L, -0.680919061883222412418548140698190140572e-34L, -0.6809190618832224124185481406981900942069e-34L, },
- { 0.4814824860968089632639944856462318296345e-34L, 0.4814824860968089632639944856462318180433e-34L, 0.4814824860968089632639944856462318412258e-34L, },
- { -0.4814824860968089632639944856462318296345e-34L, -0.4814824860968089632639944856462318412258e-34L, -0.4814824860968089632639944856462318180433e-34L, },
- { 0.3404595309416112062092740703490950586947e-34L, 0.3404595309416112062092740703490950528991e-34L, 0.3404595309416112062092740703490950644904e-34L, },
- { -0.3404595309416112062092740703490950586947e-34L, -0.3404595309416112062092740703490950644904e-34L, -0.3404595309416112062092740703490950528991e-34L, },
- { 0.2407412430484044816319972428231159148173e-34L, 0.2407412430484044816319972428231159119194e-34L, 0.2407412430484044816319972428231159177151e-34L, },
- { -0.2407412430484044816319972428231159148173e-34L, -0.2407412430484044816319972428231159177151e-34L, -0.2407412430484044816319972428231159119194e-34L, },
- { 0.1702297654708056031046370351745475293474e-34L, 0.1702297654708056031046370351745475278985e-34L, 0.1702297654708056031046370351745475307963e-34L, },
- { -0.1702297654708056031046370351745475293474e-34L, -0.1702297654708056031046370351745475307963e-34L, -0.1702297654708056031046370351745475278985e-34L, },
- { 0.1203706215242022408159986214115579574086e-34L, 0.1203706215242022408159986214115579566842e-34L, 0.1203706215242022408159986214115579581331e-34L, },
- { -0.1203706215242022408159986214115579574086e-34L, -0.1203706215242022408159986214115579581331e-34L, -0.1203706215242022408159986214115579566842e-34L, },
- { 0.8511488273540280155231851758727376467368e-35L, 0.8511488273540280155231851758727376431146e-35L, 0.8511488273540280155231851758727376503591e-35L, },
- { -0.8511488273540280155231851758727376467368e-35L, -0.8511488273540280155231851758727376503591e-35L, -0.8511488273540280155231851758727376431146e-35L, },
- { 0.6018531076210112040799931070577897870432e-35L, 0.601853107621011204079993107057789785232e-35L, 0.6018531076210112040799931070577897888543e-35L, },
- { -0.6018531076210112040799931070577897870432e-35L, -0.6018531076210112040799931070577897888543e-35L, -0.601853107621011204079993107057789785232e-35L, },
- { 0.4255744136770140077615925879363688233684e-35L, 0.4255744136770140077615925879363688224628e-35L, 0.425574413677014007761592587936368824274e-35L, },
- { -0.4255744136770140077615925879363688233684e-35L, -0.425574413677014007761592587936368824274e-35L, -0.4255744136770140077615925879363688224628e-35L, },
- { 0.3009265538105056020399965535288948935216e-35L, 0.3009265538105056020399965535288948930688e-35L, 0.3009265538105056020399965535288948939744e-35L, },
- { -0.3009265538105056020399965535288948935216e-35L, -0.3009265538105056020399965535288948939744e-35L, -0.3009265538105056020399965535288948930688e-35L, },
- { 0.2127872068385070038807962939681844116842e-35L, 0.2127872068385070038807962939681844114578e-35L, 0.2127872068385070038807962939681844119106e-35L, },
- { -0.2127872068385070038807962939681844116842e-35L, -0.2127872068385070038807962939681844119106e-35L, -0.2127872068385070038807962939681844114578e-35L, },
- { 0.1504632769052528010199982767644474467608e-35L, 0.1504632769052528010199982767644474466476e-35L, 0.150463276905252801019998276764447446874e-35L, },
- { -0.1504632769052528010199982767644474467608e-35L, -0.150463276905252801019998276764447446874e-35L, -0.1504632769052528010199982767644474466476e-35L, },
- { 0.1063936034192535019403981469840922058421e-35L, 0.1063936034192535019403981469840922057855e-35L, 0.1063936034192535019403981469840922058987e-35L, },
- { -0.1063936034192535019403981469840922058421e-35L, -0.1063936034192535019403981469840922058987e-35L, -0.1063936034192535019403981469840922057855e-35L, },
- { 0.7523163845262640050999913838222372338039e-36L, 0.752316384526264005099991383822237233521e-36L, 0.7523163845262640050999913838222372340869e-36L, },
- { -0.7523163845262640050999913838222372338039e-36L, -0.7523163845262640050999913838222372340869e-36L, -0.752316384526264005099991383822237233521e-36L, },
- { 0.5319680170962675097019907349204610292105e-36L, 0.531968017096267509701990734920461029069e-36L, 0.531968017096267509701990734920461029352e-36L, },
- { -0.5319680170962675097019907349204610292105e-36L, -0.531968017096267509701990734920461029352e-36L, -0.531968017096267509701990734920461029069e-36L, },
- { 0.376158192263132002549995691911118616902e-36L, 0.3761581922631320025499956919111186168312e-36L, 0.3761581922631320025499956919111186169727e-36L, },
- { -0.376158192263132002549995691911118616902e-36L, -0.3761581922631320025499956919111186169727e-36L, -0.3761581922631320025499956919111186168312e-36L, },
- { 0.2659840085481337548509953674602305146053e-36L, 0.2659840085481337548509953674602305145699e-36L, 0.2659840085481337548509953674602305146406e-36L, },
- { -0.2659840085481337548509953674602305146053e-36L, -0.2659840085481337548509953674602305146406e-36L, -0.2659840085481337548509953674602305145699e-36L, },
- { 0.188079096131566001274997845955559308451e-36L, 0.1880790961315660012749978459555593084333e-36L, 0.1880790961315660012749978459555593084687e-36L, },
- { -0.188079096131566001274997845955559308451e-36L, -0.1880790961315660012749978459555593084687e-36L, -0.1880790961315660012749978459555593084333e-36L, },
- { 0.1329920042740668774254976837301152573026e-36L, 0.1329920042740668774254976837301152572938e-36L, 0.1329920042740668774254976837301152573115e-36L, },
- { -0.1329920042740668774254976837301152573026e-36L, -0.1329920042740668774254976837301152573115e-36L, -0.1329920042740668774254976837301152572938e-36L, },
- { 0.9403954806578300063749892297777965422549e-37L, 0.9403954806578300063749892297777965422107e-37L, 0.9403954806578300063749892297777965422991e-37L, },
- { -0.9403954806578300063749892297777965422549e-37L, -0.9403954806578300063749892297777965422991e-37L, -0.9403954806578300063749892297777965422107e-37L, },
- { 0.6649600213703343871274884186505762865131e-37L, 0.664960021370334387127488418650576286491e-37L, 0.6649600213703343871274884186505762865353e-37L, },
- { -0.6649600213703343871274884186505762865131e-37L, -0.6649600213703343871274884186505762865353e-37L, -0.664960021370334387127488418650576286491e-37L, },
- { 0.4701977403289150031874946148888982711275e-37L, 0.4701977403289150031874946148888982711164e-37L, 0.4701977403289150031874946148888982711385e-37L, },
- { -0.4701977403289150031874946148888982711275e-37L, -0.4701977403289150031874946148888982711385e-37L, -0.4701977403289150031874946148888982711164e-37L, },
- { 0.3324800106851671935637442093252881432566e-37L, 0.332480010685167193563744209325288143251e-37L, 0.3324800106851671935637442093252881432621e-37L, },
- { -0.3324800106851671935637442093252881432566e-37L, -0.3324800106851671935637442093252881432621e-37L, -0.332480010685167193563744209325288143251e-37L, },
- { 0.2350988701644575015937473074444491355637e-37L, 0.235098870164457501593747307444449135561e-37L, 0.2350988701644575015937473074444491355665e-37L, },
- { -0.2350988701644575015937473074444491355637e-37L, -0.2350988701644575015937473074444491355665e-37L, -0.235098870164457501593747307444449135561e-37L, },
- { 0.1662400053425835967818721046626440716283e-37L, 0.1662400053425835967818721046626440716269e-37L, 0.1662400053425835967818721046626440716297e-37L, },
- { -0.1662400053425835967818721046626440716283e-37L, -0.1662400053425835967818721046626440716297e-37L, -0.1662400053425835967818721046626440716269e-37L, },
- { 0.1175494350822287507968736537222245677819e-37L, 0.1175494350822287507968736537222245677812e-37L, 0.1175494350822287507968736537222245677826e-37L, },
- { -0.1175494350822287507968736537222245677819e-37L, -0.1175494350822287507968736537222245677826e-37L, -0.1175494350822287507968736537222245677812e-37L, },
- { 0.8312000267129179839093605233132203581414e-38L, 0.831200026712917983909360523313220358138e-38L, 0.8312000267129179839093605233132203581449e-38L, },
- { -0.8312000267129179839093605233132203581414e-38L, -0.8312000267129179839093605233132203581449e-38L, -0.831200026712917983909360523313220358138e-38L, },
- { 0.5877471754111437539843682686111228389093e-38L, 0.5877471754111437539843682686111228389076e-38L, 0.5877471754111437539843682686111228389111e-38L, },
- { -0.5877471754111437539843682686111228389093e-38L, -0.5877471754111437539843682686111228389111e-38L, -0.5877471754111437539843682686111228389076e-38L, },
- { 0.4156000133564589919546802616566101790707e-38L, 0.4156000133564589919546802616566101790699e-38L, 0.4156000133564589919546802616566101790716e-38L, },
- { -0.4156000133564589919546802616566101790707e-38L, -0.4156000133564589919546802616566101790716e-38L, -0.4156000133564589919546802616566101790699e-38L, },
- { 0.2938735877055718769921841343055614194547e-38L, 0.2938735877055718769921841343055614194542e-38L, 0.2938735877055718769921841343055614194551e-38L, },
- { -0.2938735877055718769921841343055614194547e-38L, -0.2938735877055718769921841343055614194551e-38L, -0.2938735877055718769921841343055614194542e-38L, },
-};
+// Note that when this file is first run on a new platform many of
+// these tests will fail: the default accuracy is 1 epsilon which
+// is too tight for most platforms. In this situation you will
+// need to cast a human eye over the error rates reported and make
+// a judgement as to whether they are acceptable. Either way please
+// report the results to the Boost mailing list. Acceptable rates of
+// error are marked up below as a series of regular expressions that
+// identify the compiler/stdlib/platform/data-type/test-data/test-function
+// along with the maximum expected peek and RMS mean errors for that
+// test.
+//
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+
+ //
+ // Catch all cases come last:
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", // test function
+ 4, // Max Peek error
+ 3); // Max mean error
+
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
 
 template <class T>
-void test(T)
+void do_test(const T& data, const char* type_name, const char* test_name)
 {
- static const T two = 2;
+ typedef typename T::value_type row_type;
+ typedef typename row_type::value_type value_type;
+
+ typedef value_type (*pg)(value_type);
+ pg funcp = &boost::math::log1p;
+
+ boost::math::tools::test_result<value_type> result;
+ std::cout << "Testing " << test_name << " with type " << type_name
+ << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
    //
- // Fudge factor is 3 epsilon, should be less than that, but some
- // platforms have poor long double support (some of the test values
- // actually test the accuracy of std::log and std::exp, and it's
- // usually these, rather than our series expansion that fails otherwise).
- //
- static const T factor = std::pow(two, 1-std::numeric_limits<T>::digits) * 300;
- for(unsigned i = 0; i < sizeof(data)/sizeof(data[0]); ++i)
- {
- T input_value = static_cast<T>(data[i][0]);
- T expected_log1p = static_cast<T>(data[i][1]);
- T expected_expm1 = static_cast<T>(data[i][2]);
- BOOST_CHECK_CLOSE(boost::math::log1p(input_value), expected_log1p, factor);
- BOOST_CHECK_CLOSE(boost::math::expm1(input_value), expected_expm1, factor);
- BOOST_CHECK_CLOSE(boost::math::expm1(-input_value), -boost::math::expm1(input_value)/static_cast<T>(std::exp(input_value)), 2*factor);
- }
+ // test log1p against data:
+ //
+ funcp = &boost::math::log1p;
+ result = boost::math::tools::test(
+ data,
+ bind_func(funcp, 0),
+ extract_result(1));
+ handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::log1p", "log1p and expm1");
+ std::cout << std::endl;
+ //
+ // test expm1 against data:
+ //
+ funcp = boost::math::expm1;
+ result = boost::math::tools::test(
+ data,
+ bind_func(funcp, 0),
+ extract_result(2));
+ handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::expm1", "log1p and expm1");
+ std::cout << std::endl;
+}
+
+template <class T>
+void test(T, const char* type_name)
+{
+# include "log1p_expm1_data.ipp"
+
+ do_test(log1p_expm1_data, type_name, "expm1 and log1p");
+
    //
    // C99 Appendix F special cases:
    static const T zero = 0;
@@ -571,18 +122,20 @@
 
 int test_main(int, char* [])
 {
- std::cout << "Running float tests" << std::endl;
- test(float(0));
- std::cout << "Running double tests" << std::endl;
- test(double(0));
+ expected_results();
+ BOOST_MATH_CONTROL_FP;
+ test(float(0), "float");
+ test(double(0), "double");
    //
    // The long double version of these tests fails on some platforms
    // due to poor std lib support (not enough digits returned from
    // std::log and std::exp):
    //
-#if !defined(__CYGWIN__) && !defined(__FreeBSD__) && !(defined(__GNUC__) && defined(__sun))
- std::cout << "Running long double tests" << std::endl;
- test((long double)(0));
+#if !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)
+ test((long double)(0), "long double");
+#ifndef BOOST_MATH_NO_REAL_CONCEPT_TESTS
+ test((boost::math::concepts::real_concept)(0), "real_concept");
+#endif
 #else
    std::cout << "<note>The long double tests have been disabled on this platform "
       "either because the long double overloads of the usual math functions are "

Copied: branches/bcbboost/libs/math/test/powm1_sqrtp1m1_test.cpp (from r39819, /trunk/libs/math/test/powm1_sqrtp1m1_test.cpp)
==============================================================================
--- /trunk/libs/math/test/powm1_sqrtp1m1_test.cpp (original)
+++ branches/bcbboost/libs/math/test/powm1_sqrtp1m1_test.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -9,9 +9,8 @@
 #include <boost/math/special_functions/sqrt1pm1.hpp>
 #include <boost/math/special_functions/powm1.hpp>
 #include <boost/math/tools/test.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
 #include <boost/array.hpp>
+#include "functor.hpp"
 
 #include "handle_test_result.hpp"
 
@@ -1613,7 +1612,6 @@
 #undef SC_
 
 
- using namespace boost::lambda;
    using namespace std;
 
    typedef T (*func_t)(const T&);
@@ -1621,25 +1619,26 @@
 
    boost::math::tools::test_result<T> result = boost::math::tools::test(
       sqrtp1m1_data,
- bind(f, ret<T>(_1[0])),
- ret<T>(_1[1]));
+ bind_func(f, 0),
+ extract_result(1));
 
    std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
       "Test results for type " << type_name << std::endl << std::endl;
    handle_test_result(result, sqrtp1m1_data[result.worst()], result.worst(), type_name, "boost::math::sqrt1pm1", "sqrt1pm1");
 
    typedef T (*func2_t)(T const, T const);
- func2_t f2 = &boost::math::powm1<T>;
+ func2_t f2 = &boost::math::powm1<T,T>;
    result = boost::math::tools::test(
       powm1_data,
- bind(f2, ret<T>(_1[0]), ret<T>(_1[1])),
- ret<T>(_1[2]));
+ bind_func(f2, 0, 1),
+ extract_result(2));
    handle_test_result(result, powm1_data[result.worst()], result.worst(), type_name, "boost::math::powm1", "powm1");
 }
 
 int test_main(int, char* [])
 {
    expected_results();
+ BOOST_MATH_CONTROL_FP;
    test_powm1_sqrtp1m1(1.0F, "float");
    test_powm1_sqrtp1m1(1.0, "double");
 #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS

Copied: branches/bcbboost/libs/math/test/test_bernoulli.cpp (from r39819, /trunk/libs/math/test/test_bernoulli.cpp)
==============================================================================
--- /trunk/libs/math/test/test_bernoulli.cpp (original)
+++ branches/bcbboost/libs/math/test/test_bernoulli.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -209,6 +209,7 @@
 
 int test_main(int, char* [])
 {
+ BOOST_MATH_CONTROL_FP;
         // Check that can generate bernoulli distribution using both convenience methods:
         bernoulli_distribution<double> bn1(0.5); // Using default RealType double.
         boost::math::bernoulli bn2(0.5); // Using typedef.

Copied: branches/bcbboost/libs/math/test/test_bessel_i.cpp (from r39819, /trunk/libs/math/test/test_bessel_i.cpp)
==============================================================================
--- /trunk/libs/math/test/test_bessel_i.cpp (original)
+++ branches/bcbboost/libs/math/test/test_bessel_i.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -10,8 +10,7 @@
 #include <boost/math/special_functions/bessel.hpp>
 #include <boost/type_traits/is_floating_point.hpp>
 #include <boost/array.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
+#include "functor.hpp"
 
 #include "handle_test_result.hpp"
 #include "test_bessel_hooks.hpp"
@@ -126,10 +125,8 @@
    //
    result = boost::math::tools::test(
       data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(funcp, 0, 1),
+ extract_result(2));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::cyl_bessel_i", test_name);
    std::cout << std::endl;
 
@@ -172,10 +169,8 @@
    //
    result = boost::math::tools::test(
       data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(funcp, 0, 1),
+ extract_result(2));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::cyl_bessel_i", test_name);
    std::cout << std::endl;
 }
@@ -257,6 +252,7 @@
    gsl_set_error_handler_off();
 #endif
    expected_results();
+ BOOST_MATH_CONTROL_FP;
 
 #ifndef BOOST_MATH_BUGGY_LARGE_FLOAT_CONSTANTS
    test_bessel(0.1F, "float");

Copied: branches/bcbboost/libs/math/test/test_bessel_j.cpp (from r39819, /trunk/libs/math/test/test_bessel_j.cpp)
==============================================================================
--- /trunk/libs/math/test/test_bessel_j.cpp (original)
+++ branches/bcbboost/libs/math/test/test_bessel_j.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -9,8 +9,7 @@
 #include <boost/math/special_functions/bessel.hpp>
 #include <boost/type_traits/is_floating_point.hpp>
 #include <boost/array.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
+#include "functor.hpp"
 
 #include "handle_test_result.hpp"
 #include "test_bessel_hooks.hpp"
@@ -255,10 +254,8 @@
    //
    result = boost::math::tools::test(
       data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(funcp, 0, 1),
+ extract_result(2));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::cyl_bessel_j", test_name);
    std::cout << std::endl;
 
@@ -272,10 +269,8 @@
       //
       result = boost::math::tools::test(
          data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(funcp, 0, 1),
+ extract_result(2));
       handle_test_result(result, data[result.worst()], result.worst(), type_name, "other::cyl_bessel_j", test_name);
       std::cout << std::endl;
    }
@@ -308,10 +303,8 @@
    //
    result = boost::math::tools::test(
       data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(funcp, 0, 1),
+ extract_result(2));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::cyl_bessel_j", test_name);
    std::cout << std::endl;
 }
@@ -326,7 +319,6 @@
    pg funcp = boost::math::sph_bessel;
 
    typedef int (*cast_t)(value_type);
- cast_t rc = &boost::math::tools::real_cast<int, value_type>;
 
    boost::math::tools::test_result<value_type> result;
 
@@ -338,13 +330,8 @@
    //
    result = boost::math::tools::test(
       data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<int>(
- boost::lambda::bind(
- rc,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]))),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func_int1(funcp, 0, 1),
+ extract_result(2));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::sph_bessel", test_name);
    std::cout << std::endl;
 }
@@ -472,6 +459,7 @@
    gsl_set_error_handler_off();
 #endif
    expected_results();
+ BOOST_MATH_CONTROL_FP;
 
    test_bessel(0.1F, "float");
    test_bessel(0.1, "double");

Copied: branches/bcbboost/libs/math/test/test_bessel_k.cpp (from r39819, /trunk/libs/math/test/test_bessel_k.cpp)
==============================================================================
--- /trunk/libs/math/test/test_bessel_k.cpp (original)
+++ branches/bcbboost/libs/math/test/test_bessel_k.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -17,8 +17,7 @@
 #include <boost/math/special_functions/bessel.hpp>
 #include <boost/type_traits/is_floating_point.hpp>
 #include <boost/array.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
+#include "functor.hpp"
 
 #include "handle_test_result.hpp"
 #include "test_bessel_hooks.hpp"
@@ -114,10 +113,8 @@
    //
    result = boost::math::tools::test(
       data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(funcp, 0, 1),
+ extract_result(2));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::cyl_bessel_k", test_name);
    std::cout << std::endl;
 
@@ -131,10 +128,8 @@
       //
       result = boost::math::tools::test(
          data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(funcp, 0, 1),
+ extract_result(2));
       print_test_result(result, data[result.worst()], result.worst(), type_name, "other::cyl_bessel_k");
       std::cout << std::endl;
    }
@@ -160,10 +155,8 @@
    //
    result = boost::math::tools::test(
       data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(funcp, 0, 1),
+ extract_result(2));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::cyl_bessel_k", test_name);
    std::cout << std::endl;
 }
@@ -243,6 +236,7 @@
    gsl_set_error_handler_off();
 #endif
    expected_results();
+ BOOST_MATH_CONTROL_FP;
 
 #ifndef BOOST_MATH_BUGGY_LARGE_FLOAT_CONSTANTS
    test_bessel(0.1F, "float");

Copied: branches/bcbboost/libs/math/test/test_bessel_y.cpp (from r39819, /trunk/libs/math/test/test_bessel_y.cpp)
==============================================================================
--- /trunk/libs/math/test/test_bessel_y.cpp (original)
+++ branches/bcbboost/libs/math/test/test_bessel_y.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -10,8 +10,7 @@
 #include <boost/math/special_functions/bessel.hpp>
 #include <boost/type_traits/is_floating_point.hpp>
 #include <boost/array.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
+#include "functor.hpp"
 
 #include "handle_test_result.hpp"
 #include "test_bessel_hooks.hpp"
@@ -143,6 +142,24 @@
          largest_type, // test type(s)
          ".*Yn.*", // test data group
          ".*", 30000, 30000); // test function
+ //
+ // Solaris version of long double has it's own error rates,
+ // again just a touch higher than msvc's 64-bit double:
+ //
+ add_expected_result(
+ "GNU.*", // compiler
+ ".*", // stdlib
+ "Sun.*", // platform
+ largest_type, // test type(s)
+ "Y[0N] Mathworld.*", // test data group
+ ".*", 2000, 2000); // test function
+ add_expected_result(
+ "GNU.*", // compiler
+ ".*", // stdlib
+ "Sun.*", // platform
+ largest_type, // test type(s)
+ "Y[0N].*", // test data group
+ ".*", 200, 200); // test function
 
 #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
    if((std::numeric_limits<double>::digits != std::numeric_limits<long double>::digits)
@@ -223,10 +240,8 @@
    //
    result = boost::math::tools::test(
       data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(funcp, 0, 1),
+ extract_result(2));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::cyl_neumann", test_name);
    std::cout << std::endl;
 
@@ -240,10 +255,8 @@
       //
       result = boost::math::tools::test(
          data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(funcp, 0, 1),
+ extract_result(2));
       handle_test_result(result, data[result.worst()], result.worst(), type_name, "other::cyl_neumann", test_name);
       std::cout << std::endl;
    }
@@ -275,10 +288,8 @@
    //
    result = boost::math::tools::test(
       data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(funcp, 0, 1),
+ extract_result(2));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::cyl_neumann", test_name);
    std::cout << std::endl;
 }
@@ -293,7 +304,6 @@
    pg funcp = boost::math::sph_neumann;
 
    typedef int (*cast_t)(value_type);
- cast_t rc = &boost::math::tools::real_cast<int, value_type>;
 
    boost::math::tools::test_result<value_type> result;
 
@@ -305,13 +315,8 @@
    //
    result = boost::math::tools::test(
       data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<int>(
- boost::lambda::bind(
- rc,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]))),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func_int1(funcp, 0, 1),
+ extract_result(2));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::cyl_neumann", test_name);
    std::cout << std::endl;
 }
@@ -398,6 +403,7 @@
    gsl_set_error_handler_off();
 #endif
    expected_results();
+ BOOST_MATH_CONTROL_FP;
 
 #ifndef BOOST_MATH_BUGGY_LARGE_FLOAT_CONSTANTS
    test_bessel(0.1F, "float");

Copied: branches/bcbboost/libs/math/test/test_beta.cpp (from r39819, /trunk/libs/math/test/test_beta.cpp)
==============================================================================
--- /trunk/libs/math/test/test_beta.cpp (original)
+++ branches/bcbboost/libs/math/test/test_beta.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -14,10 +14,7 @@
 #include <boost/math/constants/constants.hpp>
 #include <boost/type_traits/is_floating_point.hpp>
 #include <boost/array.hpp>
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
-#endif
+#include "functor.hpp"
 
 #include "test_beta_hooks.hpp"
 #include "handle_test_result.hpp"
@@ -116,7 +113,6 @@
 template <class T>
 void do_test_beta(const T& data, const char* type_name, const char* test_name)
 {
-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
    typedef typename T::value_type row_type;
    typedef typename row_type::value_type value_type;
 
@@ -133,25 +129,20 @@
    //
    result = boost::math::tools::test(
       data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(funcp, 0, 1),
+ extract_result(2));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::beta", test_name);
 #ifdef TEST_OTHER
    if(::boost::is_floating_point<value_type>::value){
       funcp = other::beta;
       result = boost::math::tools::test(
          data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(funcp, 0, 1),
+ extract_result(2));
       print_test_result(result, data[result.worst()], result.worst(), type_name, "other::beta");
    }
 #endif
    std::cout << std::endl;
-#endif
 }
 template <class T>
 void test_beta(T, const char* name)
@@ -196,6 +187,7 @@
 int test_main(int, char* [])
 {
    expected_results();
+ BOOST_MATH_CONTROL_FP;
    test_spots(0.0F);
    test_spots(0.0);
 #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS

Copied: branches/bcbboost/libs/math/test/test_beta_dist.cpp (from r39819, /trunk/libs/math/test/test_beta_dist.cpp)
==============================================================================
--- /trunk/libs/math/test/test_beta_dist.cpp (original)
+++ branches/bcbboost/libs/math/test/test_beta_dist.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -457,6 +457,7 @@
 
 int test_main(int, char* [])
 {
+ BOOST_MATH_CONTROL_FP;
    // Check that can generate beta distribution using one convenience methods:
    beta_distribution<> mybeta11(1., 1.); // Using default RealType double.
    // but that

Copied: branches/bcbboost/libs/math/test/test_binomial.cpp (from r39819, /trunk/libs/math/test/test_binomial.cpp)
==============================================================================
--- /trunk/libs/math/test/test_binomial.cpp (original)
+++ branches/bcbboost/libs/math/test/test_binomial.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -12,6 +12,13 @@
 
 #define BOOST_MATH_DISCRETE_QUANTILE_POLICY real
 
+#if !defined(TEST_FLOAT) && !defined(TEST_DOUBLE) && !defined(TEST_LDOUBLE) && !defined(TEST_REAL_CONCEPT)
+# define TEST_FLOAT
+# define TEST_DOUBLE
+# define TEST_LDOUBLE
+# define TEST_REAL_CONCEPT
+#endif
+
 #ifdef _MSC_VER
 # pragma warning(disable: 4127) // conditional expression is constant.
 #endif
@@ -685,6 +692,7 @@
 
 int test_main(int, char* [])
 {
+ BOOST_MATH_CONTROL_FP;
         // Check that can generate binomial distribution using one convenience methods:
         binomial_distribution<> mybn2(1., 0.5); // Using default RealType double.
   // but that
@@ -694,13 +702,21 @@
   // Basic sanity-check spot values.
 
   // (Parameter value, arbitrarily zero, only communicates the floating point type).
+#ifdef TEST_FLOAT
   test_spots(0.0F); // Test float.
+#endif
+#ifdef TEST_DOUBLE
   test_spots(0.0); // Test double.
+#endif
 #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#ifdef TEST_LDOUBLE
   test_spots(0.0L); // Test long double.
+#endif
 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+#ifdef TEST_REAL_CONCEPT
   test_spots(boost::math::concepts::real_concept(0.)); // Test real concept.
 #endif
+#endif
 #else
    std::cout << "<note>The long double tests have been disabled on this platform "
       "either because the long double overloads of the usual math functions are "

Copied: branches/bcbboost/libs/math/test/test_binomial_coeff.cpp (from r39819, /trunk/libs/math/test/test_binomial_coeff.cpp)
==============================================================================
--- /trunk/libs/math/test/test_binomial_coeff.cpp (original)
+++ branches/bcbboost/libs/math/test/test_binomial_coeff.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -8,8 +8,7 @@
 #include <boost/test/floating_point_comparison.hpp>
 #include <boost/math/special_functions/binomial.hpp>
 #include <boost/math/tools/test.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
+#include "functor.hpp"
 #include <boost/array.hpp>
 
 #include "handle_test_result.hpp"
@@ -60,7 +59,7 @@
       ".*", // platform
       largest_type, // test type(s)
       ".*large.*", // test data group
- ".*", 70, 20); // test function
+ ".*", 100, 20); // test function
    add_expected_result(
       ".*", // compiler
       ".*", // stdlib
@@ -102,18 +101,17 @@
 template <class T>
 void test_binomial(T, const char* type_name)
 {
- using namespace boost::lambda;
    using namespace std;
 
    typedef T (*func_t)(T, T);
- func_t f = &binomial_wrapper<T>;
+ func_t f = &binomial_wrapper;
 
 #include "binomial_data.ipp"
 
    boost::math::tools::test_result<T> result = boost::math::tools::test(
       binomial_data,
- bind(f, ret<T>(_1[0]), ret<T>(_1[1])),
- ret<T>(_1[2]));
+ bind_func(f, 0, 1),
+ extract_result(2));
 
    std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
       "Test results for small arguments and type " << type_name << std::endl << std::endl;
@@ -125,8 +123,8 @@
 
    result = boost::math::tools::test(
       binomial_large_data,
- bind(f, ret<T>(_1[0]), ret<T>(_1[1])),
- ret<T>(_1[2]));
+ bind_func(f, 0, 1),
+ extract_result(2));
 
    std::cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
       "Test results for large arguments and type " << type_name << std::endl << std::endl;
@@ -166,6 +164,7 @@
 int test_main(int, char* [])
 {
    expected_results();
+ BOOST_MATH_CONTROL_FP;
 
    test_spots(1.0F, "float");
    test_spots(1.0, "double");

Copied: branches/bcbboost/libs/math/test/test_carlson.cpp (from r39819, /trunk/libs/math/test/test_carlson.cpp)
==============================================================================
--- /trunk/libs/math/test/test_carlson.cpp (original)
+++ branches/bcbboost/libs/math/test/test_carlson.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -14,9 +14,8 @@
 #include <boost/math/special_functions/ellint_rd.hpp>
 #include <boost/math/constants/constants.hpp>
 #include <boost/array.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
 #include <boost/tr1/random.hpp>
+#include "functor.hpp"
 
 #include "handle_test_result.hpp"
 //
@@ -135,11 +134,8 @@
  
     result = boost::math::tools::test(
       data,
- boost::lambda::bind(fp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1]),
- boost::lambda::ret<value_type>(boost::lambda::_1[2])),
- boost::lambda::ret<value_type>(boost::lambda::_1[3]));
+ bind_func(fp, 0, 1, 2),
+ extract_result(3));
    handle_test_result(result, data[result.worst()], result.worst(),
       type_name, "boost::math::ellint_rf", test);
 
@@ -160,10 +156,8 @@
  
     result = boost::math::tools::test(
       data,
- boost::lambda::bind(fp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]));
+ bind_func(fp, 0, 1),
+ extract_result(2));
    handle_test_result(result, data[result.worst()], result.worst(),
       type_name, "boost::math::ellint_rc", test);
 
@@ -184,12 +178,8 @@
  
     result = boost::math::tools::test(
       data,
- boost::lambda::bind(fp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1]),
- boost::lambda::ret<value_type>(boost::lambda::_1[2]),
- boost::lambda::ret<value_type>(boost::lambda::_1[3])),
- boost::lambda::ret<value_type>(boost::lambda::_1[4]));
+ bind_func(fp, 0, 1, 2, 3),
+ extract_result(4));
    handle_test_result(result, data[result.worst()], result.worst(),
       type_name, "boost::math::ellint_rf", test);
 
@@ -210,11 +200,8 @@
  
     result = boost::math::tools::test(
       data,
- boost::lambda::bind(fp,
- boost::lambda::ret<value_type>(boost::lambda::_1[0]),
- boost::lambda::ret<value_type>(boost::lambda::_1[1]),
- boost::lambda::ret<value_type>(boost::lambda::_1[2])),
- boost::lambda::ret<value_type>(boost::lambda::_1[3]));
+ bind_func(fp, 0, 1, 2),
+ extract_result(3));
    handle_test_result(result, data[result.worst()], result.worst(),
       type_name, "boost::math::ellint_rd", test);
 
@@ -318,6 +305,10 @@
 int test_main(int, char* [])
 {
     expected_results();
+ BOOST_MATH_CONTROL_FP;
+
+ boost::math::ellint_rj(1.778e-31, 1.407e+18, 10.05, -4.83e-10);
+
     test_spots(0.0F, "float");
     test_spots(0.0, "double");
 #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
@@ -401,4 +392,4 @@
     { 2.111e-020, 8.757e-026, 1.923e-023, 1.004e+033 }
 *** No errors detected
 
-*/
\ No newline at end of file
+*/

Copied: branches/bcbboost/libs/math/test/test_cauchy.cpp (from r39819, /trunk/libs/math/test/test_cauchy.cpp)
==============================================================================
--- /trunk/libs/math/test/test_cauchy.cpp (original)
+++ branches/bcbboost/libs/math/test/test_cauchy.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -714,6 +714,7 @@
 
 int test_main(int, char* [])
 {
+ BOOST_MATH_CONTROL_FP;
         // Check that can generate cauchy distribution using the two convenience methods:
         boost::math::cauchy mycd1(1.); // Using typedef
         cauchy_distribution<> mycd2(1.); // Using default RealType double.

Copied: branches/bcbboost/libs/math/test/test_cbrt.cpp (from r39819, /trunk/libs/math/test/test_cbrt.cpp)
==============================================================================
--- /trunk/libs/math/test/test_cbrt.cpp (original)
+++ branches/bcbboost/libs/math/test/test_cbrt.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -10,9 +10,8 @@
 #include <boost/math/tools/test.hpp>
 #include <boost/type_traits/is_floating_point.hpp>
 #include <boost/array.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
 #include <boost/math/special_functions/cbrt.hpp>
+#include "functor.hpp"
 
 #include "handle_test_result.hpp"
 
@@ -49,6 +48,14 @@
    //
    std::cout << "Tests run with " << BOOST_COMPILER << ", "
       << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+
+ add_expected_result(
+ "Borland.*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ "long double", // test type(s)
+ ".*", // test data group
+ ".*", 10, 6); // test function
 }
 
 
@@ -71,14 +78,12 @@
    //
    result = boost::math::tools::test(
       data,
- boost::lambda::bind(funcp,
- boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- boost::lambda::ret<value_type>(boost::lambda::_1[0]));
+ bind_func(funcp, 1),
+ extract_result(0));
    result += boost::math::tools::test(
       data,
- boost::lambda::bind(funcp,
- -boost::lambda::ret<value_type>(boost::lambda::_1[1])),
- -boost::lambda::ret<value_type>(boost::lambda::_1[0]));
+ negate(bind_func(funcp, 1)),
+ negate(extract_result(0)));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::cbrt", test_name);
    std::cout << std::endl;
 }
@@ -99,6 +104,8 @@
 
 int test_main(int, char* [])
 {
+ expected_results();
+ BOOST_MATH_CONTROL_FP;
    test_cbrt(0.1F, "float");
    test_cbrt(0.1, "double");
    test_cbrt(0.1L, "long double");

Copied: branches/bcbboost/libs/math/test/test_classify.cpp (from r39819, /trunk/libs/math/test/test_classify.cpp)
==============================================================================
--- /trunk/libs/math/test/test_classify.cpp (original)
+++ branches/bcbboost/libs/math/test/test_classify.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -133,8 +133,10 @@
    // then run the tests:
    test_classify(float(0), "float");
    test_classify(double(0), "double");
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
    test_classify((long double)(0), "long double");
    test_classify((boost::math::concepts::real_concept)(0), "real_concept");
+#endif
   return 0;
 }
 

Copied: branches/bcbboost/libs/math/test/test_digamma.cpp (from r39819, /trunk/libs/math/test/test_digamma.cpp)
==============================================================================
--- /trunk/libs/math/test/test_digamma.cpp (original)
+++ branches/bcbboost/libs/math/test/test_digamma.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -8,8 +8,10 @@
 #include <boost/test/floating_point_comparison.hpp>
 #include <boost/math/special_functions/digamma.hpp>
 #include <boost/array.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
 #include <boost/lambda/lambda.hpp>
 #include <boost/lambda/bind.hpp>
+#endif
 
 #include "handle_test_result.hpp"
 
@@ -48,7 +50,7 @@
       ".*", // platform
       ".*", // test type(s)
       ".*Negative.*", // test data group
- ".*", 250, 40); // test function
+ ".*", 300, 40); // test function
    add_expected_result(
       ".*", // compiler
       ".*", // stdlib
@@ -67,6 +69,7 @@
 template <class T>
 void do_test_digamma(const T& data, const char* type_name, const char* test_name)
 {
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
    typedef typename T::value_type row_type;
    typedef typename row_type::value_type value_type;
 
@@ -88,6 +91,7 @@
       boost::lambda::ret<value_type>(boost::lambda::_1[1]));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::digamma", test_name);
    std::cout << std::endl;
+#endif
 }
 
 template <class T>

Copied: branches/bcbboost/libs/math/test/test_factorials.cpp (from r39819, /trunk/libs/math/test/test_factorials.cpp)
==============================================================================
--- /trunk/libs/math/test/test_factorials.cpp (original)
+++ branches/bcbboost/libs/math/test/test_factorials.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -132,7 +132,7 @@
       static_cast<T>(1.28674092710208810281923019294164707555099052561945725535047e-26L), tolerance);
    BOOST_CHECK_CLOSE(
       ::boost::math::rising_factorial(static_cast<T>(30.25), 21),
- static_cast<T>(3.93286957998925490693364184100209193343633629069699964020401e33L), tolerance);
+ static_cast<T>(3.93286957998925490693364184100209193343633629069699964020401e33L), tolerance * 2);
    BOOST_CHECK_CLOSE(
       ::boost::math::rising_factorial(static_cast<T>(30.25), -21),
       static_cast<T>(3.35010902064291983728782493133164809108646650368560147505884e-27L), tolerance);

Copied: branches/bcbboost/libs/math/test/test_gamma.cpp (from r39819, /trunk/libs/math/test/test_gamma.cpp)
==============================================================================
--- /trunk/libs/math/test/test_gamma.cpp (original)
+++ branches/bcbboost/libs/math/test/test_gamma.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -110,7 +110,7 @@
       "linux", // platform
       largest_type, // test type(s)
       "near (1|2|-10)", // test data group
- "boost::math::lgamma", 50, 30); // test function
+ "boost::math::lgamma", 50, 50); // test function
    add_expected_result(
       ".*", // compiler
       ".*", // stdlib
@@ -131,7 +131,7 @@
       "linux", // platform
       "real_concept", // test type(s)
       "near (0|-55)", // test data group
- "boost::math::(t|l)gamma", 130, 60); // test function
+ "boost::math::(t|l)gamma", 130, 80); // test function
    add_expected_result(
       ".*", // compiler
       ".*", // stdlib
@@ -176,7 +176,24 @@
       "HP-UX", // platform
       "real_concept", // test type(s)
       "tgamma1pm1.*", // test data group
- "boost::math::tgamma1pm1", 200, 60); // test function
+ "boost::math::tgamma1pm1", 200, 80); // test function
+ //
+ // Sun OS:
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ "Sun.*", // platform
+ largest_type, // test type(s)
+ "factorials", // test data group
+ "boost::math::tgamma", 300, 50); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ "Sun.*", // platform
+ "real_concept", // test type(s)
+ "factorials", // test data group
+ "boost::math::tgamma", 300, 50); // test function
 
    //
    // Catch all cases come last:
@@ -244,7 +261,7 @@
       ".*", // platform
       "real_concept", // test type(s)
       "near.*", // test data group
- "boost::math::tgamma", 60, 30); // test function
+ "boost::math::tgamma", 80, 60); // test function
    add_expected_result(
       ".*", // compiler
       ".*", // stdlib

Copied: branches/bcbboost/libs/math/test/test_hermite.cpp (from r39819, /trunk/libs/math/test/test_hermite.cpp)
==============================================================================
--- /trunk/libs/math/test/test_hermite.cpp (original)
+++ branches/bcbboost/libs/math/test/test_hermite.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -18,8 +18,10 @@
 #include <boost/math/special_functions/hermite.hpp>
 #include <boost/math/constants/constants.hpp>
 #include <boost/array.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
 #include <boost/lambda/lambda.hpp>
 #include <boost/lambda/bind.hpp>
+#endif
 
 #include "handle_test_result.hpp"
 #include "test_legendre_hooks.hpp"
@@ -96,6 +98,7 @@
 template <class T>
 void do_test_hermite(const T& data, const char* type_name, const char* test_name)
 {
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
    typedef typename T::value_type row_type;
    typedef typename row_type::value_type value_type;
 
@@ -125,6 +128,7 @@
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::hermite", test_name);
 
    std::cout << std::endl;
+#endif
 }
 
 template <class T>

Copied: branches/bcbboost/libs/math/test/test_ibeta.cpp (from r39819, /trunk/libs/math/test/test_ibeta.cpp)
==============================================================================
--- /trunk/libs/math/test/test_ibeta.cpp (original)
+++ branches/bcbboost/libs/math/test/test_ibeta.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -20,6 +20,13 @@
 #include "test_beta_hooks.hpp"
 #include "handle_test_result.hpp"
 
+#if !defined(TEST_FLOAT) && !defined(TEST_DOUBLE) && !defined(TEST_LDOUBLE) && !defined(TEST_REAL_CONCEPT)
+# define TEST_FLOAT
+# define TEST_DOUBLE
+# define TEST_LDOUBLE
+# define TEST_REAL_CONCEPT
+#endif
+
 //
 // DESCRIPTION:
 // ~~~~~~~~~~~~
@@ -102,7 +109,7 @@
    add_expected_result(
       "[^|]*", // compiler
       "[^|]*", // stdlib
- "linux|Mac OS", // platform
+ "linux|Mac OS|Sun.*", // platform
       "double", // test type(s)
       "(?i).*large.*", // test data group
       ".*", 40, 20); // test function
@@ -135,7 +142,37 @@
       largest_type, // test type(s)
       "(?i).*large.*", // test data group
       ".*", 200000, 10000); // test function
-
+ //
+ // Sun OS:
+ //
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "Sun.*", // platform
+ largest_type, // test type(s)
+ "(?i).*large.*", // test data group
+ ".*", 80000, 10000); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "Sun.*", // platform
+ largest_type, // test type(s)
+ "(?i).*small.*", // test data group
+ ".*", 130, 30); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "Sun.*", // platform
+ "real_concept", // test type(s)
+ "(?i).*medium.*", // test data group
+ ".*", 200, 40); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "Sun.*", // platform
+ "real_concept", // test type(s)
+ "(?i).*small.*", // test data group
+ ".*", 130, 30); // test function
    //
    // MinGW:
    //
@@ -204,7 +241,7 @@
       "[^|]*", // platform
       "real_concept", // test type(s)
       "(?i).*medium.*", // test data group
- ".*", 100, 50); // test function
+ ".*", 200, 50); // test function
    add_expected_result(
       "[^|]*", // compiler
       "[^|]*", // stdlib
@@ -491,15 +528,23 @@
 #endif
 #endif
 
+#ifdef TEST_FLOAT
    test_beta(0.1F, "float");
+#endif
+#ifdef TEST_DOUBLE
    test_beta(0.1, "double");
+#endif
+#ifdef TEST_LDOUBLE
 #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
    test_beta(0.1L, "long double");
+#endif
 #ifndef BOOST_MATH_NO_REAL_CONCEPT_TESTS
 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+#ifdef TEST_REAL_CONCEPT
    test_beta(boost::math::concepts::real_concept(0.1), "real_concept");
 #endif
 #endif
+#endif
 #else
    std::cout << "<note>The long double tests have been disabled on this platform "
       "either because the long double overloads of the usual math functions are "

Copied: branches/bcbboost/libs/math/test/test_ibeta_inv.cpp (from r39819, /trunk/libs/math/test/test_ibeta_inv.cpp)
==============================================================================
--- /trunk/libs/math/test/test_ibeta_inv.cpp (original)
+++ branches/bcbboost/libs/math/test/test_ibeta_inv.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -12,12 +12,21 @@
 #include <boost/math/constants/constants.hpp>
 #include <boost/type_traits/is_floating_point.hpp>
 #include <boost/array.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
 #include <boost/lambda/lambda.hpp>
 #include <boost/lambda/bind.hpp>
+#endif
 
 #include "test_beta_hooks.hpp"
 #include "handle_test_result.hpp"
 
+#if !defined(TEST_FLOAT) && !defined(TEST_DOUBLE) && !defined(TEST_LDOUBLE) && !defined(TEST_REAL_CONCEPT)
+# define TEST_FLOAT
+# define TEST_DOUBLE
+# define TEST_LDOUBLE
+# define TEST_REAL_CONCEPT
+#endif
+
 //
 // DESCRIPTION:
 // ~~~~~~~~~~~~
@@ -204,6 +213,7 @@
 template <class T>
 void test_inverses2(const T& data, const char* type_name, const char* test_name)
 {
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
    typedef typename T::value_type row_type;
    typedef typename row_type::value_type value_type;
 
@@ -234,6 +244,7 @@
       bind(funcp, ret<value_type>(_1[0]), ret<value_type>(_1[1]), ret<value_type>(_1[2])),
       ret<value_type>(_1[4]));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::ibetac_inv", test_name);
+#endif
 }
 
 
@@ -309,13 +320,21 @@
    test_spots(boost::math::concepts::real_concept(0.1));
 #endif
 
+#ifdef TEST_FLOAT
    test_beta(0.1F, "float");
+#endif
+#ifdef TEST_DOUBLE
    test_beta(0.1, "double");
+#endif
 #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#ifdef TEST_LDOUBLE
    test_beta(0.1L, "long double");
+#endif
 #ifndef BOOST_MATH_NO_REAL_CONCEPT_TESTS
+#ifdef TEST_REAL_CONCEPT
    test_beta(boost::math::concepts::real_concept(0.1), "real_concept");
 #endif
+#endif
 #else
    std::cout << "<note>The long double tests have been disabled on this platform "
       "either because the long double overloads of the usual math functions are "

Copied: branches/bcbboost/libs/math/test/test_ibeta_inv_ab.cpp (from r39819, /trunk/libs/math/test/test_ibeta_inv_ab.cpp)
==============================================================================
--- /trunk/libs/math/test/test_ibeta_inv_ab.cpp (original)
+++ branches/bcbboost/libs/math/test/test_ibeta_inv_ab.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -12,8 +12,10 @@
 #include <boost/math/constants/constants.hpp>
 #include <boost/type_traits/is_floating_point.hpp>
 #include <boost/array.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
 #include <boost/lambda/lambda.hpp>
 #include <boost/lambda/bind.hpp>
+#endif
 
 #ifdef TEST_GSL
 #include <gsl/gsl_errno.h>
@@ -22,6 +24,12 @@
 
 #include "handle_test_result.hpp"
 
+#if !defined(TEST_FLOAT) && !defined(TEST_DOUBLE) && !defined(TEST_LDOUBLE) && !defined(TEST_REAL_CONCEPT)
+# define TEST_FLOAT
+# define TEST_DOUBLE
+# define TEST_LDOUBLE
+# define TEST_REAL_CONCEPT
+#endif
 //
 // DESCRIPTION:
 // ~~~~~~~~~~~~
@@ -168,6 +176,7 @@
 template <class T>
 void test_inverses2(const T& data, const char* type_name, const char* test_name)
 {
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
    typedef typename T::value_type row_type;
    typedef typename row_type::value_type value_type;
 
@@ -216,6 +225,7 @@
       bind(funcp, ret<value_type>(_1[0]), ret<value_type>(_1[1]), ret<value_type>(_1[2])),
       ret<value_type>(_1[6]));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::ibetac_invb", test_name);
+#endif
 }
 
 template <class T>
@@ -266,13 +276,21 @@
    gsl_set_error_handler_off();
 #endif
 
+#ifdef TEST_FLOAT
    test_beta(0.1F, "float");
+#endif
+#ifdef TEST_DOUBLE
    test_beta(0.1, "double");
+#endif
 #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#ifdef TEST_LDOUBLE
    test_beta(0.1L, "long double");
+#endif
 #ifndef BOOST_MATH_NO_REAL_CONCEPT_TESTS
+#ifdef TEST_REAL_CONCEPT
    test_beta(boost::math::concepts::real_concept(0.1), "real_concept");
 #endif
+#endif
 #else
    std::cout << "<note>The long double tests have been disabled on this platform "
       "either because the long double overloads of the usual math functions are "

Copied: branches/bcbboost/libs/math/test/test_igamma.cpp (from r39819, /trunk/libs/math/test/test_igamma.cpp)
==============================================================================
--- /trunk/libs/math/test/test_igamma.cpp (original)
+++ branches/bcbboost/libs/math/test/test_igamma.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -167,6 +167,37 @@
       "real_concept", // test type(s)
       "[^|]*medium[^|]*", // test data group
       "[^|]*", 500, 100); // test function
+ //
+ // Sun OS:
+ //
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "Sun.*", // platform
+ largest_type, // test type(s)
+ "[^|]*medium[^|]*", // test data group
+ "[^|]*", 500, 100); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "Sun.*", // platform
+ largest_type, // test type(s)
+ "[^|]*integer[^|]*", // test data group
+ "[^|]*", 100, 30); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "Sun.*", // platform
+ "real_concept", // test type(s)
+ "[^|]*medium[^|]*", // test data group
+ "[^|]*", 500, 100); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "Sun.*", // platform
+ "real_concept", // test type(s)
+ "[^|]*integer[^|]*", // test data group
+ "[^|]*", 100, 30); // test function
 
    //
    // Mac OS X:

Copied: branches/bcbboost/libs/math/test/test_igamma_inv.cpp (from r39819, /trunk/libs/math/test/test_igamma_inv.cpp)
==============================================================================
--- /trunk/libs/math/test/test_igamma_inv.cpp (original)
+++ branches/bcbboost/libs/math/test/test_igamma_inv.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -20,6 +20,13 @@
 #include "test_gamma_hooks.hpp"
 #include "handle_test_result.hpp"
 
+#if !defined(TEST_FLOAT) && !defined(TEST_DOUBLE) && !defined(TEST_LDOUBLE) && !defined(TEST_REAL_CONCEPT)
+# define TEST_FLOAT
+# define TEST_DOUBLE
+# define TEST_LDOUBLE
+# define TEST_REAL_CONCEPT
+#endif
+
 //
 // DESCRIPTION:
 // ~~~~~~~~~~~~
@@ -171,7 +178,7 @@
       "[^|]*", // platform
       "real_concept", // test type(s)
       "[^|]*small[^|]*", // test data group
- "[^|]*", 3500, 500); // test function
+ "[^|]*", 3700, 500); // test function
 
    //
    // Finish off by printing out the compiler/stdlib/platform names,
@@ -377,16 +384,24 @@
 #endif
 
 #ifndef BOOST_MATH_BUGGY_LARGE_FLOAT_CONSTANTS
+#ifdef TEST_FLOAT
    test_gamma(0.1F, "float");
 #endif
+#endif
+#ifdef TEST_DOUBLE
    test_gamma(0.1, "double");
+#endif
 #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#ifdef TEST_LDOUBLE
    test_gamma(0.1L, "long double");
+#endif
 #ifndef BOOST_MATH_NO_REAL_CONCEPT_TESTS
 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+#ifdef TEST_REAL_CONCEPT
    test_gamma(boost::math::concepts::real_concept(0.1), "real_concept");
 #endif
 #endif
+#endif
 #else
    std::cout << "<note>The long double tests have been disabled on this platform "
       "either because the long double overloads of the usual math functions are "

Copied: branches/bcbboost/libs/math/test/test_igamma_inva.cpp (from r39819, /trunk/libs/math/test/test_igamma_inva.cpp)
==============================================================================
--- /trunk/libs/math/test/test_igamma_inva.cpp (original)
+++ branches/bcbboost/libs/math/test/test_igamma_inva.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -19,6 +19,13 @@
 
 #include "handle_test_result.hpp"
 
+#if !defined(TEST_FLOAT) && !defined(TEST_DOUBLE) && !defined(TEST_LDOUBLE) && !defined(TEST_REAL_CONCEPT)
+# define TEST_FLOAT
+# define TEST_DOUBLE
+# define TEST_LDOUBLE
+# define TEST_REAL_CONCEPT
+#endif
+
 //
 // DESCRIPTION:
 // ~~~~~~~~~~~~
@@ -250,16 +257,24 @@
    expected_results();
 
 #ifndef BOOST_MATH_BUGGY_LARGE_FLOAT_CONSTANTS
+#ifdef TEST_FLOAT
    test_gamma(0.1F, "float");
 #endif
+#endif
+#ifdef TEST_DOUBLE
    test_gamma(0.1, "double");
+#endif
 #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#ifdef TEST_LDOUBLE
    test_gamma(0.1L, "long double");
+#endif
 #ifndef BOOST_MATH_NO_REAL_CONCEPT_TESTS
 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+#ifdef TEST_REAL_CONCEPT
    test_gamma(boost::math::concepts::real_concept(0.1), "real_concept");
 #endif
 #endif
+#endif
 #else
    std::cout << "<note>The long double tests have been disabled on this platform "
       "either because the long double overloads of the usual math functions are "

Copied: branches/bcbboost/libs/math/test/test_laguerre.cpp (from r39819, /trunk/libs/math/test/test_laguerre.cpp)
==============================================================================
--- /trunk/libs/math/test/test_laguerre.cpp (original)
+++ branches/bcbboost/libs/math/test/test_laguerre.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -9,8 +9,10 @@
 #include <boost/math/special_functions/laguerre.hpp>
 #include <boost/math/constants/constants.hpp>
 #include <boost/array.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
 #include <boost/lambda/lambda.hpp>
 #include <boost/lambda/bind.hpp>
+#endif
 
 #include "handle_test_result.hpp"
 #include "test_legendre_hooks.hpp"
@@ -79,31 +81,31 @@
    add_expected_result(
       ".*", // compiler
       ".*", // stdlib
- "linux.*|Mac OS", // platform
+ "linux.*|Mac OS|Sun.*", // platform
       largest_type, // test type(s)
- ".*", // test data group
- ".*", 40000, 1000); // test function
+ ".*", // test data group
+ ".*", 40000, 1000); // test function
    add_expected_result(
       ".*", // compiler
       ".*", // stdlib
- "linux.*|Mac OS", // platform
- "real_concept", // test type(s)
- ".*", // test data group
- ".*", 40000, 1000); // test function
+ "linux.*|Mac OS|Sun.*", // platform
+ "real_concept", // test type(s)
+ ".*", // test data group
+ ".*", 40000, 1000); // test function
    add_expected_result(
- ".*mingw.*", // compiler
+ ".*mingw.*", // compiler
       ".*", // stdlib
       ".*", // platform
       largest_type, // test type(s)
- ".*", // test data group
- ".*", 40000, 1000); // test function
+ ".*", // test data group
+ ".*", 40000, 1000); // test function
    add_expected_result(
- ".*mingw.*", // compiler
+ ".*mingw.*", // compiler
       ".*", // stdlib
       ".*", // platform
- "real_concept", // test type(s)
- ".*", // test data group
- ".*", 40000, 1000); // test function
+ "real_concept", // test type(s)
+ ".*", // test data group
+ ".*", 40000, 1000); // test function
 
    //
    // Catch all cases come last:
@@ -134,6 +136,7 @@
 template <class T>
 void do_test_laguerre2(const T& data, const char* type_name, const char* test_name)
 {
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
    typedef typename T::value_type row_type;
    typedef typename row_type::value_type value_type;
 
@@ -163,11 +166,13 @@
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::laguerre(n, x)", test_name);
 
    std::cout << std::endl;
+#endif
 }
 
 template <class T>
 void do_test_laguerre3(const T& data, const char* type_name, const char* test_name)
 {
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
    typedef typename T::value_type row_type;
    typedef typename row_type::value_type value_type;
 
@@ -200,6 +205,7 @@
       boost::lambda::ret<value_type>(boost::lambda::_1[3]));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::laguerre(n, m, x)", test_name);
    std::cout << std::endl;
+#endif
 }
 
 template <class T>

Copied: branches/bcbboost/libs/math/test/test_legendre.cpp (from r39819, /trunk/libs/math/test/test_legendre.cpp)
==============================================================================
--- /trunk/libs/math/test/test_legendre.cpp (original)
+++ branches/bcbboost/libs/math/test/test_legendre.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -9,8 +9,10 @@
 #include <boost/math/special_functions/legendre.hpp>
 #include <boost/math/constants/constants.hpp>
 #include <boost/array.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
 #include <boost/lambda/lambda.hpp>
 #include <boost/lambda/bind.hpp>
+#endif
 
 #include "handle_test_result.hpp"
 #include "test_legendre_hooks.hpp"
@@ -190,6 +192,7 @@
 template <class T>
 void do_test_legendre_p(const T& data, const char* type_name, const char* test_name)
 {
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
    typedef typename T::value_type row_type;
    typedef typename row_type::value_type value_type;
 
@@ -267,11 +270,13 @@
 
 
    std::cout << std::endl;
+#endif
 }
 
 template <class T>
 void do_test_assoc_legendre_p(const T& data, const char* type_name, const char* test_name)
 {
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
    typedef typename T::value_type row_type;
    typedef typename row_type::value_type value_type;
 
@@ -304,6 +309,7 @@
       boost::lambda::ret<value_type>(boost::lambda::_1[3]));
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::legendre_p", test_name);
    std::cout << std::endl;
+#endif
 }
 
 template <class T>

Copied: branches/bcbboost/libs/math/test/test_negative_binomial.cpp (from r39819, /trunk/libs/math/test/test_negative_binomial.cpp)
==============================================================================
--- /trunk/libs/math/test/test_negative_binomial.cpp (original)
+++ branches/bcbboost/libs/math/test/test_negative_binomial.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -19,6 +19,13 @@
 # pragma warning(disable: 4127) // conditional expression is constant.
 #endif
 
+#if !defined(TEST_FLOAT) && !defined(TEST_DOUBLE) && !defined(TEST_LDOUBLE) && !defined(TEST_REAL_CONCEPT)
+# define TEST_FLOAT
+# define TEST_DOUBLE
+# define TEST_LDOUBLE
+# define TEST_REAL_CONCEPT
+#endif
+
 #include <boost/math/distributions/negative_binomial.hpp> // for negative_binomial_distribution
 using boost::math::negative_binomial_distribution;
 
@@ -801,12 +808,20 @@
   BOOST_CHECK_EQUAL(my8dist.success_fraction(), static_cast<double>(1./4.));
 
   // (Parameter value, arbitrarily zero, only communicates the floating point type).
+#ifdef TEST_FLOAT
   test_spots(0.0F); // Test float.
+#endif
+#ifdef TEST_DOUBLE
   test_spots(0.0); // Test double.
+#endif
 #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#ifdef TEST_LDOUBLE
   test_spots(0.0L); // Test long double.
+#endif
   #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+#ifdef TEST_REAL_CONCEPT
     test_spots(boost::math::concepts::real_concept(0.)); // Test real concept.
+#endif
   #endif
 #else
    std::cout << "<note>The long double tests have been disabled on this platform "

Copied: branches/bcbboost/libs/math/test/test_poisson.cpp (from r39819, /trunk/libs/math/test/test_poisson.cpp)
==============================================================================
--- /trunk/libs/math/test/test_poisson.cpp (original)
+++ branches/bcbboost/libs/math/test/test_poisson.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -12,6 +12,13 @@
 
 #define BOOST_MATH_DISCRETE_QUANTILE_POLICY real
 
+#if !defined(TEST_FLOAT) && !defined(TEST_DOUBLE) && !defined(TEST_LDOUBLE) && !defined(TEST_REAL_CONCEPT)
+# define TEST_FLOAT
+# define TEST_DOUBLE
+# define TEST_LDOUBLE
+# define TEST_REAL_CONCEPT
+#endif
+
 #ifdef _MSC_VER
 # pragma warning(disable: 4127) // conditional expression is constant.
 #endif
@@ -578,16 +585,24 @@
 #endif
 
         // (Parameter value, arbitrarily zero, only communicates the floating-point type).
+#ifdef TEST_POISSON
   test_spots(0.0F); // Test float.
+#endif
+#ifdef TEST_DOUBLE
   test_spots(0.0); // Test double.
+#endif
 #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
   if (numeric_limits<long double>::digits10 > numeric_limits<double>::digits10)
   { // long double is better than double (so not MSVC where they are same).
+#ifdef TEST_LDOUBLE
           test_spots(0.0L); // Test long double.
+#endif
   }
 
   #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+#ifdef TEST_REAL_CONCEPT
   test_spots(boost::math::concepts::real_concept(0.)); // Test real concept.
+#endif
   #endif
 #endif
         return 0;

Copied: branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept1.cpp (from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_real_concept1.cpp)
==============================================================================
--- /trunk/libs/math/test/test_rational_instances/test_rational_real_concept1.cpp (original)
+++ branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept1.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,10 @@
 
+#include <boost/detail/workaround.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+
 #include "test_rational.hpp"
 #include <boost/math/concepts/real_concept.hpp>
 
 template void do_test_spots<boost::math::concepts::real_concept, boost::math::concepts::real_concept>(boost::math::concepts::real_concept, boost::math::concepts::real_concept);
 
+#endif

Copied: branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept2.cpp (from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_real_concept2.cpp)
==============================================================================
--- /trunk/libs/math/test/test_rational_instances/test_rational_real_concept2.cpp (original)
+++ branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept2.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,10 @@
 
+#include <boost/detail/workaround.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+
 #include "test_rational.hpp"
 #include <boost/math/concepts/real_concept.hpp>
 
 template void do_test_spots<boost::math::concepts::real_concept, int>(boost::math::concepts::real_concept, int);
 
+#endif

Copied: branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept3.cpp (from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_real_concept3.cpp)
==============================================================================
--- /trunk/libs/math/test/test_rational_instances/test_rational_real_concept3.cpp (original)
+++ branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept3.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,10 @@
 
+#include <boost/detail/workaround.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+
 #include "test_rational.hpp"
 #include <boost/math/concepts/real_concept.hpp>
 
 template void do_test_spots<boost::math::concepts::real_concept, unsigned>(boost::math::concepts::real_concept, unsigned);
 
+#endif

Copied: branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept4.cpp (from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_real_concept4.cpp)
==============================================================================
--- /trunk/libs/math/test/test_rational_instances/test_rational_real_concept4.cpp (original)
+++ branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept4.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,7 +1,11 @@
 
+#include <boost/detail/workaround.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+
 #include "test_rational.hpp"
 #include <boost/math/concepts/real_concept.hpp>
 
 #ifdef BOOST_HAS_LONG_LONG
 template void do_test_spots<boost::math::concepts::real_concept, unsigned long long>(boost::math::concepts::real_concept, unsigned long long);
 #endif
+#endif

Copied: branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept5.cpp (from r39819, /trunk/libs/math/test/test_rational_instances/test_rational_real_concept5.cpp)
==============================================================================
--- /trunk/libs/math/test/test_rational_instances/test_rational_real_concept5.cpp (original)
+++ branches/bcbboost/libs/math/test/test_rational_instances/test_rational_real_concept5.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,5 +1,10 @@
 
+#include <boost/detail/workaround.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+
 #include "test_rational.hpp"
 #include <boost/math/concepts/real_concept.hpp>
 
 template void do_test_spots<boost::math::concepts::real_concept, float>(boost::math::concepts::real_concept, float);
+
+#endif

Copied: branches/bcbboost/libs/math/test/test_spherical_harmonic.cpp (from r39819, /trunk/libs/math/test/test_spherical_harmonic.cpp)
==============================================================================
--- /trunk/libs/math/test/test_spherical_harmonic.cpp (original)
+++ branches/bcbboost/libs/math/test/test_spherical_harmonic.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -9,8 +9,10 @@
 #include <boost/math/special_functions/spherical_harmonic.hpp>
 #include <boost/math/constants/constants.hpp>
 #include <boost/array.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
 #include <boost/lambda/lambda.hpp>
 #include <boost/lambda/bind.hpp>
+#endif
 
 #include "handle_test_result.hpp"
 
@@ -98,6 +100,7 @@
 template <class T>
 void do_test_spherical_harmonic(const T& data, const char* type_name, const char* test_name)
 {
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
    typedef typename T::value_type row_type;
    typedef typename row_type::value_type value_type;
 
@@ -151,6 +154,7 @@
    handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::spherical_harmonic_i", test_name);
 
    std::cout << std::endl;
+#endif
 }
 
 template <class T>

Modified: branches/bcbboost/libs/multi_index/doc/acknowledgements.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/acknowledgements.html (original)
+++ branches/bcbboost/libs/multi_index/doc/acknowledgements.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -148,6 +148,18 @@
 <br style="clear:all;">
 </p>
 
+<h2><a name="boost_1_35">Boost 1.35 release</a></h2>
+
+<p>
+global_fun
+was included after a proposal by Markus Werle. Bruno Mart&iacute;nez Aguerre
+suggested the inclusion of
+iterator_to. The
+rollback versions of <code>modify</code> and <code>modify_key</code> arose
+from discussions with Mat&iacute;as Capeletto. Steven Watanabe spotted an
+include guard bug present from the first release of the library.
+</p>
+
 <hr>
 
 <div class="prev_link"><a href="release_notes.html"><img src="prev.gif" alt="release notes" border="0"><br>
@@ -161,9 +173,9 @@
 
 <br>
 
-<p>Revised December 21st 2006</p>
+<p>Revised September 3rd 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/examples.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/examples.html (original)
+++ branches/bcbboost/libs/multi_index/doc/examples.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -31,7 +31,7 @@
 
 <ul>
   <li>Example 1: basic usage</li>
- <li>Example 2: using member functions as keys</li>
+ <li>Example 2: using functions as keys</li>
   <li><a href="#example3">Example 3: constructing <code>multi_index_container</code>s
     with <code>ctor_args_list</code></a></li>
   <li>Example 4: bidirectional map</li>
@@ -42,6 +42,7 @@
   <li>Example 9: serialization and MRU lists</li>
   <li>Example 10: random access indices</li>
   <li>Example 11: index rearrangement</li>
+ <li>Example 12: using Boost.Interprocess allocators</li>
 </ul>
 
 <h2><a name="example1">Example 1: basic usage</a></h2>
@@ -55,23 +56,23 @@
 with an admittedly boring set of <code>employee</code> records.
 </p>
 
-<h2><a name="example2">Example 2: using member functions as keys</a></h2>
+<h2><a name="example2">Example 2: using functions as keys</a></h2>
 
 <p>
-See source code.
+See source code.
 </p>
 
 <p>
 Usually keys assigned to an index are based on a member variable of the
 element, but key extractors can be defined which take their value from
-a member function. This has some similarity with the concept of
+a member function or a global function. This has some similarity with the concept of
 <i>calculated keys</i> supported by some relational database engines.
 The example shows how to use the predefined <code>const_mem_fun</code>
-key extractor to deal with this situation.
+and <code>global_fun</code> key extractors to deal with this situation.
 </p>
 
 <p>
-Keys based on member functions usually will not be actual references,
+Keys based on functions usually will not be actual references,
 but rather the temporary values resulting from the invocation of the
 member function used. This implies that <code>modify_key</code> cannot be
 applied to this type of extractors, which is a perfectly logical
@@ -111,6 +112,12 @@
 dictionary with online query of words in both languages.
 </p>
 
+<p>
+This bidirectional map can be considered as a primitive precursor
+to the full-fledged container provided by
+Boost.Bimap.
+</p>
+
 <h2><a name="example5">Example 5: sequenced indices</a></h2>
 
 <p>
@@ -412,6 +419,23 @@
 auxiliary data structure.
 </p>
 
+<h2><a name="example12">Example 12: using Boost.Interprocess allocators</a></h2>
+
+<p>
+See source code.
+</p>
+
+<p>
+Boost.MultiIndex supports special allocators such as those provided by
+Boost.Interprocess,
+which allows for <code>multi_index_container</code>s to be placed in shared
+memory. The example features a front-end to a small book database
+implemented by means of a <code>multi_index_container</code> stored
+in a Boost.Interprocess memory mapped file. The reader can verify that several
+instances of the program correctly work simultaneously and immediately see
+the changes to the database performed by any other instance.
+</p>
+
 <hr>
 
 <div class="prev_link"><a href="performance.html"><img src="prev.gif" alt="performance" border="0"><br>
@@ -426,9 +450,9 @@
 
 <br>
 
-<p>Revised March 3rd 2006</p>
+<p>Revised July 16th 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/future_work.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/future_work.html (original)
+++ branches/bcbboost/libs/multi_index/doc/future_work.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -41,7 +41,6 @@
   <li>Notifying indices</li>
   <li>Constraints</li>
   <li>User-defined indices</li>
- <li>Bidirectional map</li>
   <li>Indexed maps</li>
   <li>Move semantics</li>
 </ul>
@@ -150,19 +149,6 @@
 user can write implementations for her own indices.
 </p>
 
-<h2><a name="bimap">Bidirectional map</a></h2>
-
-<p>
-Example 4 in the examples section
-features a <i>bidirectional map</i>, implemented as a
-<code>multi_index_container</code> with two unique ordered indices. This particular
-structure is deemed important enough as to provide it as a separate
-class template, relying internally in <code>multi_index_container</code>. As
-feedback is collected from the users of Boost.MultiIndex, other singular
-instantiations of <code>multi_index_container</code> might be encapsulated
-to form a component library of ready to use containers.
-</p>
-
 <h2><a name="indexed_maps">Indexed maps</a></h2>
 
 <p>
@@ -240,9 +226,9 @@
 
 <br>
 
-<p>Revised February 6th 2006</p>
+<p>Revised July 5th 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/reference/hash_indices.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/reference/hash_indices.html (original)
+++ branches/bcbboost/libs/multi_index/doc/reference/hash_indices.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -44,9 +44,11 @@
           <li>Instantiation types</li>
           <li>Nested types</li>
           <li>Constructors, copy and assignment</li>
+ <li>Iterators</li>
           <li>Modifiers</li>
           <li>Observers</li>
           <li>Lookup</li>
+ <li>Bucket interface</li>
           <li>Hash policy</li>
           <li>Serialization</li>
         </ul>
@@ -248,7 +250,12 @@
   <span class=identifier>const_iterator</span> <span class=identifier>begin</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
   <span class=identifier>iterator</span> <span class=identifier>end</span><span class=special>();</span>
   <span class=identifier>const_iterator</span> <span class=identifier>end</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_iterator</span> <span class=identifier>cbegin</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_iterator</span> <span class=identifier>cend</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
  
+ <span class=identifier>iterator</span> <span class=identifier>iterator_to</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
+ <span class=identifier>const_iterator</span> <span class=identifier>iterator_to</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
+
   <span class=comment>// modifiers:</span>
 
   <span class=identifier>std</span><span class=special>::</span><span class=identifier>pair</span><span class=special>&lt;</span><span class=identifier>iterator</span><span class=special>,</span><span class=keyword>bool</span><span class=special>&gt;</span> <span class=identifier>insert</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
@@ -262,7 +269,11 @@
 
   <span class=keyword>bool</span> <span class=identifier>replace</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
   <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>&gt;</span> <span class=keyword>bool</span> <span class=identifier>modify</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>);</span>
+ <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Rollback</span><span class=special>&gt;</span>
+ <span class=keyword>bool</span> <span class=identifier>modify</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>,</span><span class=identifier>Rollback</span> <span class=identifier>back</span><span class=special>);</span>
   <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>&gt;</span> <span class=keyword>bool</span> <span class=identifier>modify_key</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>);</span>
+ <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Rollback</span><span class=special>&gt;</span>
+ <span class=keyword>bool</span> <span class=identifier>modify_key</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>,</span><span class=identifier>Rollback</span> <span class=identifier>back</span><span class=special>);</span>
   
   <span class=keyword>void</span> <span class=identifier>clear</span><span class=special>();</span>
   <span class=keyword>void</span> <span class=identifier>swap</span><span class=special>(</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
@@ -313,6 +324,11 @@
   <span class=identifier>const_local_iterator</span> <span class=identifier>begin</span><span class=special>(</span><span class=identifier>size_type</span> <span class=identifier>n</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
   <span class=identifier>local_iterator</span> <span class=identifier>end</span><span class=special>(</span><span class=identifier>size_type</span> <span class=identifier>n</span><span class=special>);</span>
   <span class=identifier>const_local_iterator</span> <span class=identifier>end</span><span class=special>(</span><span class=identifier>size_type</span> <span class=identifier>n</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_local_iterator</span> <span class=identifier>cbegin</span><span class=special>(</span><span class=identifier>size_type</span> <span class=identifier>n</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_local_iterator</span> <span class=identifier>cend</span><span class=special>(</span><span class=identifier>size_type</span> <span class=identifier>n</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
+
+ <span class=identifier>local_iterator</span> <span class=identifier>local_iterator_to</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
+ <span class=identifier>const_local_iterator</span> <span class=identifier>local_iterator_to</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
 
   <span class=comment>// hash policy:</span>
 
@@ -434,6 +450,18 @@
 <b>Returns:</b> <code>*this</code>.<br>
 </blockquote>
 
+<h4><a name="iterators">Iterators</a></h4>
+
+<code>iterator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator_to(const value_type&amp; x);</br>
+const_iterator iterator_to(const value_type&amp; x)const;</code>
+
+<blockquote>
+<b>Requires:</b> <code>x</code> is a reference to an element of the container.</br>
+<b>Returns:</b> An iterator to <code>x</code>.<br>
+<b>Complexity:</b> Constant.<br>
+<b>Exception safety:</b> <code>nothrow</code>.<br>
+</blockquote>
+
 <h4><a name="modifiers">Modifiers</a></h4>
 
 <code>std::pair&lt;iterator,bool> insert(const value_type&amp; x);</code>
@@ -589,37 +617,77 @@
 the element pointed to by <code>position</code> is erased.
 </blockquote>
 
-<a name="modify_key">
-<code>template&lt;typename Modifier> bool modify_key(iterator position,Modifier mod);</code></a>
+<code>template&lt;typename Modifier,typename Rollback><br>
+bool modify(iterator position,Modifier mod,Rollback back);</code>
 
 <blockquote>
-<b>Requires:</b> <code>key_from_value</code> is a read/write
-Key Extractor
-from <code>value_type</code>. <code>Modifier</code> is a model of
+<b>Requires:</b> <code>Modifier</code> and <code>Rollback</code> are models of
 <a href="http://www.sgi.com/tech/stl/UnaryFunction.html">
 <code>Unary Function</code></a> accepting arguments of type
-<code>key_type&amp;</code>. <code>position</code> is a valid dereferenceable
-iterator of the index.</br>
-<b>Effects:</b> Calls <code>mod(k)</code> where <code>k</code> is the key
-obtained by the internal <code>KeyFromValue</code> object of the index from
-the element pointed to by <code>position</code>, and rearranges
-<code>*position</code> into all the indices of the <code>multi_index_container</code>.
-Rearrangement is successful if
+<code>value_type&amp;</code>. <code>position</code> is a valid dereferenceable
+iterator of the index. The sequence of operations <code>mod(e)</code>,
+<code>back(e)</code>, where <code>e</code> is the element
+pointed to by <code>position</code>, restores all keys of the element
+to their original state.</br>
+<b>Effects:</b> Calls <code>mod(e)</code> where <code>e</code> is the element
+pointed to by <code>position</code> and tries to rearrange <code>*position</code> into
+all the indices of the <code>multi_index_container</code>. Rearrangement is successful if
 <ul>
   <li>the index is non-unique OR no other element exists
     with equivalent key,</li>
   <li>AND rearrangement is allowed by all other indices of the
     <code>multi_index_container</code>.</li>
 </ul>
-If the rearrangement fails, the element is erased.<br>
-<b>Postconditions:</b>Validity of <code>position</code> is preserved if
-the operation succeeds.<br>
+If the rearrangement fails, <code>back(e)</code> is invoked and the
+element is kept at its original position in all indices.<br>
+<b>Postconditions:</b> Validity of <code>position</code> is preserved except if
+the element is erased under the conditions described below.<br>
 <b>Returns:</b> <code>true</code> if the operation succeeded, <code>false</code>
 otherwise.<br>
 <b>Complexity:</b> <code>O(M(n))</code>.<br>
-<b>Exception safety:</b> Basic. If an exception is thrown by some
-user-provided operation (except possibly <code>mod</code>), then
-the element pointed to by <code>position</code> is erased.
+<b>Exception safety:</b> Strong, except if <code>back</code> throws an
+exception, in which case the modified element is erased. If <code>back</code>
+throws inside the handling code executing after some other user-provided
+operation has thrown, it is the exception generated by <code>back</code> that
+is rethrown.
+</blockquote>
+
+<a name="modify_key">
+<code>template&lt;typename Modifier> bool modify_key(iterator position,Modifier mod);</code></a>
+
+<blockquote>
+<b>Requires:</b> <code>key_from_value</code> is a read/write
+Key Extractor
+from <code>value_type</code>. <code>Modifier</code> is a model of
+<a href="http://www.sgi.com/tech/stl/UnaryFunction.html">
+<code>Unary Function</code></a> accepting arguments of type
+<code>key_type&amp;</code>. <code>position</code> is a valid dereferenceable
+iterator of the index.</br>
+<b>Effects:</b> Equivalent to <code>modify(position,mod')</code>,
+with <code>mod'</code> defined in such a way that
+<code>mod'(x)</code> is the same as <code>mod(key(x))</code>, where
+<code>key</code> is the internal <code>KeyFromValue</code> object of the index.
+</blockquote>
+
+<code>template&lt;typename Modifier,typename Rollback><br>
+bool modify_key(iterator position,Modifier mod,Rollback back);</code>
+
+<blockquote>
+<b>Requires:</b> <code>key_from_value</code> is a read/write
+Key Extractor
+from <code>value_type</code>. <code>Modifier</code> and <code>Rollback</code>
+are models of <a href="http://www.sgi.com/tech/stl/UnaryFunction.html">
+<code>Unary Function</code></a> accepting arguments of type
+<code>key_type&amp;</code>. <code>position</code> is a valid dereferenceable
+iterator of the index.
+The sequence of operations <code>mod(k)</code>,
+<code>back(k)</code>, where <code>k</code> is the key of the element
+pointed to by <code>position</code>, restores k to its original state.</br>
+<b>Effects:</b> Equivalent to <code>modify(position,mod',back')</code>,
+with <code>mod'</code> and <code>back</code> defined in such a way that
+<code>mod'(x)</code> is the same as <code>mod(key(x))</code> and
+<code>back'(x)</code> is the same as <code>back(key(x))</code>, where
+<code>key</code> is the internal <code>KeyFromValue</code> object of the index.
 </blockquote>
 
 <h4><a name="observers">Observers</a></h4>
@@ -768,7 +836,8 @@
 <b>Requires:</b> <code>CompatibleKey</code> is a compatible key of
 (<code>hasher</code>, <code>key_equal</code>).</br>
 <b>Effects:</b> Returns a range containing all elements with keys equivalent
-to <code>x</code> (and only those).<br>
+to <code>x</code> (and only those), or (<code>end()</code>,<code>end()</code>)
+if no such elements exist.<br>
 <b>Complexity:</b> Average case <code>O(count(x))</code>, worst case
 <code>O(n)</code>.<br>
 </blockquote>
@@ -786,11 +855,24 @@
 <code>CompatiblePred</code>) is a compatible extension of
 (<code>hasher</code>, <code>key_equal</code>).</br>
 <b>Effects:</b> Returns a range containing all elements with keys equivalent
-to <code>x</code> (and only those).<br>
+to <code>x</code> (and only those), or (<code>end()</code>,<code>end()</code>)
+if no such elements exist.<br>
 <b>Complexity:</b> Average case <code>O(count(x,hash,eq))</code>, worst case
 <code>O(n)</code>.<br>
 </blockquote>
 
+<h4><a name="bucket_interface">Bucket interface</a></h4>
+
+<code>local_iterator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local_iterator_to(const value_type&amp; x);</br>
+const_local_iterator local_iterator_to(const value_type&amp; x)const;</code>
+
+<blockquote>
+<b>Requires:</b> <code>x</code> is a reference to an element of the container.</br>
+<b>Returns:</b> An iterator to <code>x</code>.<br>
+<b>Complexity:</b> Constant.<br>
+<b>Exception safety:</b> <code>nothrow</code>.<br>
+</blockquote>
+
 
 <h4><a name="hash_policy">Hash policy</a></h4>
 
@@ -895,9 +977,9 @@
 
 <br>
 
-<p>Revised July 13th 2006</p>
+<p>Revised July 2nd 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/reference/index.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/reference/index.html (original)
+++ branches/bcbboost/libs/multi_index/doc/reference/index.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -88,7 +88,9 @@
       <li><a href="key_extraction.html#member_synopsis">
         <code>"boost/multi_index/member.hpp"</code></a>,</li>
           <li><a href="key_extraction.html#mem_fun_synopsis">
- <code>"boost/multi_index/mem_fun.hpp"</code></a> and</li>
+ <code>"boost/multi_index/mem_fun.hpp"</code></a>,</li>
+ <li><a href="key_extraction.html#global_fun_synopsis">
+ <code>"boost/multi_index/global_fun.hpp"</code></a> and</li>
           <li><a href="key_extraction.html#composite_key_synopsis">
         <code>"boost/multi_index/composite_key.hpp"</code></a>.</li>
     </ul>
@@ -125,9 +127,9 @@
 
 <br>
 
-<p>Revised February 6th 2005</p>
+<p>Revised June 19th 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/reference/key_extraction.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/reference/key_extraction.html (original)
+++ branches/bcbboost/libs/multi_index/doc/reference/key_extraction.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -63,6 +63,12 @@
       <li>Macro BOOST_MULTI_INDEX_MEM_FUN</li>
     </ul>
   </li>
+ <li><a href="#global_fun_synopsis">Header
+ <code>"boost/multi_index/global_fun.hpp"</code> synopsis</a>
+ <ul>
+ <li>Class template global_fun</li>
+ </ul>
+ </li>
   <li><a href="#composite_key_synopsis">Header
     <code>"boost/multi_index/composite_key.hpp"</code> synopsis</a>
     <ul>
@@ -131,12 +137,13 @@
 </p>
 
 <p>
-Boost.MultiIndex provides five general-purpose key extractors:
+Boost.MultiIndex provides six general-purpose key extractors:
 <ul>
   <li>identity,</li>
   <li>member,</li>
   <li>const_mem_fun,</li>
- <li>mem_fun and</li>
+ <li>mem_fun,</li>
+ <li>global_fun and</li>
   <li>composite_key,</li>
 </ul>
 plus replacements for some of them:
@@ -178,6 +185,7 @@
 <span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>boost</span><span class=special>/</span><span class=identifier>multi_index</span><span class=special>/</span><span class=identifier>identity</span><span class=special>.</span><span class=identifier>hpp</span><span class=special>&gt;</span>
 <span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>boost</span><span class=special>/</span><span class=identifier>multi_index</span><span class=special>/</span><span class=identifier>member</span><span class=special>.</span><span class=identifier>hpp</span><span class=special>&gt;</span>
 <span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>boost</span><span class=special>/</span><span class=identifier>multi_index</span><span class=special>/</span><span class=identifier>mem_fun</span><span class=special>.</span><span class=identifier>hpp</span><span class=special>&gt;</span>
+<span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>boost</span><span class=special>/</span><span class=identifier>multi_index</span><span class=special>/</span><span class=identifier>global_fun</span><span class=special>.</span><span class=identifier>hpp</span><span class=special>&gt;</span>
 <span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>boost</span><span class=special>/</span><span class=identifier>multi_index</span><span class=special>/</span><span class=identifier>composite_key</span><span class=special>.</span><span class=identifier>hpp</span><span class=special>&gt;</span>
 </pre></blockquote>
 
@@ -770,6 +778,147 @@
 </p>
 
 <h2>
+<a name="global_fun_synopsis">Header
+<a href="../../../../boost/multi_index/global_fun.hpp">
+<code>"boost/multi_index/global_fun.hpp"</code></a> synopsis</a></h2>
+
+<blockquote><pre>
+<span class=keyword>namespace</span> <span class=identifier>boost</span><span class=special>{</span>
+
+<span class=keyword>namespace</span> <span class=identifier>multi_index</span><span class=special>{</span>
+
+<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>class</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Type</span><span class=special>,</span><span class=identifier>Type</span> <span class=special>(*</span><span class=identifier>PtrToFunction</span><span class=special>)(</span><span class=identifier>Value</span><span class=special>)&gt;</span>
+<span class=keyword>struct</span> <span class=identifier>global_fun</span><span class=special>;</span>
+
+<span class=special>}</span> <span class=comment>// namespace boost::multi_index</span>
+
+<span class=special>}</span> <span class=comment>// namespace boost</span>
+</pre></blockquote>
+
+<h3><a name="global_fun">Class template <code>global_fun</code></a></h3>
+
+<p>
+<code>global_fun</code> is a Key Extractor
+based on a given global or static member function accepting the base type as argument
+and returning the associated key.
+</p>
+
+<blockquote><pre>
+<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>class</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Type</span><span class=special>,</span><span class=identifier>Type</span> <span class=special>(*</span><span class=identifier>PtrToFunction</span><span class=special>)(</span><span class=identifier>Value</span><span class=special>)&gt;</span>
+<span class=keyword>struct</span> <span class=identifier>global_fun</span>
+<span class=special>{</span>
+ <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>remove_reference</span><span class=special>&lt;</span><span class=identifier>Type</span><span class=special>&gt;::</span><span class=identifier>type</span> <span class=identifier>result_type</span><span class=special>;</span>
+
+ <span class=comment>// Only provided under the following circumstances:
+ // - If Value is a reference to a constant type, only provided
+ // when const ChainedPtr&amp; is not convertible to Value;
+ // - if Value is a reference to a non-const type, only provided
+ // when ChainedPtr&amp; is not convertible to Value;
+ // - else, only provided when const ChainedPtr&amp; is not
+ // convertible to const Value&amp;.</span>
+ <span class=identifier>Type</span> <span class=keyword>operator</span><span class=special>()(</span><span class=keyword>const</span> <span class=identifier>ChainedPtr</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
+
+ <span class=comment>// only provided if Value is a reference type</span>
+ <span class=identifier>Type</span> <span class=keyword>operator</span><span class=special>()(</span><span class=identifier>Value</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
+
+ <span class=comment>// only provided if Value is not a reference type</span>
+ <span class=identifier>Type</span> <span class=keyword>operator</span><span class=special>()(</span><span class=keyword>const</span> <span class=identifier>Value</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
+
+ <span class=comment>// only provided if Value is not a reference type</span>
+ <span class=identifier>Type</span> <span class=keyword>operator</span><span class=special>()(</span><span class=keyword>const</span> <span class=identifier>reference_wrapper</span><span class=special>&lt;</span><span class=keyword>const</span> <span class=identifier>Value</span><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
+
+ <span class=comment>// only provided if Value is a reference type</span>
+ <span class=identifier>Type</span> <span class=keyword>operator</span><span class=special>()(</span>
+ <span class=keyword>const</span> <span class=identifier>reference_wrapper</span><span class=special>&lt;</span>
+ <span class=identifier>remove_reference</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
+
+ <span class=comment>// only provided if Value is not a reference type or is
+ // a reference to a constant type</span>
+ <span class=identifier>Type</span> <span class=keyword>operator</span><span class=special>()(</span>
+ <span class=keyword>const</span> <span class=identifier>reference_wrapper</span><span class=special>&lt;</span>
+ <span class=keyword>typename</span> <span class=identifier>remove_const</span><span class=special>&lt;</span>
+ <span class=keyword>typename</span> <span class=identifier>remove_reference</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
+<span class=special>};</span>
+</pre></blockquote>
+
+<p>
+<code>PtrToFunction</code> specifies the particular function used to extract
+the key of type <code>Type</code> from some <code>BaseType</code>.
+<code>global_fun</code> supports the following function signatures:
+<ul>
+ <li><code>Type f(BaseType)</code> (<code>Value</code> is <code>BaseType</code>),</li>
+ <li><code>Type f(const BaseType&amp;)</code> (<code>Value</code> is <code>const BaseType&amp;</code>),</li>
+ <li><code>Type f(BaseType&amp;)</code> (<code>Value</code> is <code>BaseType&amp;</code>).</li>
+</ul>
+<code>global_fun&lt;Type,Value,PtrToFunction&gt;</code> is a model of:
+<ul>
+ <li>Key Extractor
+ from <code>reference_wrapper&lt;BaseType></code>,</li>
+ <li>Key Extractor
+ from any chained pointer
+ to <code>BaseType</code>.</li>
+</ul>
+When <code>Value</code> is <code>BaseType</code> or
+<code>const BaseType&amp;</code>,
+<code>global_fun&lt;Type,Value,PtrToFunction&gt;</code> is also a model of:
+<ul>
+ <li>Key Extractor
+ from <code>BaseType</code>,</li>
+ <li>Key Extractor
+ from <code>reference_wrapper&lt;const BaseType></code>,</li>
+ <li>Key Extractor
+ from any chained pointer
+ to <code>const BaseType</code>.</li>
+</ul>
+</p>
+
+<h4><code>global_fun</code> members</h4>
+
+<code>template&lt;typename ChainedPtr> Type operator()(const ChainedPtr&amp; x)const;</code>
+
+<blockquote>
+<b>Requires:</b> <code>ChainedPtr</code> is a chained pointer
+type to <code>Value</code>.<br>
+<b>Returns:</b> <code>PtrToFunction)(y)</code>, where <code>y</code> is the
+object chained-pointed to by <code>x</code>.
+</blockquote>
+
+<code>Type operator()(Value x)const;</code>
+
+<blockquote>
+<b>Returns:</b> <code>PtrToFunction(x)</code>.
+</blockquote>
+
+<code>Type operator()(const Value&amp; x)const;</code>
+
+<blockquote>
+<b>Returns:</b> <code>PtrToFunction(x)</code>.
+</blockquote>
+
+<code>Type operator()(const reference_wrapper&lt;const Value&gt;&amp; x)const;</code>
+
+<blockquote>
+<b>Returns:</b> <code>PtrToFunction(x.get())</code>.
+</blockquote>
+
+<code>
+Type operator()(<br>
+&nbsp;&nbsp;const reference_wrapper&lt;remove_reference&lt;Value&gt;::type&gt;&amp; x)const;</code>
+
+<blockquote>
+<b>Returns:</b> <code>PtrToFunction(x.get())</code>.
+</blockquote>
+
+<code>Type operator()(<br>
+&nbsp;&nbsp;const reference_wrapper&lt;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;typename remove_const&lt;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typename remove_reference&lt;Value&gt;::type&gt;::type&gt;&amp; x)const;</code>
+
+<blockquote>
+<b>Returns:</b> <code>PtrToFunction(x.get())</code>.
+</blockquote>
+
+<h2>
 <a name="composite_key_synopsis">Header
 <a href="../../../../boost/multi_index/composite_key.hpp">
 <code>"boost/multi_index/composite_key.hpp"</code></a> synopsis</a></h2>
@@ -787,7 +936,7 @@
   
 <span class=comment>// comparison operators for composite_key_result:</span>
 
-<span class=comment>// <b>OP</b> is any of =,&lt;,!=,&gt;,&gt;=,&lt;=</span>
+<span class=comment>// <b>OP</b> is any of ==,&lt;,!=,&gt;,&gt;=,&lt;=</span>
 
 <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompositeKey1</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>CompositeKey2</span><span class=special>&gt;</span>
 <span class=keyword>bool</span> <span class=keyword>operator</span> <b><i>OP</i></b><span class=special>(</span>
@@ -1005,7 +1154,7 @@
 
 <span class=comment>// comparison:</span>
   
-<span class=comment>// <b>OP</b> is any of =,&lt;,!=,&gt;,&gt;=,&lt;=</span>
+<span class=comment>// <b>OP</b> is any of ==,&lt;,!=,&gt;,&gt;=,&lt;=</span>
 
 <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompositeKey1</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>CompositeKey2</span><span class=special>&gt;</span>
 <span class=keyword>bool</span> <span class=keyword>operator</span> <b><i>OP</i></b><span class=special>(</span>
@@ -2072,9 +2221,22 @@
 <code>composite_key_result&lt;composite_key&lt;K0,...,Kk> ></code>, with
 <code>Ki::result_type = Qi</code> for all <code>i = 0,...,k</code>.
 </blockquote>
-provided that each <code>Qi</code> is either <code>Ti</code> or a
-Compatible Key
-of <code>Comparei</code>. In this case, the comparison is done
+provided that
+<ul>
+ <li>for <code>i = 0,...,min(j,k)-1</code>, <code>Qi</code> is either <code>Ti</code>
+ or <i>not coarser</i> than <code>Ti</code> (<code>Qi</code> is a
+ Compatible Key
+ of <code>Comparei</code> and there are no two distinct elements of
+ <code>Ti</code> equivalent to one single element of <code>Qi</code>);
+ </li>
+ <li>
+ <code>Qm</code> (with <code>m = min(j,k)</code>) is either <code>Tm</code> or a
+ Compatible Key
+ of <code>Comparem</code>.
+ </li>
+</ul>
+
+In this case, the comparison is done
 lexicographically only on the first <code>1+min(j,k)</code> elements.
 </p>
 
@@ -2101,9 +2263,9 @@
 
 <br>
 
-<p>Revised July 13th 2006</p>
+<p>Revised August 2nd 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/reference/multi_index_container.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/reference/multi_index_container.html (original)
+++ branches/bcbboost/libs/multi_index/doc/reference/multi_index_container.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -493,7 +493,8 @@
 <ol>
   <li><code>Value</code> is the
     <a href="http://www.sgi.com/tech/stl/Assignable.html"><code>Assignable</code></a>
- type of the elements contained.</li>
+ type of the elements contained.
+ </li>
   <li><code>IndexSpecifierList</code> specifies the indices that the
     <code>multi_index_container</code> is composed of. It must be a non-empty
     <a href="../../../../libs/mpl/doc/refmanual/forward-sequence.html">
@@ -503,8 +504,27 @@
     syntactic convenience, the
     <a href="indices.html#indexed_by"><code>indexed_by</code></a>
     MPL sequence can be used.
- <li><code>Allocator</code> must comply with the C++ requirements for
- allocators <b>[lib.allocator.requirements]</b>.
+ </li>
+ <li><code>Allocator</code> must be an allocator of <code>Value</code> objects
+ satisfying the associated C++ requirements at <b>[lib.allocator.requirements]</b>.
+ The following relaxations to the standard requirements are allowed:
+ <ul>
+ <li>Non-equal allocator instances are supported: swapping two non-equal
+ instances must not throw any exception.
+ </li>
+ <li>For every type <code>T</code>,
+ the type <code>Allocator::rebind&lt;T&gt;::other::pointer</code> can be any
+ kind of
+ <a href="http://www.sgi.com/tech/stl/RandomAccessIterator.html"><code>Random
+ Access Iterator</code></a>, provided that it is explicitly constructible from
+ the literal <code>0</code> (standing here as the null pointer) or from any
+ <code>p</code> of type <code>T*</code> pointing into an area allocated by
+ some instance of <code>Allocator</code> or some other allocator type rebound
+ from <code>Allocator</code>. A <code>pointer</code> constructed from
+ <code>p</code> shall dereference to <code>*p</code>.
+ </li>
+ </ul>
+ </li>
 </ol>
 Indices of a given <code>multi_index_container</code> instantiation cannot have
 duplicate tags, either within a single
@@ -882,9 +902,9 @@
 
 <br>
 
-<p>Revised February 6th 2006</p>
+<p>Revised July 17th 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/reference/ord_indices.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/reference/ord_indices.html (original)
+++ branches/bcbboost/libs/multi_index/doc/reference/ord_indices.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -43,6 +43,7 @@
           <li>Complexity signature</li>
           <li>Instantiation types</li>
           <li>Constructors, copy and assignment</li>
+ <li>Iterators</li>
           <li>Modifiers</li>
           <li>Observers</li>
           <li>Set operations</li>
@@ -205,7 +206,7 @@
 
 <span class=keyword>namespace</span> <span class=identifier>multi_index</span><span class=special>{</span>
 
-<span class=keyword>namespace</span><span class=special>{</span> <b>implementation defined </b><span class=identifier>unbounded</span><span class=special>;</span> <span class=special>}</span> <span class=comment>// see range()</span>
+<b>implementation defined </b><span class=identifier>unbounded</span><span class=special>;</span> <span class=comment>// see range()</span>
 
 <span class=keyword>namespace</span> <span class=identifier>detail</span><span class=special>{</span>
 
@@ -252,7 +253,14 @@
   <span class=identifier>const_reverse_iterator</span> <span class=identifier>rbegin</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
   <span class=identifier>reverse_iterator</span> <span class=identifier>rend</span><span class=special>();</span>
   <span class=identifier>const_reverse_iterator</span> <span class=identifier>rend</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_iterator</span> <span class=identifier>cbegin</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_iterator</span> <span class=identifier>cend</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_reverse_iterator</span> <span class=identifier>crbegin</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_reverse_iterator</span> <span class=identifier>crend</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
  
+ <span class=identifier>iterator</span> <span class=identifier>iterator_to</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
+ <span class=identifier>const_iterator</span> <span class=identifier>iterator_to</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
+
   <span class=comment>// capacity:</span>
 
   <span class=keyword>bool</span> <span class=identifier>empty</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
@@ -272,7 +280,11 @@
 
   <span class=keyword>bool</span> <span class=identifier>replace</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
   <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>&gt;</span> <span class=keyword>bool</span> <span class=identifier>modify</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>);</span>
+ <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Rollback</span><span class=special>&gt;</span>
+ <span class=keyword>bool</span> <span class=identifier>modify</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>,</span><span class=identifier>Rollback</span> <span class=identifier>back</span><span class=special>);</span>
   <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>&gt;</span> <span class=keyword>bool</span> <span class=identifier>modify_key</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>);</span>
+ <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Rollback</span><span class=special>&gt;</span>
+ <span class=keyword>bool</span> <span class=identifier>modify_key</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>,</span><span class=identifier>Rollback</span> <span class=identifier>back</span><span class=special>);</span>
   
   <span class=keyword>void</span> <span class=identifier>swap</span><span class=special>(</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
   <span class=keyword>void</span> <span class=identifier>clear</span><span class=special>();</span>
@@ -395,7 +407,7 @@
   <li>copying: <code>c(n)=n*log(n)</code>,</li>
   <li>insertion: <code>i(n)=log(n)</code>,</li>
   <li>hinted insertion: <code>h(n)=1</code> (constant) if the hint element
- precedes the point of insertion, <code>h(n)=log(n)</code> otherwise,</li>
+ is immediately after the point of insertion, <code>h(n)=log(n)</code> otherwise,</li>
   <li>deletion: <code>d(n)=1</code> (amortized constant),</li>
   <li>replacement: <code>r(n)=1</code> (constant) if the element position does not
     change, <code>r(n)=log(n)</code> otherwise,</li>
@@ -448,6 +460,18 @@
 <b>Returns:</b> <code>*this</code>.<br>
 </blockquote>
 
+<h4><a name="iterators">Iterators</a></h4>
+
+<code>iterator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator_to(const value_type&amp; x);</br>
+const_iterator iterator_to(const value_type&amp; x)const;</code>
+
+<blockquote>
+<b>Requires:</b> <code>x</code> is a reference to an element of the container.</br>
+<b>Returns:</b> An iterator to <code>x</code>.<br>
+<b>Complexity:</b> Constant.<br>
+<b>Exception safety:</b> <code>nothrow</code>.<br>
+</blockquote>
+
 <h4><a name="modifiers">Modifiers</a></h4>
 
 <code>std::pair&lt;iterator,bool> insert(const value_type&amp; x);</code>
@@ -602,37 +626,77 @@
 the element pointed to by <code>position</code> is erased.
 </blockquote>
 
-<a name="modify_key">
-<code>template&lt;typename Modifier> bool modify_key(iterator position,Modifier mod);</code></a>
+<code>template&lt;typename Modifier,typename Rollback><br>
+bool modify(iterator position,Modifier mod,Rollback back);</code>
 
 <blockquote>
-<b>Requires:</b> <code>key_from_value</code> is a read/write
-Key Extractor
-from <code>value_type</code>. <code>Modifier</code> is a model of
+<b>Requires:</b> <code>Modifier</code> and <code>Rollback</code> are models of
 <a href="http://www.sgi.com/tech/stl/UnaryFunction.html">
 <code>Unary Function</code></a> accepting arguments of type
-<code>key_type&amp;</code>. <code>position</code> is a valid dereferenceable
-iterator of the index.</br>
-<b>Effects:</b> Calls <code>mod(k)</code> where <code>k</code> is the key
-obtained by the internal <code>KeyFromValue</code> object of the index from
-the element pointed to by <code>position</code>, and rearranges
-<code>*position</code> into all the indices of the <code>multi_index_container</code>.
-Rearrangement is successful if
+<code>value_type&amp;</code>. <code>position</code> is a valid dereferenceable
+iterator of the index. The sequence of operations <code>mod(e)</code>,
+<code>back(e)</code>, where <code>e</code> is the element
+pointed to by <code>position</code>, restores all keys of the element
+to their original state.</br>
+<b>Effects:</b> Calls <code>mod(e)</code> where <code>e</code> is the element
+pointed to by <code>position</code> and tries to rearrange <code>*position</code> into
+all the indices of the <code>multi_index_container</code>. Rearrangement is successful if
 <ul>
   <li>the index is non-unique OR no other element exists
     with equivalent key,</li>
   <li>AND rearrangement is allowed by all other indices of the
     <code>multi_index_container</code>.</li>
 </ul>
-If the rearrangement fails, the element is erased.<br>
-<b>Postconditions:</b>Validity of <code>position</code> is preserved if
-the operation succeeds.<br>
+If the rearrangement fails, <code>back(e)</code> is invoked and the
+element is kept at its original position in all indices.<br>
+<b>Postconditions:</b> Validity of <code>position</code> is preserved except if
+the element is erased under the conditions described below.<br>
 <b>Returns:</b> <code>true</code> if the operation succeeded, <code>false</code>
 otherwise.<br>
 <b>Complexity:</b> <code>O(M(n))</code>.<br>
-<b>Exception safety:</b> Basic. If an exception is thrown by some
-user-provided operation (except possibly <code>mod</code>), then
-the element pointed to by <code>position</code> is erased.
+<b>Exception safety:</b> Strong, except if <code>back</code> throws an
+exception, in which case the modified element is erased. If <code>back</code>
+throws inside the handling code executing after some other user-provided
+operation has thrown, it is the exception generated by <code>back</code> that
+is rethrown.
+</blockquote>
+
+<a name="modify_key">
+<code>template&lt;typename Modifier> bool modify_key(iterator position,Modifier mod);</code></a>
+
+<blockquote>
+<b>Requires:</b> <code>key_from_value</code> is a read/write
+Key Extractor
+from <code>value_type</code>. <code>Modifier</code> is a model of
+<a href="http://www.sgi.com/tech/stl/UnaryFunction.html">
+<code>Unary Function</code></a> accepting arguments of type
+<code>key_type&amp;</code>. <code>position</code> is a valid dereferenceable
+iterator of the index.</br>
+<b>Effects:</b> Equivalent to <code>modify(position,mod')</code>,
+with <code>mod'</code> defined in such a way that
+<code>mod'(x)</code> is the same as <code>mod(key(x))</code>, where
+<code>key</code> is the internal <code>KeyFromValue</code> object of the index.
+</blockquote>
+
+<code>template&lt;typename Modifier,typename Rollback><br>
+bool modify_key(iterator position,Modifier mod,Rollback back);</code>
+
+<blockquote>
+<b>Requires:</b> <code>key_from_value</code> is a read/write
+Key Extractor
+from <code>value_type</code>. <code>Modifier</code> and <code>Rollback</code>
+are models of <a href="http://www.sgi.com/tech/stl/UnaryFunction.html">
+<code>Unary Function</code></a> accepting arguments of type
+<code>key_type&amp;</code>. <code>position</code> is a valid dereferenceable
+iterator of the index.
+The sequence of operations <code>mod(k)</code>,
+<code>back(k)</code>, where <code>k</code> is the key of the element
+pointed to by <code>position</code>, restores k to its original state.</br>
+<b>Effects:</b> Equivalent to <code>modify(position,mod',back')</code>,
+with <code>mod'</code> and <code>back</code> defined in such a way that
+<code>mod'(x)</code> is the same as <code>mod(key(x))</code> and
+<code>back'(x)</code> is the same as <code>back(key(x))</code>, where
+<code>key</code> is the internal <code>KeyFromValue</code> object of the index.
 </blockquote>
 
 <h4><a name="observers">Observers</a></h4>
@@ -954,9 +1018,9 @@
 
 <br>
 
-<p>Revised March 31st 2006</p>
+<p>Revised July 2nd 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/reference/rnd_indices.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/reference/rnd_indices.html (original)
+++ branches/bcbboost/libs/multi_index/doc/reference/rnd_indices.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -41,6 +41,7 @@
           <li>Complexity signature</li>
           <li>Instantiation types</li>
           <li>Constructors, copy and assignment</li>
+ <li>Iterators</li>
           <li>Capacity operations</li>
           <li>Modifiers</li>
           <li>List operations</li>
@@ -238,6 +239,13 @@
   <span class=identifier>const_reverse_iterator</span> <span class=identifier>rbegin</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
   <span class=identifier>reverse_iterator</span> <span class=identifier>rend</span><span class=special>();</span>
   <span class=identifier>const_reverse_iterator</span> <span class=identifier>rend</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_iterator</span> <span class=identifier>cbegin</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_iterator</span> <span class=identifier>cend</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_reverse_iterator</span> <span class=identifier>crbegin</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_reverse_iterator</span> <span class=identifier>crend</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+
+ <span class=identifier>iterator</span> <span class=identifier>iterator_to</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
+ <span class=identifier>const_iterator</span> <span class=identifier>iterator_to</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
 
   <span class=comment>// capacity:</span>
 
@@ -273,6 +281,8 @@
 
   <span class=keyword>bool</span> <span class=identifier>replace</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
   <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>&gt;</span> <span class=keyword>bool</span> <span class=identifier>modify</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>);</span>
+ <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Rollback</span><span class=special>&gt;</span>
+ <span class=keyword>bool</span> <span class=identifier>modify</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>,</span><span class=identifier>Rollback</span> <span class=identifier>back</span><span class=special>);</span>
 
   <span class=keyword>void</span> <span class=identifier>swap</span><span class=special>(</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
 
@@ -396,7 +406,7 @@
 
 <p>
 (<code>shl</code> and <code>rel</code> stand for <i>shift left</i> and
-<i>relocate</i>, respetively.)
+<i>relocate</i>, respectively.)
 </p>
 
 <h4><a name="instantiation_types">Instantiation types</a></h4>
@@ -462,6 +472,18 @@
 </pre></blockquote>
 </blockquote>
 
+<h4><a name="iterators">Iterators</a></h4>
+
+<code>iterator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator_to(const value_type&amp; x);</br>
+const_iterator iterator_to(const value_type&amp; x)const;</code>
+
+<blockquote>
+<b>Requires:</b> <code>x</code> is a reference to an element of the container.</br>
+<b>Returns:</b> An iterator to <code>x</code>.<br>
+<b>Complexity:</b> Constant.<br>
+<b>Exception safety:</b> <code>nothrow</code>.<br>
+</blockquote>
+
 <h4><a name="capacity">Capacity operations</a></h4>
 
 <a name="capacity_memfun"><code>size_type capacity()const;</code></a>
@@ -634,8 +656,8 @@
 <b>Effects:</b> Calls <code>mod(e)</code> where <code>e</code> is the element
 pointed to by <code>position</code> and rearranges <code>*position</code> into
 all the indices of the <code>multi_index_container</code>. Rearrangement on
-rancom access indices does not change the position of the element with respect
-to the index; rearrangement on other indices may or might not suceed. If the
+random access indices does not change the position of the element with respect
+to the index; rearrangement on other indices may or might not succeed. If the
 rearrangement fails, the element is erased.<br>
 <b>Postconditions:</b> Validity of <code>position</code> is preserved if the
 operation succeeds.<br>
@@ -647,6 +669,37 @@
 the element pointed to by <code>position</code> is erased.
 </blockquote>
 
+<code>template&lt;typename Modifier,typename Rollback><br>
+bool modify(iterator position,Modifier mod,Rollback back);</code>
+
+<blockquote>
+<b>Requires:</b> <code>Modifier</code> and <code>Rollback</code> are models of
+<a href="http://www.sgi.com/tech/stl/UnaryFunction.html">
+<code>Unary Function</code></a> accepting arguments of type
+<code>value_type&amp;</code>. <code>position</code> is a valid dereferenceable
+iterator of the index. The sequence of operations <code>mod(e)</code>,
+<code>back(e)</code>, where <code>e</code> is the element
+pointed to by <code>position</code>, restores all keys of the element
+to their original state.</br>
+<b>Effects:</b> Calls <code>mod(e)</code> where <code>e</code> is the element
+pointed to by <code>position</code> and tries to rearrange <code>*position</code> into
+all the indices of the <code>multi_index_container</code>. Rearrangement on
+random access indices does not change the position of the element with respect
+to the index; rearrangement on other indices may or might not succeed. If the
+rearrangement fails, <code>back(e)</code> is invoked and the
+element is kept at its original position in all indices.<br>
+<b>Postconditions:</b> Validity of <code>position</code> is preserved except if
+the element is erased under the conditions described below.<br>
+<b>Returns:</b> <code>true</code> if the operation succeeded, <code>false</code>
+otherwise.<br>
+<b>Complexity:</b> <code>O(M(n))</code>.<br>
+<b>Exception safety:</b> Strong, except if <code>back</code> throws an
+exception, in which case the modified element is erased. If <code>back</code>
+throws inside the handling code executing after some other user-provided
+operation has thrown, it is the exception generated by <code>back</code> that
+is rethrown.
+</blockquote>
+
 <h4><a name="list_operations">List operations</a></h4>
 
 <p>
@@ -946,9 +999,9 @@
 
 <br>
 
-<p>Revised February 6th 2006</p>
+<p>Revised July 2nd 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/reference/seq_indices.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/reference/seq_indices.html (original)
+++ branches/bcbboost/libs/multi_index/doc/reference/seq_indices.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -41,6 +41,7 @@
           <li>Complexity signature</li>
           <li>Instantiation types</li>
           <li>Constructors, copy and assignment</li>
+ <li>Iterators</li>
           <li>Capacity operations</li>
           <li>Modifiers</li>
           <li>List operations</li>
@@ -229,6 +230,13 @@
   <span class=identifier>const_reverse_iterator</span> <span class=identifier>rbegin</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
   <span class=identifier>reverse_iterator</span> <span class=identifier>rend</span><span class=special>();</span>
   <span class=identifier>const_reverse_iterator</span> <span class=identifier>rend</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_iterator</span> <span class=identifier>cbegin</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_iterator</span> <span class=identifier>cend</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_reverse_iterator</span> <span class=identifier>crbegin</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=identifier>const_reverse_iterator</span> <span class=identifier>crend</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+
+ <span class=identifier>iterator</span> <span class=identifier>iterator_to</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
+ <span class=identifier>const_iterator</span> <span class=identifier>iterator_to</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
 
   <span class=comment>// capacity:</span>
 
@@ -260,6 +268,8 @@
 
   <span class=keyword>bool</span> <span class=identifier>replace</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
   <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>&gt;</span> <span class=keyword>bool</span> <span class=identifier>modify</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>);</span>
+ <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Rollback</span><span class=special>&gt;</span>
+ <span class=keyword>bool</span> <span class=identifier>modify</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>,</span><span class=identifier>Rollback</span> <span class=identifier>back</span><span class=special>);</span>
 
   <span class=keyword>void</span> <span class=identifier>swap</span><span class=special>(</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
 
@@ -436,6 +446,18 @@
 </pre></blockquote>
 </blockquote>
 
+<h4><a name="iterators">Iterators</a></h4>
+
+<code>iterator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator_to(const value_type&amp; x);</br>
+const_iterator iterator_to(const value_type&amp; x)const;</code>
+
+<blockquote>
+<b>Requires:</b> <code>x</code> is a reference to an element of the container.</br>
+<b>Returns:</b> An iterator to <code>x</code>.<br>
+<b>Complexity:</b> Constant.<br>
+<b>Exception safety:</b> <code>nothrow</code>.<br>
+</blockquote>
+
 <h4><a name="capacity">Capacity operations</a></h4>
 
 <code>void resize(size_type n,const value_type&amp; x=value_type());</code>
@@ -587,7 +609,7 @@
 pointed to by <code>position</code> and rearranges <code>*position</code> into
 all the indices of the <code>multi_index_container</code>. Rearrangement on sequenced
 indices does not change the position of the element with respect to the index;
-rearrangement on other indices may or might not suceed. If the rearrangement
+rearrangement on other indices may or might not succeed. If the rearrangement
 fails, the element is erased.<br>
 <b>Postconditions:</b> Validity of <code>position</code> is preserved if the
 operation succeeds.<br>
@@ -599,6 +621,37 @@
 the element pointed to by <code>position</code> is erased.
 </blockquote>
 
+<code>template&lt;typename Modifier,typename Rollback><br>
+bool modify(iterator position,Modifier mod,Rollback back);</code>
+
+<blockquote>
+<b>Requires:</b> <code>Modifier</code> and <code>Rollback</code> are models of
+<a href="http://www.sgi.com/tech/stl/UnaryFunction.html">
+<code>Unary Function</code></a> accepting arguments of type
+<code>value_type&amp;</code>. <code>position</code> is a valid dereferenceable
+iterator of the index. The sequence of operations <code>mod(e)</code>,
+<code>back(e)</code>, where <code>e</code> is the element
+pointed to by <code>position</code>, restores all keys of the element
+to their original state.</br>
+<b>Effects:</b> Calls <code>mod(e)</code> where <code>e</code> is the element
+pointed to by <code>position</code> and tries to rearrange <code>*position</code> into
+all the indices of the <code>multi_index_container</code>. Rearrangement on sequenced
+indices does not change the position of the element with respect to the index;
+rearrangement on other indices may or might not succeed. If the rearrangement
+fails, <code>back(e)</code> is invoked and the
+element is kept at its original position in all indices.<br>
+<b>Postconditions:</b> Validity of <code>position</code> is preserved except if
+the element is erased under the conditions described below.<br>
+<b>Returns:</b> <code>true</code> if the operation succeeded, <code>false</code>
+otherwise.<br>
+<b>Complexity:</b> <code>O(M(n))</code>.<br>
+<b>Exception safety:</b> Strong, except if <code>back</code> throws an
+exception, in which case the modified element is erased. If <code>back</code>
+throws inside the handling code executing after some other user-provided
+operation has thrown, it is the exception generated by <code>back</code> that
+is rethrown.
+</blockquote>
+
 <h4><a name="list_operations">List operations</a></h4>
 
 <p>
@@ -901,9 +954,9 @@
 
 <br>
 
-<p>Revised February 6th 2006</p>
+<p>Revised July 2nd 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/release_notes.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/release_notes.html (original)
+++ branches/bcbboost/libs/multi_index/doc/release_notes.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -31,11 +31,76 @@
 <h2>Contents</h2>
 
 <ul>
+ <li>Boost 1.35 release</li>
   <li>Boost 1.34 release</li>
   <li>Boost 1.33.1 release</li>
   <li>Boost 1.33 release</li>
 </ul>
 
+<h2><a name="boost_1_35">Boost 1.35 release</a></h2>
+
+<p>
+<ul>
+ <li>New global_fun
+ predefined key extractor.
+ </li>
+ <li>Added iterator_to
+ facility.
+ </li>
+ <li>Included <a href="tutorial/creation.html#special_allocator">support for
+ non-standard allocators</a> such as those of
+ Boost.Interprocess, which makes
+ <code>multi_index_container</code>s placeable in shared memory.
+ </li>
+ <li>New versions of <code>modify</code> and <code>modify_key</code> with
+ rollback, as described in the
+ tutorial.
+ </li>
+ <li>Indices provide the new <code>cbegin</code>, <code>cend</code> and,
+ when applicable, <code>crbegin</code> and <code>crend</code>
+ member functions, in accordance with the latest drafts of the next
+ revision of the C++ standard.
+ </li>
+ <li>Hinted insertion in ordered indices fully conforms to the resolutions of
+ C++ Standard Library
+ <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#233">Defect
+ Report 233</a>. The new requirement that the point of insertion
+ be always as close as possible to the hint induces a different behavior than
+ exhibited in former releases of Boost.MultiIndex, which can potentially cause
+ backwards compatibility problems; in any case, the likelihood of these
+ compatibility issues arising in a real scenario is very low.
+ </li>
+ <li>Sequenced and random access indices now follow the requirements of the
+ C++ standard for sequence containers with respect to the operations
+ <code>assign(f,l)</code> and <code>insert(p,f,l)</code> (23.1.1/9): if
+ <code>f</code> and <code>l</code> are of the same integral type, the
+ iterator-based overloads of these member functions are avoided:
+<blockquote><pre>
+<span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span>
+ <span class=keyword>int</span><span class=special>,</span><span class=identifier>indexed_by</span><span class=special>&lt;</span><span class=identifier>sequenced</span><span class=special>&lt;&gt;</span> <span class=special>&gt;</span>
+<span class=special>&gt;</span> <span class=identifier>sequenced_container</span><span class=special>;</span>
+
+<span class=identifier>std</span><span class=special>::</span><span class=identifier>list</span><span class=special>&lt;</span><span class=keyword>int</span><span class=special>&gt;</span> <span class=identifier>l</span><span class=special>(...);</span>
+<span class=identifier>sequenced_container</span> <span class=identifier>c</span><span class=special>;</span>
+
+<span class=comment>// iterator-based overload of assign</span>
+<span class=identifier>c</span><span class=special>.</span><span class=identifier>assign</span><span class=special>(</span><span class=identifier>l</span><span class=special>.</span><span class=identifier>begin</span><span class=special>(),</span><span class=identifier>l</span><span class=special>.</span><span class=identifier>end</span><span class=special>());</span>
+
+<span class=comment>// The following is equivalent to
+// c.assign(
+// static_cast&lt;sequenced_container::size_type&gt;(10),100);
+// that is, &quot;10&quot; and &quot;100&quot; are not taken to be iterators as
+// in the previous expression.</span>
+<span class=identifier>c</span><span class=special>.</span><span class=identifier>assign</span><span class=special>(</span><span class=number>10</span><span class=special>,</span><span class=number>100</span><span class=special>);</span>
+</pre></blockquote>
+ </li>
+ <li>The performance of ordered indices <code>range</code> and
+ <code>equal_range</code> has been improved.
+ </li>
+ <li>Maintenance fixes.</li>
+</ul>
+</p>
+
 <h2><a name="boost_1_34">Boost 1.34 release</a></h2>
 
 <p>
@@ -140,9 +205,9 @@
 
 <br>
 
-<p>Revised February 6th 2006</p>
+<p>Revised October 11th 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/tests.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/tests.html (original)
+++ branches/bcbboost/libs/multi_index/doc/tests.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -116,7 +116,8 @@
 </tr>
 <tr class="odd_tr">
   <td>test_serialization1.cpp<br>
- test_serialization2.cpp</td>
+ test_serialization2.cpp<br>
+ test_serialization3.cpp</td>
   <td>Serialization support.</td>
 </tr>
 <tr>
@@ -149,9 +150,9 @@
 <br>
 
 
-<p>Revised March 2nd 2006</p>
+<p>Revised July 11th 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/tutorial/basics.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/tutorial/basics.html (original)
+++ branches/bcbboost/libs/multi_index/doc/tutorial/basics.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -956,15 +956,69 @@
 leaves no trace of the previous value of the element. Integrity constraints
 thus lead to the following policy: when a collision happens in the
 process of calling <code>modify</code>, the element is erased and the method returns
-<code>false</code>. This difference in behavior between <code>replace</code> and
-<code>modify</code> has to be considered by the programmer on a case-by-case basis.
+<code>false</code>. There is a further version of <code>modify</code> which
+accepts a <i>rollback</i> functor to undo the changes in case of collision:
 </p>
 
+<blockquote><pre>
+<span class=keyword>struct</span> <span class=identifier>change_id</span>
+<span class=special>{</span>
+ <span class=identifier>change_id</span><span class=special>(</span><span class=keyword>int</span> <span class=identifier>new_id</span><span class=special>):</span><span class=identifier>new_id</span><span class=special>(</span><span class=identifier>new_id</span><span class=special>){}</span>
+
+ <span class=keyword>void</span> <span class=keyword>operator</span><span class=special>()(</span><span class=identifier>employee</span><span class=special>&amp;</span> <span class=identifier>e</span><span class=special>)</span>
+ <span class=special>{</span>
+ <span class=identifier>e</span><span class=special>.</span><span class=identifier>id</span><span class=special>=</span><span class=identifier>new_id</span><span class=special>;</span>
+ <span class=special>}</span>
+
+<span class=keyword>private</span><span class=special>:</span>
+ <span class=keyword>int</span> <span class=identifier>new_id</span><span class=special>;</span>
+<span class=special>};</span>
+<span class=special>...</span>
+<span class=identifier>employee_set</span><span class=special>::</span><span class=identifier>iterator</span> <span class=identifier>it</span><span class=special>=...</span>
+
+<span class=keyword>int</span> <span class=identifier>old_id</span><span class=special>=</span><span class=identifier>it</span><span class=special>-&gt;</span><span class=identifier>id</span><span class=special>;</span> <span class=comment>// keep the original id
+
+// try to modify the id, restore it in case of collisions</span>
+<span class=identifier>es</span><span class=special>.</span><span class=identifier>modify</span><span class=special>(</span><span class=identifier>it</span><span class=special>,</span><span class=identifier>change_id</span><span class=special>(</span><span class=number>321</span><span class=special>),</span><span class=identifier>change_id</span><span class=special>(</span><span class=identifier>old_id</span><span class=special>));</span>
+</pre></blockquote>
+
+<p>In the example, <code>change_id(old_id)</code> is invoked to restore the original
+conditions when the modification results in collisions with some other element.
+The differences in behavior between <code>replace</code>, <code>modify</code> and
+<code>modify</code> with rollback have to be considered by the programmer on a
+case-by-case basis to determine the best updating mechanism.
+</p>
+
+<p align="center">
+<table cellspacing="0">
+ <caption><b>Behavior of the different updating mechanisms.</b></caption>
+<tr>
+ <th align="center">updating function</th>
+ <th>If there is a collision...</th>
+</tr>
+<tr>
+ <td align="center"><code>replace(it,x)</code></td>
+ <td>replacement does not take place.</td>
+</tr>
+<tr class="odd_tr">
+ <td align="center"><code>modify(it,mod)</code></td>
+ <td>the element is erased.</td>
+</tr>
+<tr>
+ <td align="center"><code>modify(it,mod,back)</code></td>
+ <td><code>back</code> is used to restore the original conditions.
+ (If <code>back</code> throws, the element is erased.)
+ </td>
+</tr>
+</table>
+</p>
+
+
 <p>
-A key-based version of <code>modify</code>, named
-modify_key, is
-provided as well. In this case, the modifying functor is passed a reference to
-the <code>key_value</code> part of the element instead of the whole object.
+Key-based versions of <code>modify</code>, named
+modify_key, are
+provided as well. In this case, the modifying functors are passed a reference to
+the <code>key_type</code> part of the element instead of the whole object.
 </p>
 
 <blockquote><pre>
@@ -990,8 +1044,8 @@
 </pre></blockquote>
 
 <p>
-Just as <code>modify</code> does, <code>modify_key</code> erases the element if
-the modification results in collisions in some index. <code>modify</code> and
+Like <code>modify</code>, there are versions of <code>modify_key</code> with and
+without rollback. <code>modify</code> and
 <code>modify_key</code> are particularly well suited to use in conjunction to
 <a href="../../../../libs/lambda/index.html">Boost.Lambda</a>
 for defining the modifying functors:
@@ -1205,9 +1259,9 @@
 
 <br>
 
-<p>Revised July 13th 2006</p>
+<p>Revised July 17th 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/tutorial/creation.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/tutorial/creation.html (original)
+++ branches/bcbboost/libs/multi_index/doc/tutorial/creation.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -32,6 +32,7 @@
 <ul>
   <li>Value semantics</li>
   <li>Use of ctor_args_list</li>
+ <li>Special allocator support</li>
   <li>Serialization</li>
 </ul>
 
@@ -191,6 +192,60 @@
 puts in practise these concepts.
 </p>
 
+<h2><a name="special_allocator">Special allocator support</a></h2>
+
+<p>
+Boost.MultiIndex allows for a slightly more general class of allocators
+than strictly required by the C++ standard, as explained in detail in the
+reference.
+An important type of non-standard allocators supported are those provided by the
+Boost Interprocess Library;
+this opens up the possibility of placing <code>multi_index_container</code>s
+in shared memory.
+</p>
+
+<blockquote><pre>
+<span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>boost</span><span class=special>/</span><span class=identifier>interprocess</span><span class=special>/</span><span class=identifier>allocators</span><span class=special>/</span><span class=identifier>allocator</span><span class=special>.</span><span class=identifier>hpp</span><span class=special>&gt;</span>
+<span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>boost</span><span class=special>/</span><span class=identifier>interprocess</span><span class=special>/</span><span class=identifier>managed_shared_memory</span><span class=special>.</span><span class=identifier>hpp</span><span class=special>&gt;</span>
+
+<span class=keyword>namespace</span> <span class=identifier>bip</span><span class=special>=</span><span class=identifier>boost</span><span class=special>::</span><span class=identifier>interprocess</span><span class=special>;</span>
+
+<span class=comment>// a shared memory compatible allocator of ints</span>
+<span class=keyword>typedef</span> <span class=identifier>bip</span><span class=special>::</span><span class=identifier>allocator</span><span class=special>&lt;</span>
+ <span class=keyword>int</span><span class=special>,</span><span class=identifier>bip</span><span class=special>::</span><span class=identifier>managed_shared_memory</span><span class=special>::</span><span class=identifier>segment_manager</span>
+<span class=special>&gt;</span> <span class=identifier>shared_int_allocator</span><span class=special>;</span>
+
+<span class=comment>// define a shared memory compatible multi_index_container
+// using shared_int_allocator</span>
+<span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span>
+ <span class=keyword>int</span><span class=special>,</span>
+ <span class=identifier>indexed_by</span><span class=special>&lt;</span>
+ <span class=identifier>sequenced</span><span class=special>&lt;&gt;,</span>
+ <span class=identifier>ordered_unique</span><span class=special>&lt;</span><span class=identifier>identity</span><span class=special>&lt;</span><span class=keyword>int</span><span class=special>&gt;</span> <span class=special>&gt;</span>
+ <span class=special>&gt;,</span>
+ <span class=identifier>shared_int_allocator</span>
+<span class=special>&gt;</span> <span class=identifier>unique_int_list</span><span class=special>;</span>
+
+<span class=special>...</span>
+
+<span class=comment>// create a managed memory segment</span>
+<span class=identifier>bip</span><span class=special>::</span><span class=identifier>managed_shared_memory</span> <span class=identifier>seg</span><span class=special>(</span>
+ <span class=identifier>bip</span><span class=special>::</span><span class=identifier>create_only</span><span class=special>,</span><span class=string>&quot;SharedMemoryID&quot;</span><span class=special>,</span><span class=number>65536</span><span class=special>);</span>
+
+<span class=comment>// construct a unique_int_list into the segment</span>
+<span class=identifier>unique_int_list</span><span class=special>*</span> <span class=identifier>puil</span><span class=special>=</span><span class=identifier>seg</span><span class=special>.</span><span class=identifier>construct</span><span class=special>&lt;</span><span class=identifier>unique_int_list</span><span class=special>&gt;</span>
+ <span class=special>(</span><span class=string>&quot;UniqueIntListID&quot;</span><span class=special>)</span> <span class=comment>// object identifier within the segment
+ // Construction args: first a ctor arg list, then a
+ // shared memory allocator obtained from the segment object.</span>
+ <span class=special>(</span><span class=identifier>unique_int_list</span><span class=special>::</span><span class=identifier>ctor_args_list</span><span class=special>(),</span>
+ <span class=identifier>unique_int_list</span><span class=special>::</span><span class=identifier>allocator_type</span><span class=special>(</span><span class=identifier>seg</span><span class=special>.</span><span class=identifier>get_segment_manager</span><span class=special>()));</span>
+ </pre></blockquote>
+
+<p>
+The examples section includes a program
+that further explores this capability.
+</p>
+
 <h2><a name="serialization">Serialization</a></h2>
 
 <p>
@@ -285,7 +340,7 @@
 
 <br>
 
-<p>Revised February 27th 2007</p>
+<p>Revised July 17th 2007</p>
 
 <p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software

Modified: branches/bcbboost/libs/multi_index/doc/tutorial/indices.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/tutorial/indices.html (original)
+++ branches/bcbboost/libs/multi_index/doc/tutorial/indices.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -48,6 +48,7 @@
         </ul>
   </li>
   <li>Index rearranging</li>
+ <li>iterator_to</li>
   <li>Ordered indices node compression</li>
 </ul>
 
@@ -90,6 +91,7 @@
 </tr>
 <tr class="odd_tr">
   <td align="center"><code>&nbsp;&nbsp;random_access&nbsp;&nbsp;</code></td>
+</tr>
 </table>
 </p>
 
@@ -608,7 +610,8 @@
 <blockquote><pre>
 <span class=comment>// undefined behavior: [rbegin(),rend()) is not free with respect
 // to the base index</span>
-<span class=identifier>c</span><span class=special>.</span><span class=identifier>rearrange</span><span class=special>(</span><span class=identifier>c</span><span class=special>.</span><span class=identifier>rbegin</span><span class=special>());</span></pre></blockquote>
+<span class=identifier>c</span><span class=special>.</span><span class=identifier>rearrange</span><span class=special>(</span><span class=identifier>c</span><span class=special>.</span><span class=identifier>rbegin</span><span class=special>());</span>
+</pre></blockquote>
 
 <p>
 The view concept is defined in detail in the
@@ -617,6 +620,57 @@
 for a demonstration of use of <code>rearrange</code>.
 </p>
 
+<h2><a name="iterator_to"><code>iterator_to</code></a></h2>
+
+<p>
+All indices of Boost.MultiIndex provide a member function called <code>iterator_to</code>
+which returns an iterator to a given element of the container:
+</p>
+
+<blockquote><pre>
+<span class=identifier>multi_index_container</span><span class=special>&lt;</span>
+ <span class=keyword>int</span><span class=special>,</span>
+ <span class=identifier>indexed_by</span><span class=special>&lt;</span><span class=identifier>sequenced</span><span class=special>&lt;&gt;</span> <span class=special>&gt;</span>
+<span class=special>&gt;</span> <span class=identifier>c</span><span class=special>;</span>
+<span class=special>...</span>
+<span class=comment>// convoluted way to do to c.pop_back()</span>
+<span class=identifier>c</span><span class=special>.</span><span class=identifier>erase</span><span class=special>(</span><span class=identifier>c</span><span class=special>.</span><span class=identifier>iterator_to</span><span class=special>(</span><span class=identifier>c</span><span class=special>.</span><span class=identifier>back</span><span class=special>()));</span>
+
+<span class=comment>// The following, though similar to the previous code,
+// does not work: iterator_to accepts a reference to
+// the element in the container, not a copy.</span>
+<span class=keyword>int</span> <span class=identifier>x</span><span class=special>=</span><span class=identifier>c</span><span class=special>.</span><span class=identifier>back</span><span class=special>();</span>
+<span class=identifier>c</span><span class=special>.</span><span class=identifier>erase</span><span class=special>(</span><span class=identifier>c</span><span class=special>.</span><span class=identifier>iterator_to</span><span class=special>(</span><span class=identifier>x</span><span class=special>));</span> <span class=comment>// run-time failure ensues</span>
+</pre></blockquote>
+
+<p>
+<code>iterator_to</code> provides a way to retrieve an iterator to an element
+from a pointer to the element, thus making iterators and pointers interchangeable
+for the purposes of element pointing (not so for traversal) in many situations.
+This notwithstanding, it is not the aim of <code>iterator_to</code> to
+promote the usage of pointers as substitutes for real iterators: the latter are
+specifically designed for handling the elements of a container,
+and not only benefit from the iterator orientation of container interfaces,
+but are also capable of exposing many more programming bugs than raw pointers, both
+at compile and run time. <code>iterator_to</code> is thus meant to be used
+in scenarios where access via iterators is not suitable or desireable:
+<ul>
+ <li>Interoperability with preexisting APIs based on pointers or references.</li>
+ <li>Publication of pointer-based interfaces (for instance, when
+ designing a C-compatible library).
+ </li>
+ <li>The exposure of pointers in place of iterators can act as a <i>type
+ erasure</i> barrier effectively decoupling the user of the code
+ from the implementation detail of which particular container is being
+ used. Similar techniques, like the famous Pimpl idiom, are used
+ in large projects to reduce dependencies and build times.
+ </li>
+ <li>Self-referencing contexts where an element acts upon its owner
+ container and no iterator to itself is available.
+ </li>
+</ul>
+</p>
+
 <h2><a name="ordered_node_compression">Ordered indices node compression</a></h2>
 
 <p>
@@ -664,9 +718,9 @@
 
 <br>
 
-<p>Revised February 6th 2006</p>
+<p>Revised July 17th 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/doc/tutorial/key_extraction.html
==============================================================================
--- branches/bcbboost/libs/multi_index/doc/tutorial/key_extraction.html (original)
+++ branches/bcbboost/libs/multi_index/doc/tutorial/key_extraction.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -41,6 +41,7 @@
       <li>member</li>
       <li><a href="#const_mem_fun"><code>const_mem_fun</code>
         and <code>mem_fun</code></a></li>
+ <li>global_fun</li>
     </ul>
   </li>
   <li>User-defined key extractors</li>
@@ -244,6 +245,68 @@
 provides a complete program showing how to use <code>const_mem_fun</code>.
 <p>
 
+<h3><a name="global_fun"><code>global_fun</code></a></h3>
+
+<p>
+Whereas <code>const_mem_fun</code> and <code>mem_fun</code> are based on a
+given member function of the base type from where the key is extracted,
+global_fun
+takes a global function (or static member function) accepting the base
+type as its parameter and returning the key:
+</p>
+
+<blockquote><pre>
+<span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>boost</span><span class=special>/</span><span class=identifier>multi_index_container</span><span class=special>.</span><span class=identifier>hpp</span><span class=special>&gt;</span>
+<span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>boost</span><span class=special>/</span><span class=identifier>multi_index</span><span class=special>/</span><span class=identifier>ordered_index</span><span class=special>.</span><span class=identifier>hpp</span><span class=special>&gt;</span>
+<span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>boost</span><span class=special>/</span><span class=identifier>multi_index</span><span class=special>/</span><span class=identifier>global_fun</span><span class=special>.</span><span class=identifier>hpp</span><span class=special>&gt;</span>
+
+<span class=keyword>struct</span> <span class=identifier>rectangle</span>
+<span class=special>{</span>
+ <span class=keyword>int</span> <span class=identifier>x0</span><span class=special>,</span><span class=identifier>y0</span><span class=special>;</span>
+ <span class=keyword>int</span> <span class=identifier>x1</span><span class=special>,</span><span class=identifier>y1</span><span class=special>;</span>
+<span class=special>};</span>
+
+<span class=keyword>unsigned</span> <span class=keyword>long</span> <span class=identifier>area</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>rectangle</span><span class=special>&amp;</span> <span class=identifier>r</span><span class=special>)</span>
+<span class=special>{</span>
+ <span class=keyword>return</span> <span class=special>(</span><span class=keyword>unsigned</span> <span class=keyword>long</span><span class=special>)(</span><span class=identifier>r</span><span class=special>.</span><span class=identifier>x1</span><span class=special>-</span><span class=identifier>r</span><span class=special>.</span><span class=identifier>x0</span><span class=special>)*(</span><span class=identifier>r</span><span class=special>.</span><span class=identifier>x1</span><span class=special>-</span><span class=identifier>r</span><span class=special>.</span><span class=identifier>x0</span><span class=special>)+</span>
+ <span class=special>(</span><span class=keyword>unsigned</span> <span class=keyword>long</span><span class=special>)(</span><span class=identifier>r</span><span class=special>.</span><span class=identifier>y1</span><span class=special>-</span><span class=identifier>r</span><span class=special>.</span><span class=identifier>y0</span><span class=special>)*(</span><span class=identifier>r</span><span class=special>.</span><span class=identifier>y1</span><span class=special>-</span><span class=identifier>r</span><span class=special>.</span><span class=identifier>y0</span><span class=special>);</span>
+<span class=special>}</span>
+
+<span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span>
+ <span class=identifier>rectangle</span><span class=special>,</span>
+ <span class=identifier>indexed_by</span><span class=special>&lt;</span>
+ <span class=comment>// sort by increasing area</span>
+ <span class=identifier>ordered_non_unique</span><span class=special>&lt;</span><span class=identifier>global_fun</span><span class=special>&lt;</span><span class=keyword>const</span> <span class=identifier>rectangle</span><span class=special>&amp;,</span><span class=keyword>unsigned</span> <span class=keyword>long</span><span class=special>,&amp;</span><span class=identifier>area</span><span class=special>&gt;</span> <span class=special>&gt;</span>
+ <span class=special>&gt;</span>
+<span class=special>&gt;</span> <span class=identifier>rectangle_container</span><span class=special>;</span>
+</pre></blockquote>
+
+<p>
+The specification of <code>global_fun</code> obeys the following syntax:
+</p>
+
+<blockquote><pre>
+<span class=identifier>global_fun</span><span class=special>&lt;</span><span class=identifier><i>(argument type)</i></span><span class=special>,</span><span class=identifier><i>(key type)</i></span><span class=special>,</span><span class=identifier><i>(pointer to function)</i></span><span class=special>&gt;</span>
+</pre></blockquote>
+
+<p>
+where the argument type and key type must match <i>exactly</i> those in the
+signature of the function used; for instance, in the example above the argument
+type is <code>const rectangle&amp;</code>, without omitting the "<code>const</code>"
+and "<code>&amp;</code>" parts. So, although most of the time the base type will be
+accepted by constant reference, <code>global_fun</code> is also prepared to take
+functions accepting their argument by value or by non-constant reference: this
+latter case cannot generally be used directly in the specification of
+<code>multi_index_container</code>s as their elements are treated as constant,
+but the section on <a href="#advanced_key_extractors">advanced features
+of Boost.MultiIndex key extractors</a> describes valid use cases of
+key extraction based on such functions with a non-constant reference argument.
+</p>
+
+<p>Example 2 in the examples section
+uses <code>gobal_fun</code>.
+<p>
+
 <h2><a name="user_defined_key_extractors">User-defined key extractors</a></h2>
 
 <p>
@@ -632,10 +695,12 @@
 <blockquote><pre>
 <span class=keyword>struct</span> <span class=identifier>T</span>
 <span class=special>{</span>
- <span class=keyword>int</span> <span class=identifier>i</span><span class=special>;</span>
- <span class=keyword>const</span> <span class=keyword>int</span> <span class=identifier>j</span><span class=special>;</span>
- <span class=keyword>int</span> <span class=identifier>f</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
- <span class=keyword>int</span> <span class=identifier>g</span><span class=special>();</span>
+ <span class=keyword>int</span> <span class=identifier>i</span><span class=special>;</span>
+ <span class=keyword>const</span> <span class=keyword>int</span> <span class=identifier>j</span><span class=special>;</span>
+ <span class=keyword>int</span> <span class=identifier>f</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
+ <span class=keyword>int</span> <span class=identifier>g</span><span class=special>();</span>
+ <span class=keyword>static</span> <span class=keyword>int</span> <span class=identifier>gf</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>T</span><span class=special>&amp;);</span>
+ <span class=keyword>static</span> <span class=keyword>int</span> <span class=identifier>gg</span><span class=special>(</span><span class=identifier>T</span><span class=special>&amp;);</span>
 <span class=special>};</span>
 </pre></blockquote>
 
@@ -656,7 +721,7 @@
   <th>read/write?</th>
 </tr>
 <tr>
- <td align="center" rowspan="4"><code>T</code></td>
+ <td align="center" rowspan="6"><code>T</code></td>
   <td><code>i</code></td>
   <td><code>member&lt;T,int,&amp;T::i></code></td>
   <td align="center">yes</td>
@@ -680,9 +745,21 @@
   <td align="center">no</td>
   <td align="center">no</td>
 </tr>
+<tr>
+ <td><code>gf()</code></td>
+ <td><code>global_fun&lt;const T&amp;,int,&amp;T::gf></code></td>
+ <td align="center">yes</td>
+ <td align="center">no</td>
+</tr>
+<tr>
+ <td><code>gg()</code></td>
+ <td><code>global_fun&lt;T&amp;,int,&amp;T::gg></code></td>
+ <td align="center">no</td>
+ <td align="center">no</td>
+</tr>
 
 <tr class="odd_tr">
- <td align="center" rowspan="4"><code>reference_wrapper&lt;T></code></td>
+ <td align="center" rowspan="6"><code>reference_wrapper&lt;T></code></td>
   <td><code>i</code></td>
   <td><code>member&lt;T,int,&amp;T::i></code></td>
   <td align="center">yes</td>
@@ -706,9 +783,21 @@
   <td align="center">yes</td>
   <td align="center">no</td>
 </tr>
+<tr class="odd_tr">
+ <td><code>gf()</code></td>
+ <td><code>global_fun&lt;const T&amp;,int,&amp;T::gf></code></td>
+ <td align="center">yes</td>
+ <td align="center">no</td>
+</tr>
+<tr class="odd_tr">
+ <td><code>gg()</code></td>
+ <td><code>global_fun&lt;T&amp;,int,&amp;T::gg></code></td>
+ <td align="center">yes</td>
+ <td align="center">no</td>
+</tr>
 
 <tr>
- <td align="center" rowspan="4"><code>reference_wrapper&lt;const T></code></td>
+ <td align="center" rowspan="6"><code>reference_wrapper&lt;const T></code></td>
   <td><code>i</code></td>
   <td><code>member&lt;T,const int,&amp;T::i></code></td>
   <td align="center">yes</td>
@@ -730,9 +819,19 @@
   <td><code>g()</code></td>
   <td colspan="3">&nbsp;</td>
 </tr>
+<tr>
+ <td><code>gf()</code></td>
+ <td><code>global_fun&lt;const T&amp;,int,&amp;T::gf></code></td>
+ <td align="center">yes</td>
+ <td align="center">no</td>
+</tr>
+<tr>
+ <td><code>gg()</code></td>
+ <td colspan="3">&nbsp;</td>
+</tr>
 
 <tr class="odd_tr">
- <td align="center" rowspan="4">chained pointer to <code>T</code><br>
+ <td align="center" rowspan="6">chained pointer to <code>T</code><br>
     or to <code>reference_wrapper&lt;T></code></td>
   <td><code>i</code></td>
   <td><code>member&lt;T,int,&amp;T::i></code></td>
@@ -757,9 +856,21 @@
   <td align="center">yes</td>
   <td align="center">no</td>
 </tr>
+<tr class="odd_tr">
+ <td><code>gf()</code></td>
+ <td><code>global_fun&lt;const T&amp;,int,&amp;T::gf></code></td>
+ <td align="center">yes</td>
+ <td align="center">no</td>
+</tr>
+<tr class="odd_tr">
+ <td><code>gg()</code></td>
+ <td><code>global_fun&lt;T&amp;,int,&amp;T::gg></code></td>
+ <td align="center">yes</td>
+ <td align="center">no</td>
+</tr>
 
 <tr>
- <td align="center" rowspan="4">chained pointer to <code>const T</code><br>
+ <td align="center" rowspan="6">chained pointer to <code>const T</code><br>
     or to <code>reference_wrapper&lt;const T></code></td>
   <td><code>i</code></td>
   <td><code>member&lt;T,const int,&amp;T::i></code></td>
@@ -782,6 +893,16 @@
   <td><code>g()</code></td>
   <td colspan="3">&nbsp;</td>
 </tr>
+<tr>
+ <td><code>gf()</code></td>
+ <td><code>global_fun&lt;const T&amp;,int,&amp;T::gf></code></td>
+ <td align="center">yes</td>
+ <td align="center">no</td>
+</tr>
+<tr>
+ <td><code>gg()</code></td>
+ <td colspan="3">&nbsp;</td>
+</tr>
 
 </table>
 </p>
@@ -790,10 +911,12 @@
 The column "applicable to <code>const</code> elements?" states whether the
 corresponding key extractor can be used when passed constant elements (this
 relates to the elements specified in the first column, not the referenced
-<code>T</code> objects). The only negative case is for <code>T::g</code> when
-the elements are raw <code>T</code> objects, which make sense as we are dealing
-with a non-constant member function: this also implies that <code>multi_index_container</code>s
-of elements of <code>T</code> cannot be sorted by <code>T::g</code>, because
+<code>T</code> objects). The only negative cases are for <code>T::g</code> and
+<code>T:gg</code> when the elements are raw <code>T</code> objects, which make sense
+as we are dealing with a non-constant member function (<code>T::g</code>)
+and a function taking <code>T</code> by
+non-constant reference: this also implies that <code>multi_index_container</code>s
+of elements of <code>T</code> cannot be sorted by <code>T::g</code> or <code>T::gg</code>, because
 elements contained within a <code>multi_index_container</code> are treated as constant.
 </p>
 
@@ -804,7 +927,7 @@
 
 <p>
 Some care has to be taken to preserve <code>const</code>-correctness in the
-specification of the key extractors: in some sense, the <code>const</code>
+specification of <code>member</code> key extractors: in some sense, the <code>const</code>
 qualifier is carried along to the member part, even if that particular
 member is not defined as <code>const</code>. For instance, if the elements
 are of type <code>const T *</code>, sorting by <code>T::i</code> is <i>not</i>
@@ -832,9 +955,9 @@
 
 <br>
 
-<p>Revised February 6th 2006</p>
+<p>Revised June 11th 2007</p>
 
-<p>&copy; Copyright 2003-2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
+<p>&copy; Copyright 2003-2007 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
 Distributed under the Boost Software
 License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">

Modified: branches/bcbboost/libs/multi_index/example/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/multi_index/example/Jamfile.v2 (original)
+++ branches/bcbboost/libs/multi_index/example/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 # Boost.MultiIndex examples Jamfile
 #
-# Copyright 2003-2006 Joaquín M López Muñoz.
+# Copyright 2003-2007 Joaquín M López Muñoz.
 # Distributed under 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)
@@ -27,14 +27,19 @@
     : <include>$(BOOST_ROOT)
     ;
 
+exe fun_key
+ : fun_key.cpp
+ : <include>$(BOOST_ROOT)
+ ;
+
 exe hashed
     : hashed.cpp
     : <include>$(BOOST_ROOT)
     ;
 
-exe memfun_key
- : memfun_key.cpp
- : <include>$(BOOST_ROOT)
+exe ip_allocator
+ : ip_allocator.cpp
+ : <include>$(BOOST_ROOT) <threading>multi
     ;
 
 exe non_default_ctor

Modified: branches/bcbboost/libs/multi_index/example/composite_keys.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/example/composite_keys.cpp (original)
+++ branches/bcbboost/libs/multi_index/example/composite_keys.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Boost.MultiIndex example of composite keys.
  *
- * Copyright 2003-2005 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -18,6 +18,7 @@
 #include <boost/multi_index/composite_key.hpp>
 #include <boost/multi_index/member.hpp>
 #include <boost/multi_index/ordered_index.hpp>
+#include <boost/next_prior.hpp>
 #include <boost/tokenizer.hpp>
 #include <functional>
 #include <iostream>
@@ -287,7 +288,7 @@
       continue;
     }
 
- it->second->execute(++tok.begin(),tok.end());
+ it->second->execute(boost::next(tok.begin()),tok.end());
   }
   
   return 0;

Deleted: branches/bcbboost/libs/multi_index/example/memfun_key.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/example/memfun_key.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
+++ (empty file)
@@ -1,79 +0,0 @@
-/* Boost.MultiIndex example of member functions used as key extractors.
- *
- * Copyright 2003-2006 Joaquín M López Muñoz.
- * Distributed under 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)
- *
- * See http://www.boost.org/libs/multi_index for library home page.
- */
-
-#if !defined(NDEBUG)
-#define BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING
-#define BOOST_MULTI_INDEX_ENABLE_SAFE_MODE
-#endif
-
-#include <boost/multi_index_container.hpp>
-#include <boost/multi_index/mem_fun.hpp>
-#include <boost/multi_index/ordered_index.hpp>
-#include <iostream>
-#include <string>
-
-using namespace boost::multi_index;
-
-/* A name record consists of the given name (e.g. "Charlie")
- * and the family name (e.g. "Brown"). The full name, calculated
- * by name_record::name() is laid out in the "phonebook order"
- * family name + given_name.
- */
-
-struct name_record
-{
- name_record(std::string given_name_,std::string family_name_):
- given_name(given_name_),family_name(family_name_)
- {}
-
- std::string name()const
- {
- std::string str=family_name;
- str+=" ";
- str+=given_name;
- return str;
- }
-
-private:
- std::string given_name;
- std::string family_name;
-};
-
-/* multi_index_container with only one index based on name_record::name().
- * See Compiler specifics: Use of const_mem_fun_explicit and
- * mem_fun_explicit for info on BOOST_MULTI_INDEX_CONST_MEM_FUN.
- */
-
-typedef multi_index_container<
- name_record,
- indexed_by<
- ordered_unique<
- BOOST_MULTI_INDEX_CONST_MEM_FUN(name_record,std::string,name)
- >
- >
-> name_record_set;
-
-int main()
-{
- name_record_set ns;
-
- ns.insert(name_record("Joe","Smith"));
- ns.insert(name_record("Robert","Nightingale"));
- ns.insert(name_record("Robert","Brown"));
- ns.insert(name_record("Marc","Tuxedo"));
-
- /* list the names in ns in phonebook order */
-
- for(name_record_set::iterator it=ns.begin();it!=ns.end();++it){
- std::cout<<it->name()<<std::endl;
- }
-
- return 0;
-}

Modified: branches/bcbboost/libs/multi_index/perf/test_perf.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/perf/test_perf.cpp (original)
+++ branches/bcbboost/libs/multi_index/perf/test_perf.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Boost.MultiIndex performance test.
  *
- * Copyright 2003-2006 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -16,6 +16,7 @@
 #include <boost/multi_index/identity.hpp>
 #include <boost/multi_index/ordered_index.hpp>
 #include <boost/multi_index/sequenced_index.hpp>
+#include <boost/next_prior.hpp>
 #include <climits>
 #include <ctime>
 #include <iomanip>
@@ -163,7 +164,7 @@
   pair<iterator,bool> insert(const value_type& v)
   {
     List::push_back(v);
- return pair<iterator,bool>(--List::end(),true);
+ return pair<iterator,bool>(boost::prior(List::end()),true);
   }
 };
 

Modified: branches/bcbboost/libs/multi_index/test/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/multi_index/test/Jamfile.v2 (original)
+++ branches/bcbboost/libs/multi_index/test/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 # Boost.MultiIndex tests Jamfile
 #
-# Copyright 2003-2006 Joaquín M López Muñoz.
+# Copyright 2003-2007 Joaquín M López Muñoz.
 # Distributed under 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)
@@ -26,7 +26,8 @@
     [ run test_rearrange.cpp test_rearrange_main.cpp ]
     [ run test_safe_mode.cpp test_safe_mode_main.cpp ]
     [ run test_serialization.cpp test_serialization1.cpp
- test_serialization2.cpp test_serialization_main.cpp
+ test_serialization2.cpp test_serialization3.cpp
+ test_serialization_main.cpp
                 /boost/serialization//boost_serialization ]
     [ run test_set_ops.cpp test_set_ops_main.cpp ]
     [ run test_special_set_ops.cpp test_special_set_ops_main.cpp ]

Modified: branches/bcbboost/libs/multi_index/test/employee.hpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/employee.hpp (original)
+++ branches/bcbboost/libs/multi_index/test/employee.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Used in Boost.MultiIndex tests.
  *
- * Copyright 2003-2006 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -23,6 +23,7 @@
 #include <cstddef>
 #include <ostream>
 #include <string>
+#include "non_std_allocator.hpp"
 
 struct employee
 {
@@ -92,7 +93,8 @@
 typedef
   boost::multi_index::multi_index_container<
     employee,
- employee_set_indices> employee_set;
+ employee_set_indices,
+ non_std_allocator<employee> > employee_set;
 
 #if defined(BOOST_NO_MEMBER_TEMPLATES)
 typedef boost::multi_index::nth_index<

Modified: branches/bcbboost/libs/multi_index/test/pair_of_ints.hpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/pair_of_ints.hpp (original)
+++ branches/bcbboost/libs/multi_index/test/pair_of_ints.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Used in Boost.MultiIndex tests.
  *
- * Copyright 2003-2004 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -32,6 +32,21 @@
   ++x;
 }
 
+inline void decrement_first(pair_of_ints& p)
+{
+ --p.first;
+}
+
+inline void decrement_second(pair_of_ints& p)
+{
+ --p.second;
+}
+
+inline void decrement_int(int& x)
+{
+ --x;
+}
+
 #if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
 namespace boost{
 namespace serialization{

Modified: branches/bcbboost/libs/multi_index/test/test_capacity.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/test_capacity.cpp (original)
+++ branches/bcbboost/libs/multi_index/test/test_capacity.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Boost.MultiIndex test for capacity memfuns.
  *
- * Copyright 2003-2006 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -53,6 +53,9 @@
   ss.resize(5);
   BOOST_CHECK(ss.size()==5);
 
+ ss.resize(4);
+ BOOST_CHECK(ss.size()==4);
+
   multi_index_container<int,indexed_by<random_access<> > > rs;
 
   rs.resize(10);

Modified: branches/bcbboost/libs/multi_index/test/test_copy_assignment.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/test_copy_assignment.cpp (original)
+++ branches/bcbboost/libs/multi_index/test/test_copy_assignment.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Boost.MultiIndex test for copying and assignment.
  *
- * Copyright 2003-2006 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -57,6 +57,27 @@
 #pragma parse_func_templ reset
 #endif
 
+template<typename Sequence>
+static void test_integral_assign(BOOST_EXPLICIT_TEMPLATE_TYPE(Sequence))
+{
+ /* Special cases described in 23.1.1/9: integral types must not
+ * be taken as iterators in assign(f,l) and insert(p,f,l).
+ */
+
+ Sequence s;
+
+ s.assign(5,10);
+ BOOST_CHECK(s.size()==5&&std::accumulate(s.begin(),s.end(),0)==50);
+ s.assign(2u,5u);
+ BOOST_CHECK(s.size()==2&&std::accumulate(s.begin(),s.end(),0)==10);
+
+ s.clear();
+ s.insert(s.begin(),5,10);
+ BOOST_CHECK(s.size()==5&&std::accumulate(s.begin(),s.end(),0)==50);
+ s.insert(s.begin(),2u,5u);
+ BOOST_CHECK(s.size()==7&&std::accumulate(s.begin(),s.end(),0)==60);
+}
+
 void test_copy_assignment()
 {
   employee_set es;
@@ -130,7 +151,11 @@
   /* MSVC++ 6.0 chokes on test_assign without this explicit instantiation */
   multi_index_container<int,indexed_by<sequenced<> > > s1;
   test_assign<multi_index_container<int,indexed_by<sequenced<> > > >();
+ test_integral_assign<
+ multi_index_container<int,indexed_by<sequenced<> > > >();
 
   multi_index_container<int,indexed_by<random_access<> > > s2;
   test_assign<multi_index_container<int,indexed_by<random_access<> > > >();
+ test_integral_assign<
+ multi_index_container<int,indexed_by<random_access<> > > >();
 }

Modified: branches/bcbboost/libs/multi_index/test/test_iterators.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/test_iterators.cpp (original)
+++ branches/bcbboost/libs/multi_index/test/test_iterators.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Boost.MultiIndex test for iterators.
  *
- * Copyright 2003-2006 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -13,6 +13,7 @@
 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
 #include "pre_multi_index.hpp"
 #include "employee.hpp"
+#include <boost/next_prior.hpp>
 #include <boost/test/test_tools.hpp>
 
 using namespace boost::multi_index;
@@ -25,6 +26,7 @@
 
   int n=0;
   for(iterator it=i.begin();it!=i.end();++it){
+ BOOST_CHECK(i.iterator_to(*it)==it);
     n+=it->id;
   }
   int m=0;
@@ -51,8 +53,14 @@
   typedef typename Index::const_iterator const_iterator;
   typedef typename Index::const_reverse_iterator const_reverse_iterator;
 
+ BOOST_CHECK(i.cbegin()==i.begin());
+ BOOST_CHECK(i.cend()==i.end());
+ BOOST_CHECK(i.crbegin()==i.rbegin());
+ BOOST_CHECK(i.crend()==i.rend());
+
   int n=0;
   for(const_iterator it=i.begin();it!=i.end();++it){
+ BOOST_CHECK(i.iterator_to(*it)==it);
     n+=it->id;
   }
   int m=0;
@@ -82,11 +90,13 @@
 
   int n=0;
   for(iterator it=i.begin();it!=i.end();++it){
+ BOOST_CHECK(i.iterator_to(*it)==it);
     n+=it->id;
   }
   int m=0;
   for(size_type buc=0;buc<i.bucket_count();++buc){
     for(local_iterator it=i.begin(buc);it!=i.end(buc);++it){
+ BOOST_CHECK(i.local_iterator_to(*it)==it);
       m+=it->id;
     }
   }
@@ -101,13 +111,20 @@
   typedef typename Index::const_local_iterator const_local_iterator;
   typedef typename Index::size_type size_type;
 
+ BOOST_CHECK(i.cbegin()==i.begin());
+ BOOST_CHECK(i.cend()==i.end());
+
   int n=0;
   for(const_iterator it=i.begin();it!=i.end();++it){
+ BOOST_CHECK(i.iterator_to(*it)==it);
     n+=it->id;
   }
   int m=0;
   for(size_type buc=0;buc<i.bucket_count();++buc){
+ BOOST_CHECK(i.cbegin(buc)==i.begin(buc));
+ BOOST_CHECK(i.cend(buc)==i.end(buc));
     for(const_local_iterator it=i.begin(buc);it!=i.end(buc);++it){
+ BOOST_CHECK(i.local_iterator_to(*it)==it);
       m+=it->id;
     }
   }
@@ -129,16 +146,17 @@
 
   int n=0;
   for(iterator it=i.begin();it!=middle;++it){
+ BOOST_CHECK(i.iterator_to(*it)==it);
     n+=it->id;
     n+=it[off].id;
   }
- if(odd)n+=(--i.end())->id;
+ if(odd)n+=(boost::prior(i.end()))->id;
   int m=0;
   for(reverse_iterator rit=i.rbegin();rit!=rmiddle;++rit){
     m+=rit->id;
     m+=(rit+off)->id;
   }
- if(odd)m+=(--i.rend())->id;
+ if(odd)m+=(boost::prior(i.rend()))->id;
   int p=0;
   for(iterator it2=i.end();it2!=middle;){
     --it2;
@@ -164,6 +182,11 @@
   typedef typename Index::const_reverse_iterator const_reverse_iterator;
   typedef typename Index::difference_type difference_type;
 
+ BOOST_CHECK(i.cbegin()==i.begin());
+ BOOST_CHECK(i.cend()==i.end());
+ BOOST_CHECK(i.crbegin()==i.rbegin());
+ BOOST_CHECK(i.crend()==i.rend());
+
   const_iterator middle=i.begin()+(i.end()-i.begin())/2;
   difference_type off=middle-i.begin();
   const_reverse_iterator rmiddle=i.rbegin()+off;
@@ -171,16 +194,17 @@
 
   int n=0;
   for(const_iterator it=i.begin();it!=middle;++it){
+ BOOST_CHECK(i.iterator_to(*it)==it);
     n+=it->id;
     n+=it[off].id;
   }
- if(odd)n+=(--i.end())->id;
+ if(odd)n+=(boost::prior(i.end()))->id;
   int m=0;
   for(const_reverse_iterator rit=i.rbegin();rit!=rmiddle;++rit){
     m+=rit->id;
     m+=(rit+off)->id;
   }
- if(odd)m+=(--i.rend())->id;
+ if(odd)m+=(boost::prior(i.rend()))->id;
   int p=0;
   for(const_iterator it2=i.end();it2!=middle;){
     --it2;

Modified: branches/bcbboost/libs/multi_index/test/test_key_extractors.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/test_key_extractors.cpp (original)
+++ branches/bcbboost/libs/multi_index/test/test_key_extractors.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Boost.MultiIndex test for key extractors.
  *
- * Copyright 2003-2006 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -30,6 +30,10 @@
   bool bool_mem_fun_const()const{return true;}
   bool bool_mem_fun(){return false;}
 
+ static bool bool_global_fun(test_class){return true;}
+ static bool bool_global_fun_const_ref(const test_class&){return false;}
+ static bool bool_global_fun_ref(test_class&){return true;}
+
   test_class(int i=0):int_member(i),int_cmember(i){}
   test_class(int i,int j):int_member(i),int_cmember(j){}
 
@@ -69,6 +73,15 @@
 typedef BOOST_MULTI_INDEX_CONST_MEM_FUN(
           test_class,bool,bool_mem_fun_const) key_cmf;
 typedef BOOST_MULTI_INDEX_MEM_FUN(test_class,bool,bool_mem_fun) key_mf;
+typedef global_fun<test_class,bool,&test_class::bool_global_fun> key_gf;
+typedef global_fun<
+ const test_class&,bool,
+ &test_class::bool_global_fun_const_ref
+ > key_gcrf;
+typedef global_fun<
+ test_class&,bool,
+ &test_class::bool_global_fun_ref
+ > key_grf;
 typedef composite_key<
           test_class,
           idn,
@@ -84,7 +97,7 @@
 typedef composite_key<
           boost::reference_wrapper<test_class>,
           key_mf
- > ccompw_key;
+ > ccompw_key;
 
 #if !defined(BOOST_NO_SFINAE)
 /* testcases for problems with non-copyable classes reported at
@@ -99,6 +112,9 @@
   bool bool_mem_fun_const()const{return true;}
   bool bool_mem_fun(){return false;}
 
+ static bool bool_global_fun_const_ref(const test_nc_class&){return false;}
+ static bool bool_global_fun_ref(test_nc_class&){return true;}
+
   test_nc_class(int i=0):int_member(i),int_cmember(i){}
   test_nc_class(int i,int j):int_member(i),int_cmember(j){}
 
@@ -129,6 +145,14 @@
           test_nc_class,bool,bool_mem_fun_const) nc_key_cmf;
 typedef BOOST_MULTI_INDEX_MEM_FUN(
           test_nc_class,bool,bool_mem_fun) nc_key_mf;
+typedef global_fun<
+ const test_nc_class&,bool,
+ &test_nc_class::bool_global_fun_const_ref
+ > nc_key_gcrf;
+typedef global_fun<
+ test_nc_class&,bool,
+ &test_nc_class::bool_global_fun_ref
+ > nc_key_grf;
 typedef composite_key<
           test_nc_class,
           nc_idn,
@@ -147,6 +171,9 @@
   key_cm k_cm;
   key_cmf k_cmf;
   key_mf k_mf;
+ key_gf k_gf;
+ key_gcrf k_gcrf;
+ key_grf k_grf;
   compkey cmpk;
   ccompkey ccmpk;
   ccompw_key ccmpk_w;
@@ -329,6 +356,71 @@
   BOOST_CHECK(!k_mf(tpp));
   BOOST_CHECK(!k_mf(tap));
   BOOST_CHECK(!k_mf(tw));
+
+ BOOST_CHECK(k_gf(tr));
+ BOOST_CHECK(k_gf(ctr));
+
+#if !defined(BOOST_NO_SFINAE)
+ BOOST_CHECK(k_gf(td));
+ BOOST_CHECK(k_gf(ctdr));
+#endif
+
+ BOOST_CHECK(k_gf(tp));
+ BOOST_CHECK(k_gf(ctp));
+
+#if !defined(BOOST_NO_SFINAE)
+ BOOST_CHECK(k_gf(tdp));
+ BOOST_CHECK(k_gf(ctdp));
+#endif
+
+ BOOST_CHECK(k_gf(tpp));
+ BOOST_CHECK(k_gf(ctpp));
+ BOOST_CHECK(k_gf(tap));
+ BOOST_CHECK(k_gf(ctap));
+
+ BOOST_CHECK(k_gf(tw));
+ BOOST_CHECK(k_gf(ctw));
+
+ BOOST_CHECK(!k_gcrf(tr));
+ BOOST_CHECK(!k_gcrf(ctr));
+
+#if !defined(BOOST_NO_SFINAE)
+ BOOST_CHECK(!k_gcrf(td));
+ BOOST_CHECK(!k_gcrf(ctdr));
+#endif
+
+ BOOST_CHECK(!k_gcrf(tp));
+ BOOST_CHECK(!k_gcrf(ctp));
+
+#if !defined(BOOST_NO_SFINAE)
+ BOOST_CHECK(!k_gcrf(tdp));
+ BOOST_CHECK(!k_gcrf(ctdp));
+#endif
+
+ BOOST_CHECK(!k_gcrf(tpp));
+ BOOST_CHECK(!k_gcrf(ctpp));
+ BOOST_CHECK(!k_gcrf(tap));
+ BOOST_CHECK(!k_gcrf(ctap));
+
+ BOOST_CHECK(!k_gcrf(tw));
+ BOOST_CHECK(!k_gcrf(ctw));
+
+ BOOST_CHECK(k_grf(tr));
+
+#if !defined(BOOST_NO_SFINAE)
+ BOOST_CHECK(k_grf(td));
+#endif
+
+ BOOST_CHECK(k_grf(tp));
+
+#if !defined(BOOST_NO_SFINAE)
+ BOOST_CHECK(k_grf(tdp));
+#endif
+
+ BOOST_CHECK(k_grf(tpp));
+ BOOST_CHECK(k_grf(tap));
+ BOOST_CHECK(k_grf(tw));
+
   BOOST_CHECK(ccmpk_w(tw)==make_tuple(false));
 
 #if !defined(BOOST_NO_SFINAE)
@@ -342,6 +434,8 @@
   nc_ckey_m nc_ck_m;
   nc_key_cmf nc_k_cmf;
   nc_key_mf nc_k_mf;
+ nc_key_gcrf nc_k_gcrf;
+ nc_key_grf nc_k_grf;
   nc_compkey nc_cmpk;
 
   test_nc_derived_class nc_td(-1,0);
@@ -357,6 +451,9 @@
   BOOST_CHECK(nc_k_cmf(nc_td));
   BOOST_CHECK(!nc_k_mf(nc_td));
 
+ BOOST_CHECK(!nc_k_gcrf(nc_td));
+ BOOST_CHECK(nc_k_grf(nc_td));
+
   test_nc_class nc_t(1,0);
   BOOST_CHECK(nc_cmpk(nc_td)==make_tuple(boost::cref(nc_t),1,1,true));
 #endif
@@ -370,6 +467,9 @@
     BOOST_CHECK(k_cm(it)==j);
     BOOST_CHECK(k_cmf(it));
     BOOST_CHECK(!k_mf(it));
+ BOOST_CHECK(k_gf(it));
+ BOOST_CHECK(!k_gcrf(it));
+ BOOST_CHECK(k_grf(it));
     BOOST_CHECK(cmpk(it)==make_tuple(test_class(j),j,j,true));
     BOOST_CHECK(ccmpk(it)==make_tuple(test_class(j),j));
     ++j;

Modified: branches/bcbboost/libs/multi_index/test/test_modifiers.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/test_modifiers.cpp (original)
+++ branches/bcbboost/libs/multi_index/test/test_modifiers.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Boost.MultiIndex test for modifier memfuns.
  *
- * Copyright 2003-2006 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -11,9 +11,12 @@
 #include "test_modifiers.hpp"
 
 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/next_prior.hpp>
+#include <iterator>
 #include <vector>
 #include "pre_multi_index.hpp"
 #include "employee.hpp"
+#include <boost/next_prior.hpp>
 #include <boost/test/test_tools.hpp>
 
 class always_one
@@ -283,4 +286,31 @@
   aoc.insert(always_one());
   aoc.erase(*(aoc.begin()));
   BOOST_CHECK(aoc.empty());
+
+ /* Testcases for compliance with "as close to hint as possible"
+ * proposed behavior for associative containers:
+ * http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#233
+ * http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1780.html
+ */
+
+ typedef multi_index_container<
+ int,
+ indexed_by<
+ ordered_non_unique<identity<int> >
+ >
+ > int_non_unique_container;
+
+ int_non_unique_container c;
+ c.insert(0);c.insert(0);
+ c.insert(1);c.insert(1);
+ c.insert(2);c.insert(2);
+
+ BOOST_CHECK(std::distance(c.begin(),c.insert(c.begin(),1))==2);
+ BOOST_CHECK(std::distance(c.begin(),c.insert(boost::next(c.begin()),1))==2);
+ BOOST_CHECK(std::distance(c.begin(),c.insert(c.lower_bound(1),1))==2);
+ BOOST_CHECK(
+ std::distance(c.begin(),c.insert(boost::next(c.lower_bound(1)),1))==3);
+ BOOST_CHECK(std::distance(c.begin(),c.insert(c.upper_bound(1),1))==8);
+ BOOST_CHECK(std::distance(c.begin(),c.insert(boost::prior(c.end()),1))==9);
+ BOOST_CHECK(std::distance(c.begin(),c.insert(c.end(),1))==10);
 }

Modified: branches/bcbboost/libs/multi_index/test/test_range.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/test_range.cpp (original)
+++ branches/bcbboost/libs/multi_index/test/test_range.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -104,15 +104,17 @@
     std::bind1st(std::less<int>(),7), /* 7 < x */
     std::bind2nd(std::less_equal<int>(),7)); /* x <= 7 */
   CHECK_VOID_RANGE(p);
+ BOOST_CHECK(p.first==is.upper_bound(7));
 
   p=is.range(
     std::bind1st(std::less_equal<int>(),8), /* 8 <= x */
     std::bind2nd(std::less<int>(),2)); /* x < 2 */
   CHECK_VOID_RANGE(p);
+ BOOST_CHECK(p.first==is.lower_bound(8));
 
   p=is.range(
     std::bind1st(std::less<int>(),4), /* 4 < x */
     std::bind2nd(std::less<int>(),5)); /* x < 5 */
   CHECK_VOID_RANGE(p);
- BOOST_CHECK(p.first!=is.end()&&p.second!=is.end());
+ BOOST_CHECK(p.first!=is.end());
 }

Modified: branches/bcbboost/libs/multi_index/test/test_rearrange.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/test_rearrange.cpp (original)
+++ branches/bcbboost/libs/multi_index/test/test_rearrange.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -17,6 +17,7 @@
 #include <boost/multi_index_container.hpp>
 #include <boost/multi_index/sequenced_index.hpp>
 #include <boost/multi_index/random_access_index.hpp>
+#include <boost/next_prior.hpp>
 #include <boost/ref.hpp>
 #include <boost/test/test_tools.hpp>
 #include <vector>
@@ -87,7 +88,7 @@
   CHECK_EQUAL(sc,{3 _ 2 _ 4 _ 5 _ 0 _ 1});
   BOOST_CHECK(std::distance(it,it2)==3);
 
- sc.relocate(--(sc.end()),it,it2);
+ sc.relocate(boost::prior(sc.end()),it,it2);
   CHECK_EQUAL(sc,{3 _ 0 _ 2 _ 4 _ 5 _ 1});
 
   std::vector<boost::reference_wrapper<const value_type> > v;

Modified: branches/bcbboost/libs/multi_index/test/test_serialization.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/test_serialization.cpp (original)
+++ branches/bcbboost/libs/multi_index/test/test_serialization.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Boost.MultiIndex test for serialization.
  *
- * Copyright 2003-2006 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -11,9 +11,11 @@
 #include "test_serialization.hpp"
 #include "test_serialization1.hpp"
 #include "test_serialization2.hpp"
+#include "test_serialization3.hpp"
 
 void test_serialization()
 {
   test_serialization1();
   test_serialization2();
+ test_serialization3();
 }

Modified: branches/bcbboost/libs/multi_index/test/test_serialization1.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/test_serialization1.cpp (original)
+++ branches/bcbboost/libs/multi_index/test/test_serialization1.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Boost.MultiIndex test for serialization, part 1.
  *
- * Copyright 2003-2006 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -8,7 +8,7 @@
  * See http://www.boost.org/libs/multi_index for library home page.
  */
 
-#include "test_serialization.hpp"
+#include "test_serialization1.hpp"
 #include "test_serialization_template.hpp"
 
 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
@@ -16,6 +16,7 @@
 #include <boost/multi_index/sequenced_index.hpp>
 #include <boost/multi_index/random_access_index.hpp>
 #include <boost/multi_index/key_extractors.hpp>
+#include "non_std_allocator.hpp"
 
 using namespace boost::multi_index;
 
@@ -49,7 +50,8 @@
         random_access<>,
         sequenced<>,
         ordered_non_unique<identity<int> >
- >
+ >,
+ non_std_allocator<int>
> multi_index_t;
 
     multi_index_t m;

Modified: branches/bcbboost/libs/multi_index/test/test_serialization2.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/test_serialization2.cpp (original)
+++ branches/bcbboost/libs/multi_index/test/test_serialization2.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Boost.MultiIndex test for serialization, part 2.
  *
- * Copyright 2003-2006 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -8,97 +8,18 @@
  * See http://www.boost.org/libs/multi_index for library home page.
  */
 
-#include "test_serialization.hpp"
+#include "test_serialization2.hpp"
 #include "test_serialization_template.hpp"
 
-#include <boost/multi_index/hashed_index.hpp>
 #include <boost/multi_index/ordered_index.hpp>
 #include <boost/multi_index/sequenced_index.hpp>
 #include <boost/multi_index/random_access_index.hpp>
 #include <boost/multi_index/key_extractors.hpp>
+#include "non_std_allocator.hpp"
 #include "pair_of_ints.hpp"
 
 using namespace boost::multi_index;
 
-void test_hashed_index_serialization()
-{
- const int N=100;
- const int SHUFFLE=10232;
-
- typedef multi_index_container<
- int,
- indexed_by<
- hashed_unique<identity<int> >,
- sequenced<>
- >
- > hashed_set;
-
- typedef hashed_set::iterator iterator;
- typedef hashed_set::local_iterator local_iterator;
-
- hashed_set hs;
-
- for(int i=0;i<N;++i){
- hs.insert(i*SHUFFLE);
- }
-
- std::ostringstream oss;
- {
- boost::archive::text_oarchive oa(oss);
- oa<<const_cast<const hashed_set&>(hs);
-
- std::vector<iterator> its(N);
- for(int i=0;i<N;++i){
- iterator it=hs.find(i*SHUFFLE);
- its.push_back(it);
- oa<<const_cast<const iterator&>(its.back());
- }
- iterator it=hs.end();
- oa<<const_cast<const iterator&>(it);
-
- std::vector<local_iterator> lits(2*N);
- for(std::size_t buc=0;buc<hs.bucket_count();++buc){
- for(local_iterator lit=hs.begin(buc),lit_end=hs.end(buc);
- lit!=lit_end;++lit){
- oa<<*lit;
- lits.push_back(lit);
- oa<<const_cast<const local_iterator&>(lits.back());
- }
- local_iterator lit2=hs.end(buc);
- lits.push_back(lit2);
- oa<<const_cast<const local_iterator&>(lits.back());
- }
- }
-
- hashed_set hs2;
- std::istringstream iss(oss.str());
- boost::archive::text_iarchive ia(iss);
- ia>>hs2;
- BOOST_CHECK(get<1>(hs)==get<1>(hs2));
-
- for(int j=0;j<N;++j){
- iterator it;
- ia>>it;
- BOOST_CHECK(*it==j*SHUFFLE);
- }
- iterator it;
- ia>>it;
- BOOST_CHECK(it==hs2.end());
-
- for(std::size_t buc=0;buc<hs2.bucket_count();++buc){
- for(std::size_t k=0;k<hs2.bucket_size(buc);++k){
- int n;
- local_iterator it;
- ia>>n;
- ia>>it;
- BOOST_CHECK(*it==n);
- }
- local_iterator it2;
- ia>>it2;
- BOOST_CHECK(it2==hs2.end(buc));
- }
-}
-
 void test_serialization2()
 {
   {
@@ -113,7 +34,8 @@
>,
         random_access<>,
         sequenced<>
- >
+ >,
+ non_std_allocator<pair_of_ints>
> multi_index_t;
 
     multi_index_t m;
@@ -156,5 +78,4 @@
     m.insert(pair_of_ints(3,2));
     test_serialization(m);
   }
- test_hashed_index_serialization();
 }

Modified: branches/bcbboost/libs/multi_index/test/test_serialization_template.hpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/test_serialization_template.hpp (original)
+++ branches/bcbboost/libs/multi_index/test/test_serialization_template.hpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Boost.MultiIndex serialization tests template.
  *
- * Copyright 2003-2006 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -26,9 +26,7 @@
   static bool compare(
     const MultiIndexContainer& m1,const MultiIndexContainer& m2)
   {
- using namespace boost::multi_index;
-
- if(!(get<N>(m1)==get<N>(m2))){
+ if(!(boost::multi_index::get<N>(m1)==boost::multi_index::get<N>(m2))){
       return false;
     }
     return all_indices_equal_helper<N-1>::compare(m1,m2);
@@ -60,8 +58,6 @@
 template<class MultiIndexContainer>
 void test_serialization(const MultiIndexContainer& m)
 {
- using namespace boost::multi_index;
-
   typedef typename MultiIndexContainer::iterator iterator;
   typedef typename MultiIndexContainer::const_iterator const_iterator;
 
@@ -100,10 +96,10 @@
     iterator it4;
     it4=--it2;
     BOOST_CHECK(it==it4);
- BOOST_CHECK(it==project<0>(m2,it4));
+ BOOST_CHECK(it==boost::multi_index::project<0>(m2,it4));
   }
   iterator it2;
   ia>>it2;
   BOOST_CHECK(it_end==it2);
- BOOST_CHECK(it_end==project<0>(m2,it2));
+ BOOST_CHECK(it_end==boost::multi_index::project<0>(m2,it2));
 }

Modified: branches/bcbboost/libs/multi_index/test/test_update.cpp
==============================================================================
--- branches/bcbboost/libs/multi_index/test/test_update.cpp (original)
+++ branches/bcbboost/libs/multi_index/test/test_update.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,6 +1,6 @@
 /* Boost.MultiIndex test for replace(), modify() and modify_key().
  *
- * Copyright 2003-2006 Joaquín M López Muñoz.
+ * Copyright 2003-2007 Joaquín M López Muñoz.
  * Distributed under 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)
@@ -15,6 +15,7 @@
 #include "pre_multi_index.hpp"
 #include "employee.hpp"
 #include "pair_of_ints.hpp"
+#include <boost/next_prior.hpp>
 #include <boost/test/test_tools.hpp>
 
 using namespace boost::multi_index;
@@ -64,34 +65,44 @@
     BOOST_CHECK(!ii2.replace(ii2.begin(),pair_of_ints(0,5)));
     BOOST_CHECK(!ii1.replace(project<1>(iis,iis.begin()),pair_of_ints(5,11)));
     BOOST_CHECK(!iis.replace(iis.begin(),pair_of_ints(11,5)));
- BOOST_CHECK(!iis.replace(++iis.begin(),pair_of_ints(10,5)));
+ BOOST_CHECK(!iis.replace(boost::next(iis.begin()),pair_of_ints(10,5)));
     BOOST_CHECK(!ii1.replace(
- project<1>(iis,++iis.begin()),pair_of_ints(5,10)));
- BOOST_CHECK(!iis.replace(--iis.end(),pair_of_ints(5,10)));
- BOOST_CHECK(!ii2.replace(--ii2.end(),pair_of_ints(10,5)));
+ project<1>(iis,boost::next(iis.begin())),pair_of_ints(5,10)));
+ BOOST_CHECK(!iis.replace(boost::prior(iis.end()),pair_of_ints(5,10)));
+ BOOST_CHECK(!ii2.replace(boost::prior(ii2.end()),pair_of_ints(10,5)));
 
     BOOST_CHECK(iis.modify(iis.begin(),increment_first));
     BOOST_CHECK(ii2.modify(ii2.begin(),increment_first));
     BOOST_CHECK(ii1.modify(project<1>(iis,iis.begin()),increment_first));
- BOOST_CHECK(ii2.modify(ii2.begin(),increment_first));
+ BOOST_CHECK(ii2.modify(ii2.begin(),increment_first,decrement_first));
+
+ BOOST_CHECK(!iis.modify(iis.begin(),increment_first,decrement_first));
+ BOOST_CHECK(iis.size()==3);
 
     BOOST_CHECK(!iis.modify(iis.begin(),increment_first));
     BOOST_CHECK(iis.size()==2);
 
     iis.insert(pair_of_ints(0,0));
- BOOST_CHECK(ii2.modify(--ii2.end(),increment_second));
- BOOST_CHECK(iis.modify(iis.begin(),increment_second));
- BOOST_CHECK(ii2.modify(--ii2.end(),increment_second));
+ BOOST_CHECK(ii2.modify(boost::prior(ii2.end()),increment_second));
     BOOST_CHECK(iis.modify(iis.begin(),increment_second));
+ BOOST_CHECK(ii2.modify(boost::prior(ii2.end()),increment_second));
+ BOOST_CHECK(iis.modify(iis.begin(),increment_second,decrement_second));
+
+ BOOST_CHECK(!ii2.modify(
+ boost::prior(ii2.end()),increment_second,decrement_second));
+ BOOST_CHECK(ii2.size()==3);
 
- BOOST_CHECK(!ii2.modify(--ii2.end(),increment_second));
+ BOOST_CHECK(!ii2.modify(boost::prior(ii2.end()),increment_second));
     BOOST_CHECK(ii2.size()==2);
 
     iis.insert(pair_of_ints(0,0));
     BOOST_CHECK(iis.modify_key(iis.begin(),increment_int));
+ BOOST_CHECK(iis.modify_key(iis.begin(),increment_int,decrement_int));
     BOOST_CHECK(iis.modify_key(iis.begin(),increment_int));
     BOOST_CHECK(iis.modify_key(iis.begin(),increment_int));
- BOOST_CHECK(iis.modify_key(iis.begin(),increment_int));
+
+ BOOST_CHECK(!iis.modify_key(iis.begin(),increment_int,decrement_int));
+ BOOST_CHECK(iis.size()==3);
 
     BOOST_CHECK(!iis.modify_key(iis.begin(),increment_int));
     BOOST_CHECK(iis.size()==2);
@@ -99,9 +110,12 @@
     nth_index_iterator<int_int_set,1>::type it=ii1.find(5);
     BOOST_CHECK(ii1.modify_key(it,increment_int));
     BOOST_CHECK(ii1.modify_key(it,increment_int));
- BOOST_CHECK(ii1.modify_key(it,increment_int));
+ BOOST_CHECK(ii1.modify_key(it,increment_int,decrement_int));
     BOOST_CHECK(ii1.modify_key(it,increment_int));
 
+ BOOST_CHECK(!ii1.modify_key(it,increment_int,decrement_int));
+ BOOST_CHECK(ii1.size()==2);
+
     BOOST_CHECK(!ii1.modify_key(it,increment_int));
     BOOST_CHECK(ii1.size()==1);
   }
@@ -127,23 +141,30 @@
     BOOST_CHECK(!iis.replace(p2,pair_of_ints(10,5)));
     BOOST_CHECK(!iis.replace(p2,pair_of_ints(5,10)));
     BOOST_CHECK(!iis.replace(p3,pair_of_ints(5,10)));
- BOOST_CHECK(!ii1.replace(--ii1.end(),pair_of_ints(10,5)));
+ BOOST_CHECK(!ii1.replace(boost::prior(ii1.end()),pair_of_ints(10,5)));
 
     BOOST_CHECK(iis.modify(p1,increment_first));
     BOOST_CHECK(ii1.modify(ii1.begin(),increment_first));
     BOOST_CHECK(iis.modify(p1,increment_first));
- BOOST_CHECK(ii1.modify(ii1.begin(),increment_first));
+ BOOST_CHECK(ii1.modify(ii1.begin(),increment_first,decrement_first));
+
+ BOOST_CHECK(!iis.modify(p1,increment_first,decrement_first));
+ BOOST_CHECK(iis.size()==3);
 
     BOOST_CHECK(!iis.modify(p1,increment_first));
     BOOST_CHECK(iis.size()==2);
 
     p1=iis.insert(pair_of_ints(0,0)).first;
- BOOST_CHECK(ii1.modify(--ii1.end(),increment_second));
- BOOST_CHECK(iis.modify(p1,increment_second));
- BOOST_CHECK(ii1.modify(--ii1.end(),increment_second));
+ BOOST_CHECK(ii1.modify(boost::prior(ii1.end()),increment_second));
+ BOOST_CHECK(iis.modify(p1,increment_second,decrement_second));
+ BOOST_CHECK(ii1.modify(boost::prior(ii1.end()),increment_second));
     BOOST_CHECK(iis.modify(p1,increment_second));
 
- BOOST_CHECK(!ii1.modify(--ii1.end(),increment_second));
+ BOOST_CHECK(!ii1.modify(
+ boost::prior(ii1.end()),increment_second,decrement_second));
+ BOOST_CHECK(ii1.size()==3);
+
+ BOOST_CHECK(!ii1.modify(boost::prior(ii1.end()),increment_second));
     BOOST_CHECK(ii1.size()==2);
   }
 }

Modified: branches/bcbboost/libs/serialization/src/codecvt_null.cpp
==============================================================================
--- branches/bcbboost/libs/serialization/src/codecvt_null.cpp (original)
+++ branches/bcbboost/libs/serialization/src/codecvt_null.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -7,6 +7,7 @@
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
 
+#define BOOST_ARCHIVE_SOURCE
 #include <boost/archive/codecvt_null.hpp>
 
 // codecvt implementation for passing wchar_t objects to char output

Modified: branches/bcbboost/libs/thread/build/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/thread/build/Jamfile.v2 (original)
+++ branches/bcbboost/libs/thread/build/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -17,9 +17,9 @@
         barrier
         condition
         exceptions
- mutex
+# mutex
 # once
- recursive_mutex
+# recursive_mutex
 # read_write_mutex
         thread
         tss_hooks

Modified: branches/bcbboost/libs/thread/src/condition.cpp
==============================================================================
--- branches/bcbboost/libs/thread/src/condition.cpp (original)
+++ branches/bcbboost/libs/thread/src/condition.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -342,6 +342,9 @@
     res = pthread_cond_init(&m_condition, 0);
     if (res != 0)
         throw thread_resource_error();
+ res = pthread_mutex_init(&m_mutex, 0);
+ if (res != 0)
+ throw thread_resource_error();
 }
 
 condition_impl::~condition_impl()
@@ -349,20 +352,30 @@
     int res = 0;
     res = pthread_cond_destroy(&m_condition);
     assert(res == 0);
+ res = pthread_mutex_destroy(&m_mutex);
+ assert(res == 0);
 }
 
 void condition_impl::notify_one()
 {
     int res = 0;
+ res = pthread_mutex_lock(&m_mutex);
+ assert(res == 0);
     res = pthread_cond_signal(&m_condition);
     assert(res == 0);
+ res = pthread_mutex_unlock(&m_mutex);
+ assert(res == 0);
 }
 
 void condition_impl::notify_all()
 {
     int res = 0;
+ res = pthread_mutex_lock(&m_mutex);
+ assert(res == 0);
     res = pthread_cond_broadcast(&m_condition);
     assert(res == 0);
+ res = pthread_mutex_unlock(&m_mutex);
+ assert(res == 0);
 }
 
 void condition_impl::do_wait(pthread_mutex_t* pmutex)

Deleted: branches/bcbboost/libs/thread/src/mutex.cpp
==============================================================================
--- branches/bcbboost/libs/thread/src/mutex.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
+++ (empty file)
@@ -1,561 +0,0 @@
-// Copyright (C) 2001-2003
-// William E. Kempf
-//
-// Distributed under 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)
-
-#include <boost/thread/detail/config.hpp>
-
-#include <boost/thread/mutex.hpp>
-#include <boost/thread/xtime.hpp>
-#include <boost/thread/thread.hpp>
-#include <boost/thread/exceptions.hpp>
-#include <boost/limits.hpp>
-#include <string>
-#include <stdexcept>
-#include <cassert>
-#include "timeconv.inl"
-
-#if defined(BOOST_HAS_WINTHREADS)
-# include <new>
-# include <boost/thread/once.hpp>
-# include <windows.h>
-# include <time.h>
-# include "mutex.inl"
-#elif defined(BOOST_HAS_PTHREADS)
-# include <errno.h>
-#elif defined(BOOST_HAS_MPTASKS)
-# include <MacErrors.h>
-# include "mac/init.hpp"
-# include "mac/safe.hpp"
-#endif
-
-namespace boost {
-
-#if defined(BOOST_HAS_WINTHREADS)
-
-mutex::mutex()
- : m_mutex(0)
- , m_critical_section(false)
-{
- m_critical_section = true;
- if (m_critical_section)
- m_mutex = new_critical_section();
- else
- m_mutex = new_mutex(0);
-}
-
-mutex::~mutex()
-{
- if (m_critical_section)
- delete_critical_section(m_mutex);
- else
- delete_mutex(m_mutex);
-}
-
-void mutex::do_lock()
-{
- if (m_critical_section)
- wait_critical_section_infinite(m_mutex);
- else
- wait_mutex(m_mutex, INFINITE);
-}
-
-void mutex::do_unlock()
-{
- if (m_critical_section)
- release_critical_section(m_mutex);
- else
- release_mutex(m_mutex);
-}
-
-void mutex::do_lock(cv_state&)
-{
- do_lock();
-}
-
-void mutex::do_unlock(cv_state&)
-{
- do_unlock();
-}
-
-try_mutex::try_mutex()
- : m_mutex(0)
- , m_critical_section(false)
-{
- m_critical_section = has_TryEnterCriticalSection();
- if (m_critical_section)
- m_mutex = new_critical_section();
- else
- m_mutex = new_mutex(0);
-}
-
-try_mutex::~try_mutex()
-{
- if (m_critical_section)
- delete_critical_section(m_mutex);
- else
- delete_mutex(m_mutex);
-}
-
-void try_mutex::do_lock()
-{
- if (m_critical_section)
- wait_critical_section_infinite(m_mutex);
- else
- wait_mutex(m_mutex, INFINITE);
-}
-
-bool try_mutex::do_trylock()
-{
- if (m_critical_section)
- return wait_critical_section_try(m_mutex);
- else
- return wait_mutex(m_mutex, 0) == WAIT_OBJECT_0;
-}
-
-void try_mutex::do_unlock()
-{
- if (m_critical_section)
- release_critical_section(m_mutex);
- else
- release_mutex(m_mutex);
-}
-
-void try_mutex::do_lock(cv_state&)
-{
- do_lock();
-}
-
-void try_mutex::do_unlock(cv_state&)
-{
- do_unlock();
-}
-
-timed_mutex::timed_mutex()
- : m_mutex(0)
-{
- m_mutex = new_mutex(0);
-}
-
-timed_mutex::~timed_mutex()
-{
- delete_mutex(m_mutex);
-}
-
-void timed_mutex::do_lock()
-{
- wait_mutex(m_mutex, INFINITE);
-}
-
-bool timed_mutex::do_trylock()
-{
- return wait_mutex(m_mutex, 0) == WAIT_OBJECT_0;
-}
-
-bool timed_mutex::do_timedlock(const xtime& xt)
-{
- for (;;)
- {
- int milliseconds;
- to_duration(xt, milliseconds);
-
- int res = wait_mutex(m_mutex, milliseconds);
-
- if (res == WAIT_TIMEOUT)
- {
- boost::xtime cur;
- boost::xtime_get(&cur, boost::TIME_UTC);
- if (boost::xtime_cmp(xt, cur) > 0)
- continue;
- }
-
- return res == WAIT_OBJECT_0;
- }
-}
-
-void timed_mutex::do_unlock()
-{
- release_mutex(m_mutex);
-}
-
-void timed_mutex::do_lock(cv_state&)
-{
- do_lock();
-}
-
-void timed_mutex::do_unlock(cv_state&)
-{
- do_unlock();
-}
-
-#elif defined(BOOST_HAS_PTHREADS)
-
-mutex::mutex()
-{
- int res = 0;
- res = pthread_mutex_init(&m_mutex, 0);
- if (res != 0)
- throw thread_resource_error();
-}
-
-mutex::~mutex()
-{
- int res = 0;
- res = pthread_mutex_destroy(&m_mutex);
- assert(res == 0);
-}
-
-void mutex::do_lock()
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- if (res == EDEADLK) throw lock_error();
- assert(res == 0);
-}
-
-void mutex::do_unlock()
-{
- int res = 0;
- res = pthread_mutex_unlock(&m_mutex);
- if (res == EPERM) throw lock_error();
- assert(res == 0);
-}
-
-void mutex::do_lock(cv_state&)
-{
-}
-
-void mutex::do_unlock(cv_state& state)
-{
- state.pmutex = &m_mutex;
-}
-
-try_mutex::try_mutex()
-{
- int res = 0;
- res = pthread_mutex_init(&m_mutex, 0);
- if (res != 0)
- throw thread_resource_error();
-}
-
-try_mutex::~try_mutex()
-{
- int res = 0;
- res = pthread_mutex_destroy(&m_mutex);
- assert(res == 0);
-}
-
-void try_mutex::do_lock()
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- if (res == EDEADLK) throw lock_error();
- assert(res == 0);
-}
-
-bool try_mutex::do_trylock()
-{
- int res = 0;
- res = pthread_mutex_trylock(&m_mutex);
- if (res == EDEADLK) throw lock_error();
- assert(res == 0 || res == EBUSY);
- return res == 0;
-}
-
-void try_mutex::do_unlock()
-{
- int res = 0;
- res = pthread_mutex_unlock(&m_mutex);
- if (res == EPERM) throw lock_error();
- assert(res == 0);
-}
-
-void try_mutex::do_lock(cv_state&)
-{
-}
-
-void try_mutex::do_unlock(cv_state& state)
-{
- state.pmutex = &m_mutex;
-}
-
-timed_mutex::timed_mutex()
- : m_locked(false)
-{
- int res = 0;
- res = pthread_mutex_init(&m_mutex, 0);
- if (res != 0)
- throw thread_resource_error();
-
- res = pthread_cond_init(&m_condition, 0);
- if (res != 0)
- {
- pthread_mutex_destroy(&m_mutex);
- throw thread_resource_error();
- }
-}
-
-timed_mutex::~timed_mutex()
-{
- assert(!m_locked);
- int res = 0;
- res = pthread_mutex_destroy(&m_mutex);
- assert(res == 0);
-
- res = pthread_cond_destroy(&m_condition);
- assert(res == 0);
-}
-
-void timed_mutex::do_lock()
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- while (m_locked)
- {
- res = pthread_cond_wait(&m_condition, &m_mutex);
- assert(res == 0);
- }
-
- assert(!m_locked);
- m_locked = true;
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
-}
-
-bool timed_mutex::do_trylock()
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- bool ret = false;
- if (!m_locked)
- {
- m_locked = true;
- ret = true;
- }
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
- return ret;
-}
-
-bool timed_mutex::do_timedlock(const xtime& xt)
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- timespec ts;
- to_timespec(xt, ts);
-
- while (m_locked)
- {
- res = pthread_cond_timedwait(&m_condition, &m_mutex, &ts);
- assert(res == 0 || res == ETIMEDOUT);
-
- if (res == ETIMEDOUT)
- break;
- }
-
- bool ret = false;
- if (!m_locked)
- {
- m_locked = true;
- ret = true;
- }
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
- return ret;
-}
-
-void timed_mutex::do_unlock()
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- assert(m_locked);
- m_locked = false;
-
- res = pthread_cond_signal(&m_condition);
- assert(res == 0);
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
-}
-
-void timed_mutex::do_lock(cv_state&)
-{
- int res = 0;
- while (m_locked)
- {
- res = pthread_cond_wait(&m_condition, &m_mutex);
- assert(res == 0);
- }
-
- assert(!m_locked);
- m_locked = true;
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
-}
-
-void timed_mutex::do_unlock(cv_state& state)
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- assert(m_locked);
- m_locked = false;
-
- res = pthread_cond_signal(&m_condition);
- assert(res == 0);
-
- state.pmutex = &m_mutex;
-}
-
-#elif defined(BOOST_HAS_MPTASKS)
-
-using threads::mac::detail::safe_enter_critical_region;
-
-mutex::mutex()
-{
-}
-
-mutex::~mutex()
-{
-}
-
-void mutex::do_lock()
-{
- OSStatus lStatus = noErr;
- lStatus = safe_enter_critical_region(m_mutex, kDurationForever,
- m_mutex_mutex);
- assert(lStatus == noErr);
-}
-
-void mutex::do_unlock()
-{
- OSStatus lStatus = noErr;
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
-}
-
-void mutex::do_lock(cv_state& /*state*/)
-{
- do_lock();
-}
-
-void mutex::do_unlock(cv_state& /*state*/)
-{
- do_unlock();
-}
-
-try_mutex::try_mutex()
-{
-}
-
-try_mutex::~try_mutex()
-{
-}
-
-void try_mutex::do_lock()
-{
- OSStatus lStatus = noErr;
- lStatus = safe_enter_critical_region(m_mutex, kDurationForever,
- m_mutex_mutex);
- assert(lStatus == noErr);
-}
-
-bool try_mutex::do_trylock()
-{
- OSStatus lStatus = noErr;
- lStatus = MPEnterCriticalRegion(m_mutex, kDurationImmediate);
- assert(lStatus == noErr || lStatus == kMPTimeoutErr);
- return lStatus == noErr;
-}
-
-void try_mutex::do_unlock()
-{
- OSStatus lStatus = noErr;
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
-}
-
-void try_mutex::do_lock(cv_state& /*state*/)
-{
- do_lock();
-}
-
-void try_mutex::do_unlock(cv_state& /*state*/)
-{
- do_unlock();
-}
-
-timed_mutex::timed_mutex()
-{
-}
-
-timed_mutex::~timed_mutex()
-{
-}
-
-void timed_mutex::do_lock()
-{
- OSStatus lStatus = noErr;
- lStatus = safe_enter_critical_region(m_mutex, kDurationForever,
- m_mutex_mutex);
- assert(lStatus == noErr);
-}
-
-bool timed_mutex::do_trylock()
-{
- OSStatus lStatus = noErr;
- lStatus = MPEnterCriticalRegion(m_mutex, kDurationImmediate);
- assert(lStatus == noErr || lStatus == kMPTimeoutErr);
- return(lStatus == noErr);
-}
-
-bool timed_mutex::do_timedlock(const xtime& xt)
-{
- int microseconds;
- to_microduration(xt, microseconds);
- Duration lDuration = kDurationMicrosecond * microseconds;
-
- OSStatus lStatus = noErr;
- lStatus = safe_enter_critical_region(m_mutex, lDuration, m_mutex_mutex);
- assert(lStatus == noErr || lStatus == kMPTimeoutErr);
-
- return(lStatus == noErr);
-}
-
-void timed_mutex::do_unlock()
-{
- OSStatus lStatus = noErr;
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
-}
-
-void timed_mutex::do_lock(cv_state& /*state*/)
-{
- do_lock();
-}
-
-void timed_mutex::do_unlock(cv_state& /*state*/)
-{
- do_unlock();
-}
-
-#endif
-
-} // namespace boost
-
-// Change Log:
-// 8 Feb 01 WEKEMPF Initial version.

Deleted: branches/bcbboost/libs/thread/src/mutex.inl
==============================================================================
--- branches/bcbboost/libs/thread/src/mutex.inl 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
+++ (empty file)
@@ -1,132 +0,0 @@
-// Copyright (C) 2001-2003
-// William E. Kempf
-//
-// Distributed under 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)
-// boostinspect:nounnamed
-
-namespace {
-
-#if defined(BOOST_HAS_WINTHREADS)
-//:PREVENT THIS FROM BEING DUPLICATED
-typedef BOOL (WINAPI* TryEnterCriticalSection_type)(LPCRITICAL_SECTION lpCriticalSection);
-TryEnterCriticalSection_type g_TryEnterCriticalSection = 0;
-boost::once_flag once_init_TryEnterCriticalSection = BOOST_ONCE_INIT;
-
-void init_TryEnterCriticalSection()
-{
- //TryEnterCriticalSection is only available on WinNT 4.0 or later;
- //it is not available on Win9x.
-
- OSVERSIONINFO version_info = {sizeof(OSVERSIONINFO)};
- ::GetVersionEx(&version_info);
- if (version_info.dwPlatformId == VER_PLATFORM_WIN32_NT &&
- version_info.dwMajorVersion >= 4)
- {
- if (HMODULE kernel_module = GetModuleHandle(TEXT("KERNEL32.DLL")))
- {
- g_TryEnterCriticalSection = reinterpret_cast<TryEnterCriticalSection_type>(
-#if defined(BOOST_NO_ANSI_APIS)
- GetProcAddressW(kernel_module, L"TryEnterCriticalSection")
-#else
- GetProcAddress(kernel_module, "TryEnterCriticalSection")
-#endif
- );
- }
- }
-}
-
-inline bool has_TryEnterCriticalSection()
-{
- boost::call_once(once_init_TryEnterCriticalSection, init_TryEnterCriticalSection);
- return g_TryEnterCriticalSection != 0;
-}
-
-inline HANDLE mutex_cast(void* p)
-{
- return reinterpret_cast<HANDLE>(p);
-}
-
-inline LPCRITICAL_SECTION critical_section_cast(void* p)
-{
- return reinterpret_cast<LPCRITICAL_SECTION>(p);
-}
-
-inline void* new_critical_section()
-{
- try
- {
- LPCRITICAL_SECTION critical_section = new CRITICAL_SECTION;
- if (critical_section == 0) throw boost::thread_resource_error();
- InitializeCriticalSection(critical_section);
- return critical_section;
- }
- catch(...)
- {
- throw boost::thread_resource_error();
- }
-}
-
-inline void* new_mutex(const char* name)
-{
-#if defined(BOOST_NO_ANSI_APIS)
- int const num_wide_chars = ::MultiByteToWideChar(CP_ACP, 0, name, -1, 0, 0);
- LPWSTR const wide_name = (LPWSTR)_alloca( (num_wide_chars+1) * 2 );
- int const res=::MultiByteToWideChar(CP_ACP, 0, name, -1, wide_name, num_wide_chars);
- if(!res)
- throw boost::thread_resource_error();
- HANDLE mutex = CreateMutexW(0, 0, wide_name);
-#else
- HANDLE mutex = CreateMutexA(0, 0, name);
-#endif
- if (mutex == 0 || mutex == INVALID_HANDLE_VALUE) //:xxx (check for both values?)
- throw boost::thread_resource_error();
- return reinterpret_cast<void*>(mutex);
-}
-
-inline void delete_critical_section(void* mutex)
-{
- DeleteCriticalSection(critical_section_cast(mutex));
- delete critical_section_cast(mutex);
-}
-
-inline void delete_mutex(void* mutex)
-{
- int res = 0;
- res = CloseHandle(mutex_cast(mutex));
- assert(res);
-}
-
-inline void wait_critical_section_infinite(void* mutex)
-{
- EnterCriticalSection(critical_section_cast(mutex)); //:xxx Can throw an exception under low memory conditions
-}
-
-inline bool wait_critical_section_try(void* mutex)
-{
- BOOL res = g_TryEnterCriticalSection(critical_section_cast(mutex));
- return res != 0;
-}
-
-inline int wait_mutex(void* mutex, int time)
-{
- unsigned int res = 0;
- res = WaitForSingleObject(mutex_cast(mutex), time);
-//:xxx assert(res != WAIT_FAILED && res != WAIT_ABANDONED);
- return res;
-}
-
-inline void release_critical_section(void* mutex)
-{
- LeaveCriticalSection(critical_section_cast(mutex));
-}
-
-inline void release_mutex(void* mutex)
-{
- BOOL res = FALSE;
- res = ReleaseMutex(mutex_cast(mutex));
- assert(res);
-}
-#endif
-
-}

Deleted: branches/bcbboost/libs/thread/src/once.cpp
==============================================================================
--- branches/bcbboost/libs/thread/src/once.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
+++ (empty file)
@@ -1,50 +0,0 @@
-// Copyright (C) 2001-2003
-// William E. Kempf
-// Copyright (C) 2007 Anthony Williams
-//
-// Distributed under 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)
-
-#include <boost/thread/detail/config.hpp>
-#ifdef BOOST_HAS_MPTASKS
-
-#include <boost/detail/workaround.hpp>
-
-#include <boost/thread/once.hpp>
-#include <cstdio>
-#include <cassert>
-
-#include <Multiprocessing.h>
-
-namespace {
-void *remote_call_proxy(void *pData)
-{
- std::pair<void (*)(), boost::once_flag *> &rData(
- *reinterpret_cast<std::pair<void (*)(), boost::once_flag *> *>(pData));
-
- if(*rData.second == false)
- {
- rData.first();
- *rData.second = true;
- }
-
- return(NULL);
-}
-}
-
-namespace boost {
-
- void call_once(once_flag& flag, void (*func)())
-{
- if(flag == false)
- {
- // all we do here is make a remote call to blue, as blue is not
- // reentrant.
- std::pair<void (*)(), once_flag *> sData(func, &flag);
- MPRemoteCall(remote_call_proxy, &sData, kMPOwningProcessRemoteContext);
- assert(flag == true);
- }
-}
-
-}
-#endif

Deleted: branches/bcbboost/libs/thread/src/recursive_mutex.cpp
==============================================================================
--- branches/bcbboost/libs/thread/src/recursive_mutex.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
+++ (empty file)
@@ -1,1040 +0,0 @@
-// Copyright (C) 2001-2003
-// William E. Kempf
-//
-// Distributed under 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)
-
-#include <boost/thread/detail/config.hpp>
-
-#include <boost/thread/recursive_mutex.hpp>
-#include <boost/thread/xtime.hpp>
-#include <boost/thread/thread.hpp>
-#include <boost/limits.hpp>
-#include <string>
-#include <stdexcept>
-#include <cassert>
-#include "timeconv.inl"
-
-#if defined(BOOST_HAS_WINTHREADS)
-# include <new>
-# include <boost/thread/once.hpp>
-# include <windows.h>
-# include <time.h>
-# include "mutex.inl"
-#elif defined(BOOST_HAS_PTHREADS)
-# include <errno.h>
-#elif defined(BOOST_HAS_MPTASKS)
-# include <MacErrors.h>
-# include "safe.hpp"
-#endif
-
-namespace boost {
-
-#if defined(BOOST_HAS_WINTHREADS)
-
-recursive_mutex::recursive_mutex()
- : m_mutex(0)
- , m_critical_section(false)
- , m_count(0)
-{
- m_critical_section = true;
- if (m_critical_section)
- m_mutex = new_critical_section();
- else
- m_mutex = new_mutex(0);
-}
-
-recursive_mutex::~recursive_mutex()
-{
- if (m_critical_section)
- delete_critical_section(m_mutex);
- else
- delete_mutex(m_mutex);
-}
-
-void recursive_mutex::do_lock()
-{
- if (m_critical_section)
- wait_critical_section_infinite(m_mutex);
- else
- wait_mutex(m_mutex, INFINITE);
-
- if (++m_count > 1)
- {
- if (m_critical_section)
- release_critical_section(m_mutex);
- else
- release_mutex(m_mutex);
- }
-}
-
-void recursive_mutex::do_unlock()
-{
- if (--m_count == 0)
- {
- if (m_critical_section)
- release_critical_section(m_mutex);
- else
- release_mutex(m_mutex);
- }
-}
-
-void recursive_mutex::do_lock(cv_state& state)
-{
- if (m_critical_section)
- wait_critical_section_infinite(m_mutex);
- else
- wait_mutex(m_mutex, INFINITE);
-
- m_count = state;
-}
-
-void recursive_mutex::do_unlock(cv_state& state)
-{
- state = m_count;
- m_count = 0;
-
- if (m_critical_section)
- release_critical_section(m_mutex);
- else
- release_mutex(m_mutex);
-}
-
-recursive_try_mutex::recursive_try_mutex()
- : m_mutex(0)
- , m_critical_section(false)
- , m_count(0)
-{
- m_critical_section = has_TryEnterCriticalSection();
- if (m_critical_section)
- m_mutex = new_critical_section();
- else
- m_mutex = new_mutex(0);
-}
-
-recursive_try_mutex::~recursive_try_mutex()
-{
- if (m_critical_section)
- delete_critical_section(m_mutex);
- else
- delete_mutex(m_mutex);
-}
-
-void recursive_try_mutex::do_lock()
-{
- if (m_critical_section)
- wait_critical_section_infinite(m_mutex);
- else
- wait_mutex(m_mutex, INFINITE);
-
- if (++m_count > 1)
- {
- if (m_critical_section)
- release_critical_section(m_mutex);
- else
- release_mutex(m_mutex);
- }
-}
-
-bool recursive_try_mutex::do_trylock()
-{
- bool res = false;
- if (m_critical_section)
- res = wait_critical_section_try(m_mutex);
- else
- res = wait_mutex(m_mutex, 0) == WAIT_OBJECT_0;
-
- if (res)
- {
- if (++m_count > 1)
- {
- if (m_critical_section)
- release_critical_section(m_mutex);
- else
- release_mutex(m_mutex);
- }
- return true;
- }
- return false;
-}
-
-void recursive_try_mutex::do_unlock()
-{
- if (--m_count == 0)
- {
- if (m_critical_section)
- release_critical_section(m_mutex);
- else
- release_mutex(m_mutex);
- }
-}
-
-void recursive_try_mutex::do_lock(cv_state& state)
-{
- if (m_critical_section)
- wait_critical_section_infinite(m_mutex);
- else
- wait_mutex(m_mutex, INFINITE);
-
- m_count = state;
-}
-
-void recursive_try_mutex::do_unlock(cv_state& state)
-{
- state = m_count;
- m_count = 0;
-
- if (m_critical_section)
- release_critical_section(m_mutex);
- else
- release_mutex(m_mutex);
-}
-
-recursive_timed_mutex::recursive_timed_mutex()
- : m_mutex(0)
- , m_count(0)
-{
- m_mutex = new_mutex(0);
-}
-
-recursive_timed_mutex::~recursive_timed_mutex()
-{
- delete_mutex(m_mutex);
-}
-
-void recursive_timed_mutex::do_lock()
-{
- wait_mutex(m_mutex, INFINITE);
-
- if (++m_count > 1)
- release_mutex(m_mutex);
-}
-
-bool recursive_timed_mutex::do_trylock()
-{
- bool res = wait_mutex(m_mutex, 0) == WAIT_OBJECT_0;
-
- if (res)
- {
- if (++m_count > 1)
- release_mutex(m_mutex);
- return true;
- }
- return false;
-}
-
-bool recursive_timed_mutex::do_timedlock(const xtime& xt)
-{
- for (;;)
- {
- int milliseconds;
- to_duration(xt, milliseconds);
-
- unsigned int res = wait_mutex(m_mutex, milliseconds);
-
- if (res == WAIT_TIMEOUT)
- {
- xtime cur;
- xtime_get(&cur, TIME_UTC);
- if (xtime_cmp(xt, cur) > 0)
- continue;
- }
-
- if (res == WAIT_OBJECT_0)
- {
- if (++m_count > 1)
- release_mutex(m_mutex);
- return true;
- }
-
- return false;
- }
-}
-
-void recursive_timed_mutex::do_unlock()
-{
- if (--m_count == 0)
- release_mutex(m_mutex);
-}
-
-void recursive_timed_mutex::do_lock(cv_state& state)
-{
- wait_mutex(m_mutex, INFINITE);
-
- m_count = state;
-}
-
-void recursive_timed_mutex::do_unlock(cv_state& state)
-{
- state = m_count;
- m_count = 0;
-
- release_mutex(m_mutex);
-}
-
-#elif defined(BOOST_HAS_PTHREADS)
-
-recursive_mutex::recursive_mutex()
- : m_count(0)
-# if !defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- , m_valid_id(false)
-# endif
-{
- pthread_mutexattr_t attr;
- int res = pthread_mutexattr_init(&attr);
- assert(res == 0);
-
-# if defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- res = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
- assert(res == 0);
-# endif
-
- res = pthread_mutex_init(&m_mutex, &attr);
- {
- int res = 0;
- res = pthread_mutexattr_destroy(&attr);
- assert(res == 0);
- }
- if (res != 0)
- throw thread_resource_error();
-
-# if !defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- res = pthread_cond_init(&m_unlocked, 0);
- if (res != 0)
- {
- pthread_mutex_destroy(&m_mutex);
- throw thread_resource_error();
- }
-# endif
-}
-
-recursive_mutex::~recursive_mutex()
-{
- int res = 0;
- res = pthread_mutex_destroy(&m_mutex);
- assert(res == 0);
-
-# if !defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- res = pthread_cond_destroy(&m_unlocked);
- assert(res == 0);
-# endif
-}
-
-void recursive_mutex::do_lock()
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
-# if defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- if (++m_count > 1)
- {
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
- }
-# else
- pthread_t tid = pthread_self();
- if (m_valid_id && pthread_equal(m_thread_id, tid))
- ++m_count;
- else
- {
- while (m_valid_id)
- {
- res = pthread_cond_wait(&m_unlocked, &m_mutex);
- assert(res == 0);
- }
-
- m_thread_id = tid;
- m_valid_id = true;
- m_count = 1;
- }
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
-# endif
-}
-
-void recursive_mutex::do_unlock()
-{
-# if defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- if (--m_count == 0)
- {
- int res = 0;
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
- }
-# else
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- pthread_t tid = pthread_self();
- if (m_valid_id && !pthread_equal(m_thread_id, tid))
- {
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
- throw lock_error();
- }
-
- if (--m_count == 0)
- {
- assert(m_valid_id);
- m_valid_id = false;
-
- res = pthread_cond_signal(&m_unlocked);
- assert(res == 0);
- }
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
-# endif
-}
-
-void recursive_mutex::do_lock(cv_state& state)
-{
-# if defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- m_count = state.count;
-# else
- int res = 0;
-
- while (m_valid_id)
- {
- res = pthread_cond_wait(&m_unlocked, &m_mutex);
- assert(res == 0);
- }
-
- m_thread_id = pthread_self();
- m_valid_id = true;
- m_count = state.count;
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
-# endif
-}
-
-void recursive_mutex::do_unlock(cv_state& state)
-{
-# if !defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- assert(m_valid_id);
- m_valid_id = false;
-
- res = pthread_cond_signal(&m_unlocked);
- assert(res == 0);
-# endif
-
- state.pmutex = &m_mutex;
- state.count = m_count;
- m_count = 0;
-}
-
-recursive_try_mutex::recursive_try_mutex()
- : m_count(0)
-# if !defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- , m_valid_id(false)
-# endif
-{
- pthread_mutexattr_t attr;
- int res = pthread_mutexattr_init(&attr);
- assert(res == 0);
-
-# if defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- res = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
- assert(res == 0);
-# endif
-
- res = pthread_mutex_init(&m_mutex, &attr);
- {
- int res = 0;
- res = pthread_mutexattr_destroy(&attr);
- assert(res == 0);
- }
- if (res != 0)
- throw thread_resource_error();
-
-# if !defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- res = pthread_cond_init(&m_unlocked, 0);
- if (res != 0)
- {
- pthread_mutex_destroy(&m_mutex);
- throw thread_resource_error();
- }
-# endif
-}
-
-recursive_try_mutex::~recursive_try_mutex()
-{
- int res = 0;
- res = pthread_mutex_destroy(&m_mutex);
- assert(res == 0);
-
-# if !defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- res = pthread_cond_destroy(&m_unlocked);
- assert(res == 0);
-# endif
-}
-
-void recursive_try_mutex::do_lock()
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
-# if defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- if (++m_count > 1)
- {
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
- }
-# else
- pthread_t tid = pthread_self();
- if (m_valid_id && pthread_equal(m_thread_id, tid))
- ++m_count;
- else
- {
- while (m_valid_id)
- {
- res = pthread_cond_wait(&m_unlocked, &m_mutex);
- assert(res == 0);
- }
-
- m_thread_id = tid;
- m_valid_id = true;
- m_count = 1;
- }
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
-# endif
-}
-
-bool recursive_try_mutex::do_trylock()
-{
-# if defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- int res = 0;
- res = pthread_mutex_trylock(&m_mutex);
- assert(res == 0 || res == EBUSY);
-
- if (res == 0)
- {
- if (++m_count > 1)
- {
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
- }
- return true;
- }
-
- return false;
-# else
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- bool ret = false;
- pthread_t tid = pthread_self();
- if (m_valid_id && pthread_equal(m_thread_id, tid))
- {
- ++m_count;
- ret = true;
- }
- else if (!m_valid_id)
- {
- m_thread_id = tid;
- m_valid_id = true;
- m_count = 1;
- ret = true;
- }
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
- return ret;
-# endif
-}
-
-void recursive_try_mutex::do_unlock()
-{
-# if defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- if (--m_count == 0)
- {
- int res = 0;
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
- }
-# else
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- pthread_t tid = pthread_self();
- if (m_valid_id && !pthread_equal(m_thread_id, tid))
- {
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
- throw lock_error();
- }
-
- if (--m_count == 0)
- {
- assert(m_valid_id);
- m_valid_id = false;
-
- res = pthread_cond_signal(&m_unlocked);
- assert(res == 0);
- }
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
-# endif
-}
-
-void recursive_try_mutex::do_lock(cv_state& state)
-{
-# if defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- m_count = state.count;
-# else
- int res = 0;
-
- while (m_valid_id)
- {
- res = pthread_cond_wait(&m_unlocked, &m_mutex);
- assert(res == 0);
- }
-
- m_thread_id = pthread_self();
- m_valid_id = true;
- m_count = state.count;
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
-# endif
-}
-
-void recursive_try_mutex::do_unlock(cv_state& state)
-{
-# if !defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- assert(m_valid_id);
- m_valid_id = false;
-
- res = pthread_cond_signal(&m_unlocked);
- assert(res == 0);
-# endif
-
- state.pmutex = &m_mutex;
- state.count = m_count;
- m_count = 0;
-}
-
-recursive_timed_mutex::recursive_timed_mutex()
- : m_valid_id(false), m_count(0)
-{
- int res = 0;
- res = pthread_mutex_init(&m_mutex, 0);
- if (res != 0)
- throw thread_resource_error();
-
- res = pthread_cond_init(&m_unlocked, 0);
- if (res != 0)
- {
- pthread_mutex_destroy(&m_mutex);
- throw thread_resource_error();
- }
-}
-
-recursive_timed_mutex::~recursive_timed_mutex()
-{
- int res = 0;
- res = pthread_mutex_destroy(&m_mutex);
- assert(res == 0);
-
- res = pthread_cond_destroy(&m_unlocked);
- assert(res == 0);
-}
-
-void recursive_timed_mutex::do_lock()
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- pthread_t tid = pthread_self();
- if (m_valid_id && pthread_equal(m_thread_id, tid))
- ++m_count;
- else
- {
- while (m_valid_id)
- {
- res = pthread_cond_wait(&m_unlocked, &m_mutex);
- assert(res == 0);
- }
-
- m_thread_id = tid;
- m_valid_id = true;
- m_count = 1;
- }
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
-}
-
-bool recursive_timed_mutex::do_trylock()
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- bool ret = false;
- pthread_t tid = pthread_self();
- if (m_valid_id && pthread_equal(m_thread_id, tid))
- {
- ++m_count;
- ret = true;
- }
- else if (!m_valid_id)
- {
- m_thread_id = tid;
- m_valid_id = true;
- m_count = 1;
- ret = true;
- }
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
- return ret;
-}
-
-bool recursive_timed_mutex::do_timedlock(const xtime& xt)
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- bool ret = false;
- pthread_t tid = pthread_self();
- if (m_valid_id && pthread_equal(m_thread_id, tid))
- {
- ++m_count;
- ret = true;
- }
- else
- {
- timespec ts;
- to_timespec(xt, ts);
-
- while (m_valid_id)
- {
- res = pthread_cond_timedwait(&m_unlocked, &m_mutex, &ts);
- if (res == ETIMEDOUT)
- break;
- assert(res == 0);
- }
-
- if (!m_valid_id)
- {
- m_thread_id = tid;
- m_valid_id = true;
- m_count = 1;
- ret = true;
- }
- }
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
- return ret;
-}
-
-void recursive_timed_mutex::do_unlock()
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- pthread_t tid = pthread_self();
- if (m_valid_id && !pthread_equal(m_thread_id, tid))
- {
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
- throw lock_error();
- }
-
- if (--m_count == 0)
- {
- assert(m_valid_id);
- m_valid_id = false;
-
- res = pthread_cond_signal(&m_unlocked);
- assert(res == 0);
- }
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
-}
-
-void recursive_timed_mutex::do_lock(cv_state& state)
-{
- int res = 0;
-
- while (m_valid_id)
- {
- res = pthread_cond_wait(&m_unlocked, &m_mutex);
- assert(res == 0);
- }
-
- m_thread_id = pthread_self();
- m_valid_id = true;
- m_count = state.count;
-
- res = pthread_mutex_unlock(&m_mutex);
- assert(res == 0);
-}
-
-void recursive_timed_mutex::do_unlock(cv_state& state)
-{
- int res = 0;
- res = pthread_mutex_lock(&m_mutex);
- assert(res == 0);
-
- assert(m_valid_id);
- m_valid_id = false;
-
- res = pthread_cond_signal(&m_unlocked);
- assert(res == 0);
-
- state.pmutex = &m_mutex;
- state.count = m_count;
- m_count = 0;
-}
-#elif defined(BOOST_HAS_MPTASKS)
-
-using threads::mac::detail::safe_enter_critical_region;
-
-
-recursive_mutex::recursive_mutex()
- : m_count(0)
-{
-}
-
-recursive_mutex::~recursive_mutex()
-{
-}
-
-void recursive_mutex::do_lock()
-{
- OSStatus lStatus = noErr;
- lStatus = safe_enter_critical_region(m_mutex, kDurationForever,
- m_mutex_mutex);
- assert(lStatus == noErr);
-
- if (++m_count > 1)
- {
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
- }
-}
-
-void recursive_mutex::do_unlock()
-{
- if (--m_count == 0)
- {
- OSStatus lStatus = noErr;
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
- }
-}
-
-void recursive_mutex::do_lock(cv_state& state)
-{
- OSStatus lStatus = noErr;
- lStatus = safe_enter_critical_region(m_mutex, kDurationForever,
- m_mutex_mutex);
- assert(lStatus == noErr);
-
- m_count = state;
-}
-
-void recursive_mutex::do_unlock(cv_state& state)
-{
- state = m_count;
- m_count = 0;
-
- OSStatus lStatus = noErr;
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
-}
-
-recursive_try_mutex::recursive_try_mutex()
- : m_count(0)
-{
-}
-
-recursive_try_mutex::~recursive_try_mutex()
-{
-}
-
-void recursive_try_mutex::do_lock()
-{
- OSStatus lStatus = noErr;
- lStatus = safe_enter_critical_region(m_mutex, kDurationForever,
- m_mutex_mutex);
- assert(lStatus == noErr);
-
- if (++m_count > 1)
- {
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
- }
-}
-
-bool recursive_try_mutex::do_trylock()
-{
- OSStatus lStatus = noErr;
- lStatus = MPEnterCriticalRegion(m_mutex, kDurationImmediate);
- assert(lStatus == noErr || lStatus == kMPTimeoutErr);
-
- if (lStatus == noErr)
- {
- if (++m_count > 1)
- {
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
- }
- return true;
- }
- return false;
-}
-
-void recursive_try_mutex::do_unlock()
-{
- if (--m_count == 0)
- {
- OSStatus lStatus = noErr;
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
- }
-}
-
-void recursive_try_mutex::do_lock(cv_state& state)
-{
- OSStatus lStatus = noErr;
- lStatus = safe_enter_critical_region(m_mutex, kDurationForever,
- m_mutex_mutex);
- assert(lStatus == noErr);
-
- m_count = state;
-}
-
-void recursive_try_mutex::do_unlock(cv_state& state)
-{
- state = m_count;
- m_count = 0;
-
- OSStatus lStatus = noErr;
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
-}
-
-recursive_timed_mutex::recursive_timed_mutex()
- : m_count(0)
-{
-}
-
-recursive_timed_mutex::~recursive_timed_mutex()
-{
-}
-
-void recursive_timed_mutex::do_lock()
-{
- OSStatus lStatus = noErr;
- lStatus = safe_enter_critical_region(m_mutex, kDurationForever,
- m_mutex_mutex);
- assert(lStatus == noErr);
-
- if (++m_count > 1)
- {
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
- }
-}
-
-bool recursive_timed_mutex::do_trylock()
-{
- OSStatus lStatus = noErr;
- lStatus = MPEnterCriticalRegion(m_mutex, kDurationImmediate);
- assert(lStatus == noErr || lStatus == kMPTimeoutErr);
-
- if (lStatus == noErr)
- {
- if (++m_count > 1)
- {
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
- }
- return true;
- }
- return false;
-}
-
-bool recursive_timed_mutex::do_timedlock(const xtime& xt)
-{
- int microseconds;
- to_microduration(xt, microseconds);
- Duration lDuration = kDurationMicrosecond * microseconds;
-
- OSStatus lStatus = noErr;
- lStatus = safe_enter_critical_region(m_mutex, lDuration, m_mutex_mutex);
- assert(lStatus == noErr || lStatus == kMPTimeoutErr);
-
- if (lStatus == noErr)
- {
- if (++m_count > 1)
- {
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
- }
- return true;
- }
- return false;
-}
-
-void recursive_timed_mutex::do_unlock()
-{
- if (--m_count == 0)
- {
- OSStatus lStatus = noErr;
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
- }
-}
-
-void recursive_timed_mutex::do_lock(cv_state& state)
-{
- OSStatus lStatus = noErr;
- lStatus = safe_enter_critical_region(m_mutex, kDurationForever,
- m_mutex_mutex);
- assert(lStatus == noErr);
-
- m_count = state;
-}
-
-void recursive_timed_mutex::do_unlock(cv_state& state)
-{
- state = m_count;
- m_count = 0;
-
- OSStatus lStatus = noErr;
- lStatus = MPExitCriticalRegion(m_mutex);
- assert(lStatus == noErr);
-}
-#endif
-
-} // namespace boost
-
-// Change Log:
-// 8 Feb 01 WEKEMPF Initial version.

Modified: branches/bcbboost/libs/thread/src/thread.cpp
==============================================================================
--- branches/bcbboost/libs/thread/src/thread.cpp (original)
+++ branches/bcbboost/libs/thread/src/thread.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -10,6 +10,7 @@
 #include <boost/thread/thread.hpp>
 #include <boost/thread/xtime.hpp>
 #include <boost/thread/condition.hpp>
+#include <boost/thread/locks.hpp>
 #include <cassert>
 
 #if defined(BOOST_HAS_WINTHREADS)

Modified: branches/bcbboost/libs/thread/test/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/thread/test/Jamfile.v2 (original)
+++ branches/bcbboost/libs/thread/test/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -40,6 +40,7 @@
           [ thread-run test_once.cpp ]
           [ thread-run test_xtime.cpp ]
           [ thread-run test_barrier.cpp ]
-# [ thread-run test_read_write_mutex.cpp ]
+ [ thread-run test_shared_mutex.cpp ]
+ [ thread-run test_lock_concept.cpp ]
     ;
 }

Modified: branches/bcbboost/libs/thread/test/test_mutex.cpp
==============================================================================
--- branches/bcbboost/libs/thread/test/test_mutex.cpp (original)
+++ branches/bcbboost/libs/thread/test/test_mutex.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -8,7 +8,7 @@
 
 #include <boost/thread/mutex.hpp>
 #include <boost/thread/recursive_mutex.hpp>
-#include <boost/thread/xtime.hpp>
+#include <boost/thread/thread_time.hpp>
 #include <boost/thread/condition.hpp>
 
 #include <boost/test/unit_test.hpp>
@@ -29,7 +29,7 @@
 
         // Test the lock's constructors.
         {
- lock_type lock(mutex, false);
+ lock_type lock(mutex, boost::defer_lock);
             BOOST_CHECK(!lock);
         }
         lock_type lock(mutex);
@@ -69,10 +69,10 @@
             BOOST_CHECK(lock ? true : false);
         }
         {
- try_lock_type lock(mutex, false);
+ try_lock_type lock(mutex, boost::defer_lock);
             BOOST_CHECK(!lock);
         }
- try_lock_type lock(mutex, true);
+ try_lock_type lock(mutex);
         BOOST_CHECK(lock ? true : false);
 
         // Construct and initialize an xtime for a fast time out.
@@ -110,16 +110,16 @@
         // Test the lock's constructors.
         {
             // Construct and initialize an xtime for a fast time out.
- boost::xtime xt = delay(0, 100);
+ boost::system_time xt = boost::get_system_time()+boost::posix_time::milliseconds(100);
 
             timed_lock_type lock(mutex, xt);
             BOOST_CHECK(lock ? true : false);
         }
         {
- timed_lock_type lock(mutex, false);
+ timed_lock_type lock(mutex, boost::defer_lock);
             BOOST_CHECK(!lock);
         }
- timed_lock_type lock(mutex, true);
+ timed_lock_type lock(mutex);
         BOOST_CHECK(lock ? true : false);
 
         // Construct and initialize an xtime for a fast time out.
@@ -139,8 +139,8 @@
         BOOST_CHECK(lock ? true : false);
         lock.unlock();
         BOOST_CHECK(!lock);
- xt = delay(0, 100);
- BOOST_CHECK(lock.timed_lock(xt));
+ boost::system_time target = boost::get_system_time()+boost::posix_time::milliseconds(100);
+ BOOST_CHECK(lock.timed_lock(target));
         BOOST_CHECK(lock ? true : false);
     }
 };

Modified: branches/bcbboost/libs/thread/test/test_once.cpp
==============================================================================
--- branches/bcbboost/libs/thread/test/test_once.cpp (original)
+++ branches/bcbboost/libs/thread/test/test_once.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -49,6 +49,103 @@
     BOOST_CHECK_EQUAL(var_to_init,1);
 }
 
+int var_to_init_with_functor=0;
+
+struct increment_value
+{
+ int* value;
+ explicit increment_value(int* value_):
+ value(value_)
+ {}
+
+ void operator()() const
+ {
+ boost::mutex::scoped_lock lock(m);
+ ++(*value);
+ }
+};
+
+void call_once_with_functor()
+{
+ unsigned const loop_count=100;
+ int my_once_value=0;
+ static boost::once_flag functor_flag=BOOST_ONCE_INIT;
+ for(unsigned i=0;i<loop_count;++i)
+ {
+ boost::call_once(functor_flag, increment_value(&var_to_init_with_functor));
+ my_once_value=var_to_init_with_functor;
+ if(my_once_value!=1)
+ {
+ break;
+ }
+ }
+ boost::mutex::scoped_lock lock(m);
+ BOOST_CHECK_EQUAL(my_once_value, 1);
+}
+
+void test_call_once_arbitrary_functor()
+{
+ unsigned const num_threads=100;
+ boost::thread_group group;
+
+ for(unsigned i=0;i<num_threads;++i)
+ {
+ group.create_thread(&call_once_with_functor);
+ }
+ group.join_all();
+ BOOST_CHECK_EQUAL(var_to_init_with_functor,1);
+}
+
+
+struct throw_before_third_pass
+{
+ struct my_exception
+ {};
+
+ static unsigned pass_counter;
+
+ void operator()() const
+ {
+ boost::mutex::scoped_lock lock(m);
+ ++pass_counter;
+ if(pass_counter<3)
+ {
+ throw my_exception();
+ }
+ }
+};
+
+unsigned throw_before_third_pass::pass_counter=0;
+unsigned exception_counter=0;
+
+void call_once_with_exception()
+{
+ static boost::once_flag functor_flag=BOOST_ONCE_INIT;
+ try
+ {
+ boost::call_once(functor_flag, throw_before_third_pass());
+ }
+ catch(throw_before_third_pass::my_exception)
+ {
+ boost::mutex::scoped_lock lock(m);
+ ++exception_counter;
+ }
+}
+
+void test_call_once_retried_on_exception()
+{
+ unsigned const num_threads=100;
+ boost::thread_group group;
+
+ for(unsigned i=0;i<num_threads;++i)
+ {
+ group.create_thread(&call_once_with_exception);
+ }
+ group.join_all();
+ BOOST_CHECK_EQUAL(throw_before_third_pass::pass_counter,3);
+ BOOST_CHECK_EQUAL(exception_counter,2);
+}
+
 
 boost::unit_test_framework::test_suite* init_unit_test_suite(int, char*[])
 {
@@ -56,6 +153,8 @@
         BOOST_TEST_SUITE("Boost.Threads: call_once test suite");
 
     test->add(BOOST_TEST_CASE(test_call_once));
+ test->add(BOOST_TEST_CASE(test_call_once_arbitrary_functor));
+ test->add(BOOST_TEST_CASE(test_call_once_retried_on_exception));
 
     return test;
 }

Modified: branches/bcbboost/libs/wave/build/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/wave/build/Jamfile.v2 (original)
+++ branches/bcbboost/libs/wave/build/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -33,6 +33,7 @@
     $(SOURCES)
     ../../filesystem/build//boost_filesystem
     ../../thread/build//boost_thread
+ ../../date_time/build//boost_date_time
     ;
 
 for local source in $(SOURCES)

Modified: branches/bcbboost/libs/wave/samples/advanced_hooks/build/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/wave/samples/advanced_hooks/build/Jamfile.v2 (original)
+++ branches/bcbboost/libs/wave/samples/advanced_hooks/build/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -11,5 +11,7 @@
 exe advanced_hooks
     : ../advanced_hooks.cpp
         /boost/wave//boost_wave
+ /boost/thread//boost_thread
+ /boost/date_time//boost_date_time
     ;
 

Modified: branches/bcbboost/libs/wave/samples/cpp_tokens/build/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/wave/samples/cpp_tokens/build/Jamfile.v2 (original)
+++ branches/bcbboost/libs/wave/samples/cpp_tokens/build/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -9,7 +9,7 @@
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 SOURCES =
- ../cpp_tokens
+ ../cpp_tokens
         ../instantiate_cpp_exprgrammar
         ../instantiate_cpp_grammar
         ../instantiate_cpp_literalgrs
@@ -24,6 +24,8 @@
         /boost/program_options//boost_program_options
         /boost/filesystem//boost_filesystem
         /boost/system//boost_system
+ /boost/thread//boost_thread
+ /boost/date_time//boost_date_time
     ;
 
 for local source in $(SOURCES)

Modified: branches/bcbboost/libs/wave/samples/hannibal/build/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/wave/samples/hannibal/build/Jamfile.v2 (original)
+++ branches/bcbboost/libs/wave/samples/hannibal/build/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -14,5 +14,7 @@
         /boost/filesystem//boost_filesystem
         /boost/program_options//boost_program_options
         /boost/system//boost_system
+ /boost/thread//boost_thread
+ /boost/date_time//boost_date_time
     ;
 

Modified: branches/bcbboost/libs/wave/samples/lexed_tokens/build/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/wave/samples/lexed_tokens/build/Jamfile.v2 (original)
+++ branches/bcbboost/libs/wave/samples/lexed_tokens/build/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -13,5 +13,7 @@
         /boost/wave//boost_wave
         /boost/filesystem//boost_filesystem
         /boost/system//boost_system
+ /boost/thread//boost_thread
+ /boost/date_time//boost_date_time
     ;
 

Modified: branches/bcbboost/libs/wave/samples/list_includes/build/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/wave/samples/list_includes/build/Jamfile.v2 (original)
+++ branches/bcbboost/libs/wave/samples/list_includes/build/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -9,7 +9,7 @@
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 SOURCES =
- ../list_includes.cpp
+ ../list_includes.cpp
         ../instantiate_cpp_exprgrammar
         ../instantiate_cpp_grammar
         ../instantiate_cpp_literalgrs
@@ -24,6 +24,8 @@
         /boost/program_options//boost_program_options
         /boost/filesystem//boost_filesystem
         /boost/system//boost_system
+ /boost/thread//boost_thread
+ /boost/date_time//boost_date_time
     ;
 
 for local source in $(SOURCES)

Modified: branches/bcbboost/libs/wave/samples/quick_start/build/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/wave/samples/quick_start/build/Jamfile.v2 (original)
+++ branches/bcbboost/libs/wave/samples/quick_start/build/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -11,5 +11,8 @@
 exe quick_start
     : ../quick_start.cpp
         /boost/wave//boost_wave
+ /boost/system//boost_system
+ /boost/thread//boost_thread
+ /boost/date_time//boost_date_time
     ;
 

Modified: branches/bcbboost/libs/wave/samples/real_positions/build/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/wave/samples/real_positions/build/Jamfile.v2 (original)
+++ branches/bcbboost/libs/wave/samples/real_positions/build/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -20,5 +20,6 @@
         /boost/filesystem//boost_filesystem
         /boost/system//boost_system
         /boost/thread//boost_thread
+ /boost/date_time//boost_date_time
     ;
 

Modified: branches/bcbboost/libs/wave/samples/token_statistics/build/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/wave/samples/token_statistics/build/Jamfile.v2 (original)
+++ branches/bcbboost/libs/wave/samples/token_statistics/build/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -22,12 +22,15 @@
         /boost/program_options//boost_program_options
         /boost/filesystem//boost_filesystem
         /boost/system//boost_system
+ /boost/thread//boost_thread
+ /boost/date_time//boost_date_time
     ;
 
 for local source in $(SOURCES)
 {
     local requirements ;
     requirements += <toolset-msvc:version>7.1:<rtti>off ; # workaround for compiler bug
+ requirements += <toolset-msvc:version>7.1_stlport4:<rtti>off ;
     obj $(source) : $(source).cpp : $(requirements) ;
 }
 

Modified: branches/bcbboost/libs/wave/samples/waveidl/build/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/wave/samples/waveidl/build/Jamfile.v2 (original)
+++ branches/bcbboost/libs/wave/samples/waveidl/build/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -20,9 +20,12 @@
         
 exe waveidl
     :
- $(SOURCES)
+ $(SOURCES)
         /boost/wave//boost_wave
         /boost/program_options//boost_program_options
+ /boost/system//boost_system
+ /boost/thread//boost_thread
+ /boost/date_time//boost_date_time
     ;
 
 for local source in $(SOURCES)

Modified: branches/bcbboost/libs/wave/test/build/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/wave/test/build/Jamfile.v2 (original)
+++ branches/bcbboost/libs/wave/test/build/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -64,6 +64,7 @@
                 /boost/filesystem//boost_filesystem
                 /boost/system//boost_system
                 /boost/thread//boost_thread
+ /boost/date_time//boost_date_time
             :
             # arguments
                 $(TESTWAVE_ARGUMENTS)
@@ -90,6 +91,7 @@
                 /boost/filesystem//boost_filesystem/<link>static
                 /boost/system//boost_system/<link>static
                 /boost/thread//boost_thread/<link>static
+ /boost/date_time//boost_date_time/<link>static
             :
             # arguments
                 $(TESTWAVE_ARGUMENTS)
@@ -117,6 +119,7 @@
                 /boost/filesystem//boost_filesystem
                 /boost/thread//boost_thread
                 /boost/system//boost_system
+ /boost/date_time//boost_date_time
             :
             # arguments
             :
@@ -139,6 +142,7 @@
                 /boost/filesystem//boost_filesystem
                 /boost/thread//boost_thread
                 /boost/system//boost_system
+ /boost/date_time//boost_date_time
             :
             # arguments
             :

Modified: branches/bcbboost/libs/xpressive/doc/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/xpressive/doc/Jamfile.v2 (original)
+++ branches/bcbboost/libs/xpressive/doc/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -12,7 +12,8 @@
     :
         <doxygen:param>EXTRACT_ALL=YES
         <doxygen:param>"PREDEFINED=\"BOOST_XPRESSIVE_DOXYGEN_INVOKED\" \\
- \"BOOST_DEDUCED_TYPENAME=typename\""
+ \"BOOST_DEDUCED_TYPENAME=typename\" \\
+ \"BOOST_XPR_NONDEDUCED_TYPE_(X)=X\""
         <doxygen:param>HIDE_UNDOC_MEMBERS=NO
         <doxygen:param>EXTRACT_PRIVATE=NO
         <doxygen:param>ENABLE_PREPROCESSING=YES

Modified: branches/bcbboost/libs/xpressive/doc/acknowledgements.qbk
==============================================================================
--- branches/bcbboost/libs/xpressive/doc/acknowledgements.qbk (original)
+++ branches/bcbboost/libs/xpressive/doc/acknowledgements.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -18,10 +18,17 @@
 regarding the behavior of nested regex objects, and
 [@http://boost.org/people/dave_abrahams.htm Dave Abrahams] for his suggestions
 regarding the regex domain-specific embedded language. Noel Belcourt helped
-porting xpressive to the Metrowerks CodeWarrior compiler.
+porting xpressive to the Metrowerks CodeWarrior compiler. Markus
+Sch'''&ouml;'''pflin helped to track down a bug on HP Tru64, and Steven
+Watanabe suggested the fix.
 
-I would also like to thank
-[@http://boost.org/people/thomas_witt.html Thomas Witt] for acting as
-xpressive's review manager.
+Special thanks are due to David Jenkins who contributed both ideas, code and
+documentation for xpressive's semantic actions, symbol tables and attributes.
+Xpressive's ternary search trie implementation is David's, as is the number
+parser example in [^libs/xpressive/example/numbers.cpp] and the documentation
+for symbol tables and attributes.
+
+Finally, I would like to thank [@http://boost.org/people/thomas_witt.html Thomas Witt]
+for acting as xpressive's review manager.
 
 [endsect]

Modified: branches/bcbboost/libs/xpressive/doc/actions.qbk
==============================================================================
--- branches/bcbboost/libs/xpressive/doc/actions.qbk (original)
+++ branches/bcbboost/libs/xpressive/doc/actions.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -11,14 +11,14 @@
 
 Imagine you want to parse an input string and build a `std::map<>` from it. For
 something like that, matching a regular expression isn't enough. You want to
-/do something/ when parts of your regular expression matches. Xpressive lets
+/do something/ when parts of your regular expression match. Xpressive lets
 you attach semantic actions to parts of your static regular expressions. This
 section shows you how.
 
 [h2 Semantic Actions]
 
 Consider the following code, which uses xpressive's semantic actions to parse
-of string of word/integer pairs and stuffs them into a `std::map<>`. It is
+a string of word/integer pairs and stuffs them into a `std::map<>`. It is
 described below.
 
     #include <string>
@@ -37,7 +37,7 @@
         sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) )
             [ ref(result)[s1] = as<int>(s2) ];
         
- // Match one or more word/iteger pairs, separated
+ // Match one or more word/integer pairs, separated
         // by whitespace.
         sregex rx = pair >> *(+_s >> pair);
 
@@ -85,8 +85,404 @@
 say `ref(result)[s1]`, even though `result` doesn't have an `operator[]` that
 would accept `s1`.]
 
+In addition to the sub-match placeholders `s1`, `s2`, etc., you can also use
+the placeholder `_` within an action to refer back to the string matched by
+the sub-expression to which the action is attached. For instance, you can use
+the following regex to match a bunch of digits, interpret them as an integer
+and assign the result to a local variable:
+
+ int i = 0;
+ // Here, _ refers back to all the
+ // characters matched by (+_d)
+ sregex rex = (+_d)[ ref(i) = as<int>(_) ];
+
+[h3 Lazy Action Execution]
+
+What does it mean, exactly, to attach an action to part of a regular expression
+and perform a match? When does the action execute? If the action is part of a
+repeated sub-expression, does the action execute once or many times? And if the
+sub-expression initially matches, but ultimately fails because the rest of the
+regular expression fails to match, is the action executed at all?
+
+The answers are that actions are executed /lazily/. When a sub-expression
+matches a string, its action is placed on a queue, along with the current
+values of any sub-matches to which the action refers. If the match algorithm
+must backtrack, actions are popped off the queue as necessary. Only after the
+entire regex has matched successfully are the actions actually exeucted. They
+are executed all at once, in the order in which they were added to the queue,
+as the last step before _regex_match_ returns.
+
+For example, consider the following regex that increments a counter whenever
+it finds a digit.
+
+ int i = 0;
+ std::string str("1!2!3?");
+ // count the exciting digits, but not the
+ // questionable ones.
+ sregex rex = +( _d [ ++ref(i) ] >> '!' );
+ regex_search(str, rex);
+ assert( i == 2 );
+
+The action `++ref(i)` is queued three times: once for each found digit. But
+it is only /executed/ twice: once for each digit that precedes a `'!'`
+character. When the `'?'` character is encountered, the match algorithm
+backtracks, removing the final action from the queue.
+
+[h3 Lazy Functions]
+
+So far, we've seen how to write semantic actions consisting of variables and
+operators. But what if you want to be able to call a function from a semantic
+action? Xpressive provides a mechanism to do this.
 
+The first step is to define a function object type. Here, for instance, is a
+function object type that calls `push()` on its argument:
 
+ struct push_impl
+ {
+ // Result type, needed for tr1::result_of
+ typedef void result_type;
 
-[endsect]
+ template<typename Sequence, typename Value>
+ void operator()(Sequence &seq, Value const &val) const
+ {
+ seq.push(val);
+ }
+ };
+
+The next step is to use xpressive's `function<>` template to define a function
+object named `push`:
+
+ // Global "push" function object.
+ function<push_impl>::type const push = {{}};
+
+The initialization looks a bit odd, but this is because `push` is being
+statically initialized. That means it doesn't need to be constructed
+at runtime. We can use `push` in semantic actions as follows:
+
+ std::stack<int> ints;
+ // Match digits, cast them to an int
+ // and push it on the stack.
+ sregex rex = (+_d)[push(ref(ints), as<int>(_))];
+
+You'll notice that doing it this way causes member function invocations
+to look like ordinary function invocations. You can choose to write your
+semantic action in a different way that makes it look a bit more like
+a member function call:
+
+ sregex rex = (+_d)[ref(ints)->*push(as<int>(_))];
+
+Xpressive recognizes the use of the `->*` and treats this expression
+exactly the same as the one above.
+
+When your function object must return a type that depends on its
+arguments, you can use a `result<>` member template instead of the
+`result_type` typedef. Here, for example, is a `first` function object
+that returns the `first` member of a `std::pair<>` or _sub_match_:
+
+ // Function object that returns the
+ // first element of a pair.
+ struct first_impl
+ {
+ template<typename Sig> struct result {};
+
+ template<typename This, typename Pair>
+ struct result<This(Pair)>
+ {
+ typedef typename remove_reference<Pair>
+ ::type::first_type type;
+ };
+
+ template<typename Pair>
+ typename Pair::first_type
+ operator()(Pair const &p) const
+ {
+ return p.first;
+ }
+ };
+
+ // OK, use as first(s1) to get the begin iterator
+ // of the sub-match referred to by s1.
+ function<first_impl> const first = {{}};
+
+[h3 Referring to Local Variables]
+
+As we've seen in the examples above, we can refer to local variables within
+an actions using `xpressive::ref()`. Any such variables are held by reference
+by the regular expression, and care should be taken to avoid letting those
+references dangle. For instance, in the following code, the reference to `i`
+is left to dangle when `bad_voodoo()` returns:
+
+ sregex bad_voodoo()
+ {
+ int i = 0;
+ sregex rex = +( _d [ ++ref(i) ] >> '!' );
+ // ERROR! rex refers by reference to a local
+ // variable, which will dangle after bad_voodoo()
+ // returns.
+ return rex;
+ }
+
+When writing semantic actions, it is your responsibility to make sure that
+all the references do not dangle. One way to do that would be to make the
+variables shared pointers that are held by the regex by value.
+
+ sregex good_voodoo(boost::shared_ptr<int> pi)
+ {
+ // Use val() to hold the shared_ptr by value:
+ sregex rex = +( _d [ ++*val(pi) ] >> '!' );
+ // OK, rex holds a reference count to the integer.
+ return rex;
+ }
+
+In the above code, we use `xpressive::val()` to hold the shared pointer by
+value. That's not normally necessary because local variables appearing in
+actions are held by value by default, but in this case, it is necessary. Had
+we written the action as `++*pi`, it would have executed immediately. That's
+because `++*pi` is not an expression template, but `++*val(pi)` is.
+
+It can be tedious to wrap all your variables in `ref()` and `val()` in your
+semantic actions. Xpressive provides the `reference<>` and `value<>` templates
+to make things easier. The following table shows the equivalencies:
+
+[table reference<> and value<>
+[[This ...][... is equivalent to this ...]]
+[[``int i = 0;
+
+sregex rex = +( _d [ ++ref(i) ] >> '!' );``][``int i = 0;
+reference<int> ri(i);
+sregex rex = +( _d [ ++ri ] >> '!' );``]]
+[[``boost::shared_ptr<int> pi(new int(0));
+
+sregex rex = +( _d [ ++*val(pi) ] >> '!' );``][``boost::shared_ptr<int> pi(new int(0));
+value<boost::shared_ptr<int> > vpi(pi);
+sregex rex = +( _d [ ++*vpi ] >> '!' );``]]
+]
+
+As you can see, when using `reference<>`, you need to first declare a local
+variable and then declare a `reference<>` to it. These two steps can be combined
+into one using `local<>`.
+
+[table local<> vs. reference<>
+[[This ...][... is equivalent to this ...]]
+[[``local<int> i(0);
+
+sregex rex = +( _d [ ++i ] >> '!' );``][``int i = 0;
+reference<int> ri(i);
+sregex rex = +( _d [ ++ri ] >> '!' );``]]
+]
+
+We can use `local<>` to rewrite the above example as follows:
+
+ local<int> i(0);
+ std::string str("1!2!3?");
+ // count the exciting digits, but not the
+ // questionable ones.
+ sregex rex = +( _d [ ++i ] >> '!' );
+ regex_search(str, rex);
+ assert( i.get() == 2 );
+
+Notice that we use `local<>::get()` to access the value of the local
+variable. Also, beware that `local<>` can be used to create a dangling
+reference, just as `reference<>` can.
+
+[h3 Referring to Non-Local Variables]
+
+In the beginning of this
+section, we used a regex with a semantic action to parse a string of
+word/integer pairs and stuff them into a `std::map<>`. That required that
+the map and the regex be defined together and used before either could
+go out of scope. What if we wanted to define the regex once and use it
+to fill lots of different maps? We would rather pass the map into the
+_regex_match_ algorithm rather than embed a reference to it directly in
+the regex object. What we can do instead is define a placeholder and use
+that in the semantic action instead of the map itself. Later, when we
+call one of the regex algorithms, we can bind the reference to an actual
+map object. The following code shows how.
+
+ // Define a placeholder for a map object:
+ placeholder<std::map<std::string, int> > _map;
+
+ // Match a word and an integer, separated by =>,
+ // and then stuff the result into a std::map<>
+ sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) )
+ [ _map[s1] = as<int>(s2) ];
+
+ // Match one or more word/integer pairs, separated
+ // by whitespace.
+ sregex rx = pair >> *(+_s >> pair);
+
+ // The string to parse
+ std::string str("aaa=>1 bbb=>23 ccc=>456");
+
+ // Here is the actual map to fill in:
+ std::map<std::string, int> result;
+
+ // Bind the _map placeholder to the actual map
+ smatch what;
+ what.let( _map = result );
+
+ // Execute the match and fill in result map
+ if(regex_match(str, what, rx))
+ {
+ std::cout << result["aaa"] << '\n';
+ std::cout << result["bbb"] << '\n';
+ std::cout << result["ccc"] << '\n';
+ }
+
+This program displays:
+
+[pre
+1
+23
+456
+]
+
+We use `placeholder<>` here to define `_map`, which stands in for a
+`std::map<>` variable. We can use the placeholder in the semantic action as if
+it were a map. Then, we define a _match_results_ struct and bind an actual map
+to the placeholder with "`what.let( _map = result );`". The _regex_match_ call
+behaves as if the placeholder in the semantic action had been replaced with a
+reference to `result`.
+
+[note Placeholders in semantic actions are not /actually/ replaced at runtime
+with references to variables. The regex object is never mutated in any way
+during any of the regex algorithms, so they are safe to use in multiple
+threads.]
+
+The syntax for late-bound action arguments is a little different if you are
+using _regex_iterator_ or _regex_token_iterator_. The regex iterators accept
+an extra constructor parameter for specifying the argument bindings. There is
+a `let()` function that you can use to bind variables to their placeholders.
+The following code demonstrates how.
+
+ // Define a placeholder for a map object:
+ placeholder<std::map<std::string, int> > _map;
+
+ // Match a word and an integer, separated by =>,
+ // and then stuff the result into a std::map<>
+ sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) )
+ [ _map[s1] = as<int>(s2) ];
+
+ // The string to parse
+ std::string str("aaa=>1 bbb=>23 ccc=>456");
+
+ // Here is the actual map to fill in:
+ std::map<std::string, int> result;
+
+ // Create a regex_iterator to find all the matches
+ sregex_iterator it(str.begin(), str.end(), pair, let(_map=result));
+ sregex_iterator end;
+
+ // step through all the matches, and fill in
+ // the result map
+ while(it != end)
+ ++it;
+
+ std::cout << result["aaa"] << '\n';
+ std::cout << result["bbb"] << '\n';
+ std::cout << result["ccc"] << '\n';
+
+This program displays:
+
+[pre
+1
+23
+456
+]
+
+[h2 User-Defined Assertions]
 
+You are probably already familiar with regular expression /assertions/. In
+Perl, some examples are the [^^] and [^$] assertions, which you can use to
+match the beginning and end of a string, respectively. Xpressive lets you
+define your own assertions. A custom assertion is a contition which must be
+true at a point in the match in order for the match to succeed. You can check
+a custom assertion with xpressive's _check_ function.
+
+There are a couple of ways to define a custom assertion. The simplest is to
+use a function object. Let's say that you want to ensure that a sub-expression
+matches a sub-string that is either 3 or 6 characters long. The following
+struct defines such a predicate:
+
+ // A predicate that is true IFF a sub-match is
+ // either 3 or 6 characters long.
+ struct three_or_six
+ {
+ bool operator()(ssub_match const &sub) const
+ {
+ return sub.length() == 3 || sub.length() == 6;
+ }
+ };
+
+You can use this predicate within a regular expression as follows:
+
+ // match words of 3 characters or 6 characters.
+ sregex rx = (bow >> +_w >> eow)[ check(three_or_six()) ] ;
+
+The above regular expression will find whole words that are either 3 or 6
+characters long. The `three_or_six` predicate accepts a _sub_match_ that refers
+back to the part of the string matched by the sub-expression to which the
+custom assertion is attached.
+
+[note The custom assertion participates in determining whether the match
+succeeds or fails. Unlike actions, which execute lazily, custom assertions
+execute immediately while the regex engine is searching for a match.]
+
+Custom assertions can also be defined inline using the same syntax as for
+semantic actions. Below is the same custom assertion written inline:
+
+ // match words of 3 characters or 6 characters.
+ sregex rx = (bow >> +_w >> eow)[ check(length(_)==3 || length(_)==6) ] ;
+
+In the above, `length()` is a lazy function that calls the `length()` member
+function of its argument, and `_` is a placeholder that receives the
+`sub_match`.
+
+Once you get the hang of writing custom assertions inline, they can be
+very powerful. For example, you can write a regular expression that
+only matches valid dates (for some suitably liberal definition of the
+term ["valid]).
+
+ int const days_per_month[] =
+ {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 31, 31};
+
+ mark_tag month(1), day(2);
+ // find a valid date of the form month/day/year.
+ sregex date =
+ (
+ // Month must be between 1 and 12 inclusive
+ (month= _d >> !_d) [ check(as<int>(_) >= 1
+ && as<int>(_) <= 12) ]
+ >> '/'
+ // Day must be between 1 and 31 inclusive
+ >> (day= _d >> !_d) [ check(as<int>(_) >= 1
+ && as<int>(_) <= 31) ]
+ >> '/'
+ // Only consider years between 1970 and 2038
+ >> (_d >> _d >> _d >> _d) [ check(as<int>(_) >= 1970
+ && as<int>(_) <= 2038) ]
+ )
+ // Ensure the month actually has that many days!
+ [ check( ref(days_per_month)[as<int>(month)-1] >= as<int>(day) ) ]
+ ;
+
+ smatch what;
+ std::string str("99/99/9999 2/30/2006 2/28/2006");
+
+ if(regex_search(str, what, date))
+ {
+ std::cout << what[0] << std::endl;
+ }
+
+The above program prints out the following:
+
+[pre
+2/28/2006
+]
+
+Notice how the inline custom assertions are used to range-check the values for
+the month, day and year. The regular expression doesn't match `"99/99/9999"` or
+`"2/30/2006"` because they are not valid dates. (There is no 99th month, and
+February doesn't have 30 days.)
+
+[endsect]

Modified: branches/bcbboost/libs/xpressive/doc/history.qbk
==============================================================================
--- branches/bcbboost/libs/xpressive/doc/history.qbk (original)
+++ branches/bcbboost/libs/xpressive/doc/history.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -13,12 +13,13 @@
 
 * Semantic actions
 * Custom assertions
-* Better errors for invalid static regexes
-* Dynamic regex grammars
 * Named captures
+* Dynamic regex grammars
 * Recursive dynamic regexes with [^(?R)] construct
+* Support for searching non-character data
+* Better errors for invalid static regexes
 * Range-based regex algorithm interface
-* `format_perl`, `format_sed`, and `format_all`
+* `match_flag_type::format_perl`, `match_flag_type::format_sed`, and `match_flag_type::format_all`
 * `operator+(std::string, sub_match<>)` and variants
 * Version 2 regex traits get `tolower()` and `toupper()`
 

Modified: branches/bcbboost/libs/xpressive/doc/installation.qbk
==============================================================================
--- branches/bcbboost/libs/xpressive/doc/installation.qbk (original)
+++ branches/bcbboost/libs/xpressive/doc/installation.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -22,13 +22,13 @@
 version in the File Vault is always guaranteed to work with the latest official
 Boost release.
 
-The third way is through anonymous CVS via the Boost project on SourceForge.net.
-Just go to [@http://sf.net/projects/boost] and follow the instructions there for
-anonymous CVS access. The version in Boost CVS is unstable.
+The third way is by directly accessing the Boost Subversion repository.
+Just go to [@http://svn.boost.org/trac/boost/] and follow the instructions there for
+anonymous Subversion access. The version in Boost Subversion is unstable.
 
 [h2 Building with xpressive]
 
-xpressive is a header-only template library, which means you don't need to alter
+Xpressive is a header-only template library, which means you don't need to alter
 your build scripts or link to any separate lib file to use it. All you need to
 do is `#include <boost/xpressive/xpressive.hpp>`. If you are only using static
 regexes, you can improve compile times by only including `xpressive_static.hpp`.
@@ -37,23 +37,25 @@
 
 [h2 Requirements]
 
-xpressive requires Boost version 1.33.1 or higher.
+Xpressive requires Boost version 1.34.1 or higher.
 
 [h2 Supported Compilers]
 
 Currently, Boost.Xpressive is known to work on the following compilers:
 
 * Visual C++ 7.1 and higher
-* GNU C++ 3.2 and higher
+* GNU C++ 3.4 and higher
 * Intel for Linux 8.1 and higher
-* Intel for Windows 8.1 and higher
-* tru64cxx 65 and higher
-* QNX qcc 3.3 and higher
+* Intel for Windows 10 and higher
+* tru64cxx 71 and higher
 * MinGW 3.4 and higher
-* Metrowerks CodeWarrior 9.4 and higher
+* HP C/aC++ A.06.14
+
+[/ * QNX qcc 3.3 and higher]
+[/ * Metrowerks CodeWarrior 9.4 and higher]
 
 Check the latest tests results at Boost's
-[@http://engineering.meta-comm.com/boost-regression/CVS-HEAD/developer/xpressive.html
+[@http://beta.boost.org/development/tests/trunk/developer/xpressive.html
 Regression Results Page].
 
 [note Please send any questions, comments and bug reports to eric <at>

Modified: branches/bcbboost/libs/xpressive/doc/traits.qbk
==============================================================================
--- branches/bcbboost/libs/xpressive/doc/traits.qbk (original)
+++ branches/bcbboost/libs/xpressive/doc/traits.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -53,7 +53,7 @@
   cpp_regex_traits<char> cpptraits(loc);
   sregex cpprx1 = imbue(cpptraits)( +_w );
 
- // A sharthand for above
+ // A shorthand for above
   sregex cpprx2 = imbue(loc)( +_w );
 
 The `imbue()` pattern modifier must wrap the entire pattern. It is an error to `imbue` only

Modified: branches/bcbboost/libs/xpressive/doc/xpressive.qbk
==============================================================================
--- branches/bcbboost/libs/xpressive/doc/xpressive.qbk (original)
+++ branches/bcbboost/libs/xpressive/doc/xpressive.qbk 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -56,6 +56,7 @@
 [def _match_flag_type_ [^[enumref boost::xpressive::regex_constants::match_flag_type match_flag_type]]]
 [def _error_type_ [^[enumref boost::xpressive::regex_constants::error_type error_type]]]
 [def _regex_compile_ [^[memberref boost::xpressive::basic_regex::compile basic_regex<>::compile()]]]
+[def _check_ [^[funcref boost::xpressive::check check()]]]
 
 [include preface.qbk]
 
@@ -95,6 +96,8 @@
 
 [include actions.qbk]
 
+[include symbols.qbk]
+
 [include traits.qbk]
 
 [include tips_n_tricks.qbk]

Modified: branches/bcbboost/libs/xpressive/example/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/xpressive/example/Jamfile.v2 (original)
+++ branches/bcbboost/libs/xpressive/example/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -14,3 +14,10 @@
     :
         <include>$(BOOST_ROOT)
     ;
+
+exe numbers
+ :
+ numbers.cpp
+ :
+ <include>$(BOOST_ROOT)
+ ;

Copied: branches/bcbboost/libs/xpressive/example/numbers.cpp (from r39819, /trunk/libs/xpressive/example/numbers.cpp)
==============================================================================
--- /trunk/libs/xpressive/example/numbers.cpp (original)
+++ branches/bcbboost/libs/xpressive/example/numbers.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -51,39 +51,39 @@
         map_list_of("zero",0)("dozen",12)("score",20);
 
     // n is the integer result
- long n = 0;
+ local<long> n(0);
     // temp stores intermediate values
- long temp = 0;
+ local<long> temp(0);
 
- // initialize the delimiters between words
+ // delimiters between words must be spaces, end-of-sequence, or punctuation
     sregex delim =
- +_s | eos | '-' | ',';
+ +_s | eos | +punct;
 
     // initialize the regular expressions for named numbers
     sregex ones_rx =
- ( a1 = ones_map ) [ ref(n) += a1 ] >> delim;
+ ( a1 = ones_map ) [ n += a1 ] >> delim;
 
     sregex tens_rx =
             ones_rx
         |
         (
- ( a1 = tens_map ) [ ref(n) += a1 ] >> delim
+ ( a1 = tens_map ) [ n += a1 ] >> delim
>> !ones_rx
         )
         |
- ( ( a1 = teens_map ) [ ref(n) += a1 ] >> delim
+ ( ( a1 = teens_map ) [ n += a1 ] >> delim
         );
 
     sregex hundreds_rx =
         ( ( tens_rx >> "hundred" >> delim )
- [ ref(n) *= 100 ]
+ [ n *= 100 ]
>> !tens_rx
         )
         | tens_rx;
 
     sregex thousands_rx =
         ( ( hundreds_rx >> "thousand" >> delim )
- [ ref(temp) += ref(n) * 1000, ref(n) = 0 ]
+ [ temp += n * 1000, n = 0 ]
>> !hundreds_rx
         )
         | hundreds_rx
@@ -91,16 +91,18 @@
 
     sregex millions_rx =
         ( ( hundreds_rx >> "million" >> delim )
- [ ref(temp) += ref(n) * 1000000, ref(n) = 0 ]
+ [ temp += n * 1000000, n = 0 ]
>> !thousands_rx
         )
         | thousands_rx;
 
+ // Note: this uses two attribues, a1 and a2, and it uses
+ // a default attribute value of 1 for a1.
     sregex specials_rx =
         ( !((a1 = ones_map) >> delim) >> (a2 = specials_map) )
- [ ref(n) = (a1 | 1) * a2 ]
+ [ n = (a1 | 1) * a2 ]
>> delim
- >> !("and" >> delim >> ones_rx);
+ >> !("and" >> +_s >> ones_rx);
 
     sregex number_rx =
         bow
@@ -108,7 +110,7 @@
         ( specials_rx
         |
             millions_rx
- [ref(n) += ref(temp), ref(temp) = 0 ]
+ [n += temp, temp = 0 ]
         );
 
     // this is the input string
@@ -142,8 +144,8 @@
 
     for( ; cur != end; ++cur )
     {
- std::cout << *cur << " = " << n << '\n';
- n = 0;
+ std::cout << *cur << " = " << n.get() << '\n';
+ n.get() = 0;
     }
     std::cout << '\n';
 }

Modified: branches/bcbboost/libs/xpressive/test/Jamfile.v2
==============================================================================
--- branches/bcbboost/libs/xpressive/test/Jamfile.v2 (original)
+++ branches/bcbboost/libs/xpressive/test/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -7,12 +7,14 @@
 
 project
     : requirements
-# <toolset>gcc:<cxxflags>-ftemplate-depth-1024
         <toolset>intel:<debug-symbols>off
         <toolset>msvc-7.1:<debug-symbols>off
         <toolset>msvc-8.0:<define>_SCL_SECURE_NO_DEPRECATE
         <toolset>msvc-8.0:<define>_CRT_SECURE_NO_DEPRECATE
         <toolset>gcc:<cxxflags>-ftemplate-depth-1024
+# <toolset>gcc:<cxxflags>-W
+# <toolset>gcc:<cxxflags>-Wall
+# <toolset>msvc:<cxxflags>-W4
         <toolset>msvc,<stdlib>stlport:<define>_STLP_EXPOSE_GLOBALS_IMPLEMENTATION
         <library>/boost/test//boost_unit_test_framework
         <link>static
@@ -49,6 +51,7 @@
          [ run test_non_char.cpp ]
          [ run test_static.cpp ]
          [ run test_actions.cpp ]
+ [ run test_assert.cpp ]
          [ run test_symbols.cpp ]
          [ run test_dynamic.cpp ]
          [ run test_dynamic_grammar.cpp ]

Modified: branches/bcbboost/libs/xpressive/test/test_actions.cpp
==============================================================================
--- branches/bcbboost/libs/xpressive/test/test_actions.cpp (original)
+++ branches/bcbboost/libs/xpressive/test/test_actions.cpp 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -122,7 +122,7 @@
 void test4_aux()
 {
     using namespace boost::xpressive;
- placeholder< std::map<std::string, int> > const _map = {};
+ placeholder< std::map<std::string, int> > const _map = {{}};
 
     sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) )[ _map[s1] = as<int>(s2) ];
     sregex rx = pair >> *(+_s >> pair);
@@ -132,17 +132,29 @@
     std::map<std::string, int> result;
     what.let(_map = result); // bind the argument!
 
- if(!regex_match(str, what, rx))
- {
- BOOST_ERROR("oops");
- }
- else
- {
- BOOST_REQUIRE_EQUAL(result.size(), 3u);
- BOOST_CHECK_EQUAL(result["aaa"], 1);
- BOOST_CHECK_EQUAL(result["bbb"], 23);
- BOOST_CHECK_EQUAL(result["ccc"], 456);
- }
+ BOOST_REQUIRE(regex_match(str, what, rx));
+ BOOST_REQUIRE_EQUAL(result.size(), 3u);
+ BOOST_CHECK_EQUAL(result["aaa"], 1);
+ BOOST_CHECK_EQUAL(result["bbb"], 23);
+ BOOST_CHECK_EQUAL(result["ccc"], 456);
+
+ // Try the same test with regex_iterator
+ result.clear();
+ sregex_iterator it(str.begin(), str.end(), pair, let(_map=result)), end;
+ BOOST_REQUIRE_EQUAL(3, std::distance(it, end));
+ BOOST_REQUIRE_EQUAL(result.size(), 3u);
+ BOOST_CHECK_EQUAL(result["aaa"], 1);
+ BOOST_CHECK_EQUAL(result["bbb"], 23);
+ BOOST_CHECK_EQUAL(result["ccc"], 456);
+
+ // Try the same test with regex_token_iterator
+ result.clear();
+ sregex_token_iterator it2(str.begin(), str.end(), pair, (s1,s2), let(_map=result)), end2;
+ BOOST_REQUIRE_EQUAL(6, std::distance(it2, end2));
+ BOOST_REQUIRE_EQUAL(result.size(), 3u);
+ BOOST_CHECK_EQUAL(result["aaa"], 1);
+ BOOST_CHECK_EQUAL(result["bbb"], 23);
+ BOOST_CHECK_EQUAL(result["ccc"], 456);
 }
 
 ///////////////////////////////////////////////////////////////////////////////

Modified: branches/bcbboost/more/formal_review_schedule.html
==============================================================================
--- branches/bcbboost/more/formal_review_schedule.html (original)
+++ branches/bcbboost/more/formal_review_schedule.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -157,7 +157,7 @@
     <td>Tobias Schwinger</td>
     <td>September 27, 2007 - October 7, 2007</td>
     <td><a href="http://lists.boost.org/boost-announce/2007/09/0146.php">
- Ongoing</a></td>
+ Pending</a></td>
   </tr>
 
   <tr>
@@ -219,7 +219,7 @@
     <td>Matthias Schabel</td>
     <td>April 11, 2007 - April 27, 2007</td>
     <td><a href="http://lists.boost.org/boost-announce/2007/05/0129.php">
- Accepted</a></td>
+ Accepted -- Added to SVN</a></td>
   </tr>
 
 

Modified: branches/bcbboost/status/Jamfile.v2
==============================================================================
--- branches/bcbboost/status/Jamfile.v2 (original)
+++ branches/bcbboost/status/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -13,11 +13,11 @@
 
 
 project status
- : source-location $(BOOST_ROOT)
- : requirements <hardcode-dll-paths>true
+ : source-location $(BOOST_ROOT)
+ : requirements <hardcode-dll-paths>true
     ;
-
-import testing ;
+
+import testing ;
 
 alias test_exec_monitor : ../libs/test/build//boost_test_exec_monitor/<link>static ;
 alias unit_test_framework : ../libs/test/build//boost_unit_test_framework/<link>static ;
@@ -42,6 +42,7 @@
 build-project ../libs/format/test ; # test-suite format
 build-project ../libs/function/test ; # test-suite function
 build-project ../libs/functional/hash/test ; # test-suite functional/hash
+build-project ../libs/fusion/test ; # test-suite fusion
 build-project ../libs/gil/test ; # test-suite gil
 build-project ../libs/graph/test ; # test-suite graph
 build-project ../libs/io/test ; # test-suite io
@@ -91,16 +92,16 @@
 build-project ../libs/xpressive/test ; # test-suite xpressive
 
 # Tests specified in this Jamfile
-
+
     test-suite config
- :
+ :
           # FIXME: Ideally, this should be just an alias to 'main' test suite
           # defined in libs/config/test/Jamfile.v2
           # That way, we'll avoid code duplication and won't run additional
           # tests in 'auxilliary' test suites, that need to be run and
           # interpreted by humans.
           # But such change will require tweaking libs/config/tools/generate.cpp
- # so postponing to later.
+ # so postponing to later.
           [ run libs/config/test/config_test.cpp test_exec_monitor
                 : #args
                 : #input-files
@@ -124,7 +125,7 @@
           [ compile-fail libs/config/test/threads/test_thread_fail1.cpp ]
           [ compile-fail libs/config/test/threads/test_thread_fail2.cpp ]
         ;
-
+
     test-suite array_suite # !!!
         : [ run libs/array/array0.cpp ]
           [ run libs/array/array1.cpp ]
@@ -133,9 +134,9 @@
           [ run libs/array/array4.cpp ]
           [ run libs/array/array5.cpp ]
         ;
-
+
     run libs/crc/crc_test.cpp test_exec_monitor ;
-
+
     run libs/functional/function_test.cpp ;
 
 
@@ -145,7 +146,7 @@
           [ run libs/integer/integer_traits_test.cpp test_exec_monitor ]
         ;
 
- run libs/pool/test/test_pool_alloc.cpp test_exec_monitor ;
+ run libs/pool/test/test_pool_alloc.cpp test_exec_monitor ;
 
     test-suite preprocessor
         : [ compile libs/preprocessor/test/arithmetic.cpp ]
@@ -168,7 +169,7 @@
         : [ run libs/rational/rational_example.cpp ]
           [ run libs/rational/rational_test.cpp unit_test_framework ]
         ;
-
+
     compile libs/timer/timer_test.cpp ;
 
     test-suite tokenizer

Modified: branches/bcbboost/status/explicit-failures-markup.xml
==============================================================================
--- branches/bcbboost/status/explicit-failures-markup.xml (original)
+++ branches/bcbboost/status/explicit-failures-markup.xml 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -326,7 +326,7 @@
         <mark-expected-failures>
             <test name="bind_dm2_test"/>
             <test name="mem_fn_dm_test"/>
- <toolset name="msvc-6.*"/>
+ <toolset name="msvc-6.5*"/>
             <toolset name="msvc-7.0"/>
             <toolset name="cw-8.3"/>
             <note refid="31" author="Peter Dimov"/>
@@ -362,7 +362,7 @@
         <mark-expected-failures>
             <test name="bind_dm3_test"/>
             <toolset name="borland-5*"/>
- <toolset name="msvc-6.*"/>
+ <toolset name="msvc-6.5*"/>
             <toolset name="msvc-7.0"/>
             <note refid="31" author="Peter Dimov"/>
         </mark-expected-failures>
@@ -373,13 +373,6 @@
             This failure is only present in release mode and is caused by /OPT:ICF.
           </note>
         </mark-expected-failures>
- <mark-expected-failures>
- <test name="bind_placeholder_test"/>
- <toolset name="borland-*"/>
- <toolset name="msvc-6.*"/>
- <toolset name="msvc-7.0"/>
- <note refid="31" author="Peter Dimov"/>
- </mark-expected-failures>
     </library>
 
 
@@ -1612,8 +1605,8 @@
             <toolset name="gcc-3.2*"/>
             <toolset name="gcc-3.3*"/>
             <toolset name="mipspro"/>
- <toolset name="acc"/>
- <toolset name="hp_cxx*"/>
+ <toolset name="acc"/>
+ <toolset name="hp_cxx*"/>
             <note author="Ion Gazta&#241;aga">
                 The compiler does not support features that are essential for the library.
             </note>
@@ -1634,17 +1627,17 @@
             <toolset name="gcc-3.2*"/>
             <toolset name="gcc-3.3*"/>
             <toolset name="mipspro"/>
- <toolset name="hp_cxx*"/>
+ <toolset name="hp_cxx*"/>
             <note author="Ion Gazta&#241;aga">
                 The compiler does not support features that are essential for the library.
             </note>
         </mark-unusable>
- <mark-expected-failures>
- <test name="doc_offset_ptr" />
- <toolset name="acc"/>
- <note author="Ion Gazta&#241;aga">
- The compiler is not supported by Interprocess.
- </note>
+ <mark-expected-failures>
+ <test name="doc_offset_ptr" />
+ <toolset name="acc"/>
+ <note author="Ion Gazta&#241;aga">
+ The compiler is not supported by Interprocess.
+ </note>
         </mark-expected-failures>
     </library>
 
@@ -2627,15 +2620,15 @@
         </mark-unusable>
         <test name="*_native" category="Native compiler support">
             <mark-failure>
- <toolset name="acc"/>
+ <toolset name="acc*"/>
                 <toolset name="intel-vc71-win*"/>
                 <toolset name="intel-vc8-win*"/>
                 <toolset name="como-4_3_3-vc7_1"/>
                 <toolset name="tru64*"/>
                 <toolset name="hp_cxx*"/>
- <toolset name="sun-5.8"/>
- <toolset name="dmc*"/>
+ <toolset name="sun-5.*"/>
                 <toolset name="borland-5*"/>
+ <toolset name="mipspro*"/>
                 <note author="Arkadiy Vertleyb">
                     Native mode is not supported for this compiler.
                 </note>
@@ -2668,6 +2661,17 @@
                 The feature is not supported by this compiler.
             </note>
         </mark-expected-failures>
+ <mark-expected-failures>
+ <test name="function_binding_emulation"/>
+ <test name="function_emulation"/>
+ <test name="function_ptr_from_tpl_emulation"/>
+ <test name="modifiers_emulation"/>
+ <test name="nested_typedef_emulation"/>
+ <toolset name="borland-5.8*"/>
+ <note author="Peder Holt">
+ The feature is not supported by this compiler.
+ </note>
+ </mark-expected-failures>
     </library>
 
     <!-- function -->
@@ -2917,19 +2921,6 @@
             </note>
         </mark-expected-failures>
         <mark-expected-failures>
- <test name="common_factor_test"/>
- <test name="hypot_test"/>
- <toolset name="borland-5.8*"/>
- <note author="J.Maddock">
- This appears to be caused by bad-code generation:
- as the following trivial code in
- common_factor.hpp goes into an infinite loop:
-
- while ( !(r[ which ] &amp; 1u) ){ r[ which ] &gt;&gt;= 1; }
-
- </note>
- </mark-expected-failures>
- <mark-expected-failures>
             <test name="log1p_expm1_test"/>
             <toolset name="borland-5.8*"/>
             <toolset name="borland-5.9*"/>
@@ -4587,7 +4578,6 @@
             <test name="std_run_complex_overloads"/>
             <test name="test_shared_ptr"/>
             <test name="std_test_shared_ptr"/>
- <test name="run_random"/>
             <test name="std_run_random"/>
             <test name="test_tuple_tricky"/>
             <test name="tr1_is_convertible_test"/>

Modified: branches/bcbboost/tools/boostbook/doc/boostbook.xml
==============================================================================
--- branches/bcbboost/tools/boostbook/doc/boostbook.xml (original)
+++ branches/bcbboost/tools/boostbook/doc/boostbook.xml 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <!--
    Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
   
@@ -186,7 +186,7 @@
 
           <listitem><para>The DocBook DTD, available as a ZIP archive
           at the <ulink
- url="http://www.oasis-open.org/docbook/xml/4.2/index.shtml">OASIS
+ url="http://www.oasis-open.org/docbook/xml/4.2/index.1.shtml">OASIS
           DocBook site</ulink>. The package is called "DocBook XML
           4.2". Extract the DocBook DTD to a directory on your hard
           disk (which we'll refer to as the

Modified: branches/bcbboost/tools/build/v2/changes.txt
==============================================================================
--- branches/bcbboost/tools/build/v2/changes.txt (original)
+++ branches/bcbboost/tools/build/v2/changes.txt 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -2,6 +2,13 @@
 Distributed under the Boost Software License, Version 1.0.
 (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
+Milestone 13 (in development)
+
+Changes in this release:
+
+The following bugs were fixed:
+
+ - gcc suport did not work on HP-UX systems
 
 Milestone 12 (Oct 1, 2007)
 

Modified: branches/bcbboost/tools/build/v2/index.html
==============================================================================
--- branches/bcbboost/tools/build/v2/index.html (original)
+++ branches/bcbboost/tools/build/v2/index.html 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -18,11 +18,14 @@
   margin-left: 1em ;
   border: medium outset ;
   padding: 0em 1em ;
- background-color: #ffffee ;
+ background-color: #adbed2;
+ border-color: #000000;
+ border-width: 1;
   width: 40% ;
   float: right ;
   clear: right }
-
+}
+
 div.sidebar p.rubric {
   font-family: sans-serif ;
   font-size: medium }
@@ -32,9 +35,8 @@
   </head>
 
   <body bgcolor="#FFFFFF" text="#000000">
- <img src="../../../boost.png" alt="boost.png (6897 bytes)" align="center"
- width="277" height="86"> <!-- sf logo -->
-
+
+ <p align="center"><img src="boost_build.png" width="396" height="60" alt="Boost.Build V2"></img>
 
     <div class="contents sidebar topic" id="index">
       <p>
@@ -71,8 +73,7 @@
     </p>
    </div>
      
-
- <h1>Boost.Build V2</h1>
+<!-- <h1>Boost.Build V2</h1> -->
 
 
     <h2>Overview</h2>
@@ -126,8 +127,8 @@
     <p>Milestone 13 is planned as bugfix release. Milestone 14 will
     focus on improving user documentation. Milestone 15 will see most
     of Boost.Build reimplemented in Python, to make extending
- Boost.Build even easier for end users. The specific issues planned for
- each release can be found on the
+ Boost.Build even easier for end users (see PythonPort).
+ The specific issues planned for each release can be found on the
     <a href="https://zigzag.cs.msu.su:7813/boost.build/roadmap">roadmap</a>.
 
     

Modified: branches/bcbboost/tools/build/v2/roll.sh
==============================================================================
--- branches/bcbboost/tools/build/v2/roll.sh (original)
+++ branches/bcbboost/tools/build/v2/roll.sh 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -23,7 +23,7 @@
 rm -rf example/versioned
 
 # Remove unnecessary top-level files
-find . -maxdepth 1 -type f | egrep -v "timestamp.txt|roll.sh|bootstrap.jam|build-system.jam|boost_build_v2.html|boost.png|index.html|hacking.txt|site-config.jam|user-config.jam" | xargs rm -f
+find . -maxdepth 1 -type f | egrep -v "timestamp.txt|roll.sh|bootstrap.jam|build-system.jam|boost_build_v2.html|boost_build.png|index.html|hacking.txt|site-config.jam|user-config.jam" | xargs rm -f
 
 # Prepare some more files.
 echo -e "boost-build kernel ;\n" > boost-build.jam
@@ -57,5 +57,5 @@
 chmod -R u+w *
 # Upload docs to sourceforge
 perl -pi -e 's%<!-- sf logo -->%SourceForge.net Logo%' index.html doc/*.html
-scp -r doc example *.html hacking.txt vladimir_prus_at_[hidden]:/home/groups/b/bo/boost/htdocs/boost-build2
+scp -r doc example boost_build.png *.html hacking.txt vladimir_prus_at_[hidden]:/home/groups/b/bo/boost/htdocs/boost-build2
 scp ../userman.pdf vladimir_prus_at_[hidden]:/home/groups/b/bo/boost/htdocs/boost-build2/doc

Modified: branches/bcbboost/tools/build/v2/test/BoostBuild.py
==============================================================================
--- branches/bcbboost/tools/build/v2/test/BoostBuild.py (original)
+++ branches/bcbboost/tools/build/v2/test/BoostBuild.py 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -72,11 +72,13 @@
 def prepare_suffix_map(toolset):
     global windows, suffixes
     suffixes = {'.exe': '', '.dll': '.so', '.lib': '.a', '.obj': '.o'}
+ suffixes['.implib'] = '.no_implib_files_on_this_platform'
     if windows:
         suffixes = {}
         if toolset in ["gcc"]:
             suffixes['.lib'] = '.a' # static libs have '.a' suffix with mingw...
             suffixes['.obj'] = '.o'
+ suffixes['.implib'] = '.lib'
     if os.__dict__.has_key('uname') and os.uname()[0] == 'Darwin':
         suffixes['.dll'] = '.dylib'
 
@@ -716,6 +718,9 @@
                 if dll_prefix:
                     tail = "lib" + tail
                     result = os.path.join(head, tail)
+ # If we try to use this name in Jamfile, we better
+ # convert \ to /, as otherwise we'd have to quote \.
+ result = string.replace(result, "\\", "/")
         return result
                 
     def adjust_suffix(self, name):

Modified: branches/bcbboost/tools/build/v2/test/free_features_request.py
==============================================================================
--- branches/bcbboost/tools/build/v2/test/free_features_request.py (original)
+++ branches/bcbboost/tools/build/v2/test/free_features_request.py 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -29,6 +29,9 @@
 
 t.write("foo.cpp", """
 #ifdef FOO
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
 void foo() {}
 #endif
 """)
@@ -37,6 +40,6 @@
 # target, we'll get a link error at this point.
 t.run_build_system("hello define=FOO")
 
-t.expect_addition("bin/$toolset/debug/hello")
+t.expect_addition("bin/$toolset/debug/hello.exe")
 
 t.cleanup()

Modified: branches/bcbboost/tools/build/v2/test/library_chain.py
==============================================================================
--- branches/bcbboost/tools/build/v2/test/library_chain.py (original)
+++ branches/bcbboost/tools/build/v2/test/library_chain.py 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -126,7 +126,8 @@
 t.expect_addition("a/dist/a.dll")
 
 if (os.name == 'nt' or os.uname()[0].lower().startswith('cygwin')) and get_toolset() != 'gcc':
- file = t.adjust_names(["a/dist/a.lib"])[0]
+ # This is windows import library -- we know the exact name.
+ file = "a/dist/a.lib"
 else:
     file = t.adjust_names(["a/dist/a.dll"])[0]
 

Modified: branches/bcbboost/tools/build/v2/test/searched_lib.py
==============================================================================
--- branches/bcbboost/tools/build/v2/test/searched_lib.py (original)
+++ branches/bcbboost/tools/build/v2/test/searched_lib.py 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -30,7 +30,7 @@
 # change dll to lib.
 #
 if (os.name == 'nt' or os.uname()[0].lower().startswith('cygwin')) and get_toolset() != 'gcc':
- t.copy("lib/bin/$toolset/debug/test_lib.lib", "lib/test_lib.lib")
+ t.copy("lib/bin/$toolset/debug/test_lib.implib", "lib/test_lib.implib")
     t.copy("lib/bin/$toolset/debug/test_lib.dll", "lib/test_lib.dll")
 else:
     t.copy("lib/bin/$toolset/debug/test_lib.dll", "lib/test_lib.dll")

Modified: branches/bcbboost/tools/jam/src/builtins.c
==============================================================================
--- branches/bcbboost/tools/jam/src/builtins.c (original)
+++ branches/bcbboost/tools/jam/src/builtins.c 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -1334,8 +1334,15 @@
         if (arg)
             string_append(in, "/");
     }
-
 
+ /* Convert \ into /. On windows, paths using / and \ are equivalent,
+ and we want this function to obtain canonic representation. */
+ for (current = in->value, end = in->value + in->size;
+ current < end; ++current)
+ if (*current == '\\')
+ *current = '/';
+
+
     end = in->value + in->size - 1;
     current = end;
     
@@ -1662,6 +1669,7 @@
 
     frame_free( inner );
 
+ Py_INCREF(Py_None);
     return Py_None;
 }
 
@@ -1737,6 +1745,30 @@
     return Py_None;
 }
 
+/* Returns the value of a variable in root Jam module. */
+PyObject*
+bjam_variable(PyObject* self, PyObject* args)
+{
+ char *name;
+ LIST* value;
+ PyObject *result;
+ int i;
+
+ if (!PyArg_ParseTuple(args, "s", &name))
+ return NULL;
+
+ enter_module(root_module());
+ value = var_get(name);
+ exit_module(root_module());
+
+ result = PyList_New(list_length(value));
+ for (i = 0; value; value = list_next(value), ++i)
+ PyList_SetItem(result, i, PyString_FromString(value->string));
+
+ return result;
+}
+
+
 #endif
 
 #ifdef HAVE_POPEN

Modified: branches/bcbboost/tools/jam/src/jam.c
==============================================================================
--- branches/bcbboost/tools/jam/src/jam.c (original)
+++ branches/bcbboost/tools/jam/src/jam.c 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -209,6 +209,9 @@
 
     extern PyObject*
     bjam_define_action(PyObject* self, PyObject* args);
+
+ extern PyObject*
+ bjam_variable(PyObject* self, PyObject* args);
 #endif
 
 int main( int argc, char **argv, char **arg_environ )
@@ -344,6 +347,8 @@
                  "Imports Python callable to bjam."},
                 {"define_action", bjam_define_action, METH_VARARGS,
                  "Defines a command line action."},
+ {"variable", bjam_variable, METH_VARARGS,
+ "Obtains a variable from bjam's global module."},
                 {NULL, NULL, 0, NULL}
             };
     
@@ -434,6 +439,9 @@
         symv[0] = s;
         symv[1] = 0;
         var_defines( symv, 1 );
+ enter_module( bindmodule(".ENVIRON") );
+ var_defines( symv, 0 );
+ exit_module( bindmodule(".ENVIRON") );
     }
 
     /* Set the ARGV to reflect the complete list of arguments of invocation. */

Modified: branches/bcbboost/tools/wave/build/Jamfile.v2
==============================================================================
--- branches/bcbboost/tools/wave/build/Jamfile.v2 (original)
+++ branches/bcbboost/tools/wave/build/Jamfile.v2 2007-10-13 17:25:29 EDT (Sat, 13 Oct 2007)
@@ -22,6 +22,7 @@
     /boost//serialization
     /boost//system
     /boost//thread
+ /boost//date_time
     :
 # <debug-symbols>on
     :


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk