Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r82517 - in trunk: boost/multiprecision boost/multiprecision/traits libs/multiprecision/doc libs/multiprecision/doc/html libs/multiprecision/doc/html/boost_multiprecision libs/multiprecision/doc/html/boost_multiprecision/indexes libs/multiprecision/doc/html/boost_multiprecision/tut libs/multiprecision/doc/html/boost_multiprecision/tut/misc libs/multiprecision/example libs/multiprecision/test
From: john_at_[hidden]
Date: 2013-01-17 07:23:28


Author: johnmaddock
Date: 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
New Revision: 82517
URL: http://svn.boost.org/trac/boost/changeset/82517

Log:
Add debug_adaptor.hpp.
Document debug_adaptor and VC++ visualizers.
Added:
   trunk/boost/multiprecision/debug_adaptor.hpp (contents, props changed)
   trunk/boost/multiprecision/traits/extract_exponent_type.hpp (contents, props changed)
   trunk/libs/multiprecision/doc/debugger1.png (contents, props changed)
   trunk/libs/multiprecision/doc/debugger2.png (contents, props changed)
   trunk/libs/multiprecision/doc/debugger3.png (contents, props changed)
   trunk/libs/multiprecision/doc/debugger4.png (contents, props changed)
   trunk/libs/multiprecision/doc/debugger5.png (contents, props changed)
   trunk/libs/multiprecision/doc/debugger6.png (contents, props changed)
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html (contents, props changed)
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html (contents, props changed)
   trunk/libs/multiprecision/example/debug_adaptor_snips.cpp (contents, props changed)
   trunk/libs/multiprecision/test/test_arithmetic_dbg_adptr1.cpp (contents, props changed)
   trunk/libs/multiprecision/test/test_arithmetic_dbg_adptr2.cpp (contents, props changed)
Text files modified:
   trunk/boost/multiprecision/logged_adaptor.hpp | 18 +--
   trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html | 4
   trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html | 10 +
   trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html | 4
   trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html | 5
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut.html | 7 +
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html | 6
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html | 7 +
   trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html | 6
   trunk/libs/multiprecision/doc/html/index.html | 9 +
   trunk/libs/multiprecision/doc/multiprecision.qbk | 178 ++++++++++++++++++++++++++++++++++++++++
   trunk/libs/multiprecision/test/Jamfile.v2 | 3
   12 files changed, 226 insertions(+), 31 deletions(-)

Added: trunk/boost/multiprecision/debug_adaptor.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/multiprecision/debug_adaptor.hpp 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -0,0 +1,453 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2012 John Maddock. 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_
+
+#ifndef BOOST_MATH_DEBUG_ADAPTER_HPP
+#define BOOST_MATH_DEBUG_ADAPTER_HPP
+
+#include <boost/multiprecision/traits/extract_exponent_type.hpp>
+
+namespace boost{
+namespace multiprecision{
+namespace backends{
+
+template <class Backend>
+struct debug_adaptor
+{
+ typedef typename Backend::signed_types signed_types;
+ typedef typename Backend::unsigned_types unsigned_types;
+ typedef typename Backend::float_types float_types;
+ typedef typename extract_exponent_type<
+ Backend, number_category<Backend>::value>::type exponent_type;
+
+private:
+ std::string debug_value;
+ Backend m_value;
+public:
+ void update_view()
+ {
+ try
+ {
+ debug_value = m_value.str(0, static_cast<std::ios_base::fmtflags>(0));
+ }
+ catch(const std::exception& e)
+ {
+ debug_value = "String conversion failed with message: \"";
+ debug_value += e.what();
+ debug_value += "\"";
+ }
+ }
+ debug_adaptor()
+ {
+ update_view();
+ }
+ debug_adaptor(const debug_adaptor& o) : debug_value(o.debug_value), m_value(o.m_value)
+ {
+ }
+ debug_adaptor& operator = (const debug_adaptor& o)
+ {
+ debug_value = o.debug_value;
+ m_value = o.m_value;
+ return *this;
+ }
+ template <class T>
+ debug_adaptor(const T& i, const typename enable_if_c<is_convertible<T, Backend>::value>::type* = 0)
+ : m_value(i)
+ {
+ update_view();
+ }
+ template <class T>
+ debug_adaptor(const T& i, const T& j)
+ : m_value(i, j)
+ {
+ update_view();
+ }
+ template <class T>
+ typename enable_if_c<is_arithmetic<T>::value || is_convertible<T, Backend>::value, debug_adaptor&>::type operator = (const T& i)
+ {
+ m_value = i;
+ update_view();
+ return *this;
+ }
+ debug_adaptor& operator = (const char* s)
+ {
+ m_value = s;
+ update_view();
+ return *this;
+ }
+ void swap(debug_adaptor& o)
+ {
+ std::swap(m_value, o.value());
+ std::swap(debug_value, o.debug_value);
+ }
+ std::string str(std::streamsize digits, std::ios_base::fmtflags f)const
+ {
+ return m_value.str(digits, f);
+ }
+ void negate()
+ {
+ m_value.negate();
+ update_view();
+ }
+ int compare(const debug_adaptor& o)const
+ {
+ return m_value.compare(o.value());
+ }
+ template <class T>
+ int compare(const T& i)const
+ {
+ return m_value.compare(i);
+ }
+ Backend& value()
+ {
+ return m_value;
+ }
+ const Backend& value()const
+ {
+ return m_value;
+ }
+};
+
+template <class Backend>
+inline Backend const& unwrap_debug_type(debug_adaptor<Backend> const& val)
+{
+ return val.value();
+}
+template <class T>
+inline const T& unwrap_debug_type(const T& val)
+{
+ return val;
+}
+
+#define NON_MEMBER_OP1(name, str) \
+ template <class Backend>\
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend>& result)\
+ {\
+ using default_ops::BOOST_JOIN(eval_, name);\
+ BOOST_JOIN(eval_, name)(result.value());\
+ result.update_view();\
+ }
+
+#define NON_MEMBER_OP2(name, str) \
+ template <class Backend, class T>\
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend>& result, const T& a)\
+ {\
+ using default_ops::BOOST_JOIN(eval_, name);\
+ BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a));\
+ result.update_view();\
+ }\
+ template <class Backend>\
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend>& result, const debug_adaptor<Backend>& a)\
+ {\
+ using default_ops::BOOST_JOIN(eval_, name);\
+ BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a));\
+ result.update_view();\
+ }
+
+#define NON_MEMBER_OP3(name, str) \
+ template <class Backend, class T, class U>\
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend>& result, const T& a, const U& b)\
+ {\
+ using default_ops::BOOST_JOIN(eval_, name);\
+ BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b));\
+ result.update_view();\
+ }\
+ template <class Backend, class T>\
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend>& result, const debug_adaptor<Backend>& a, const T& b)\
+ {\
+ using default_ops::BOOST_JOIN(eval_, name);\
+ BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b));\
+ result.update_view();\
+ }\
+ template <class Backend, class T>\
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend>& result, const T& a, const debug_adaptor<Backend>& b)\
+ {\
+ using default_ops::BOOST_JOIN(eval_, name);\
+ BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b));\
+ result.update_view();\
+ }\
+ template <class Backend>\
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend>& result, const debug_adaptor<Backend>& a, const debug_adaptor<Backend>& b)\
+ {\
+ using default_ops::BOOST_JOIN(eval_, name);\
+ BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b));\
+ result.update_view();\
+ }
+
+#define NON_MEMBER_OP4(name, str) \
+ template <class Backend, class T, class U, class V>\
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend>& result, const T& a, const U& b, const V& c)\
+ {\
+ using default_ops::BOOST_JOIN(eval_, name);\
+ BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c));\
+ result.update_view();\
+ }\
+ template <class Backend, class T>\
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend>& result, const debug_adaptor<Backend>& a, const debug_adaptor<Backend>& b, const T& c)\
+ {\
+ using default_ops::BOOST_JOIN(eval_, name);\
+ BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c));\
+ result.update_view();\
+ }\
+ template <class Backend, class T>\
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend>& result, const debug_adaptor<Backend>& a, const T& b, const debug_adaptor<Backend>& c)\
+ {\
+ using default_ops::BOOST_JOIN(eval_, name);\
+ BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c));\
+ result.update_view();\
+ }\
+ template <class Backend, class T>\
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend>& result, const T& a, const debug_adaptor<Backend>& b, const debug_adaptor<Backend>& c)\
+ {\
+ using default_ops::BOOST_JOIN(eval_, name);\
+ BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c));\
+ result.update_view();\
+ }\
+ template <class Backend>\
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend>& result, const debug_adaptor<Backend>& a, const debug_adaptor<Backend>& b, const debug_adaptor<Backend>& c)\
+ {\
+ using default_ops::BOOST_JOIN(eval_, name);\
+ BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c));\
+ result.update_view();\
+ }\
+ template <class Backend, class T, class U>\
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend>& result, const debug_adaptor<Backend>& a, const T& b, const U& c)\
+ {\
+ using default_ops::BOOST_JOIN(eval_, name);\
+ BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c));\
+ result.update_view();\
+ }\
+
+NON_MEMBER_OP2(add, "+=");
+NON_MEMBER_OP2(subtract, "-=");
+NON_MEMBER_OP2(multiply, "*=");
+NON_MEMBER_OP2(divide, "/=");
+
+template <class Backend, class R>
+inline void eval_convert_to(R* result, const debug_adaptor<Backend>& val)
+{
+ using default_ops::eval_convert_to;
+ eval_convert_to(result, val.value());
+}
+
+template <class Backend, class Exp>
+inline void eval_frexp(debug_adaptor<Backend>& result, const debug_adaptor<Backend>& arg, Exp* exp)
+{
+ eval_frexp(result.value(), arg.value(), exp);
+ result.update_view();\
+}
+
+template <class Backend, class Exp>
+inline void eval_ldexp(debug_adaptor<Backend>& result, const debug_adaptor<Backend>& arg, Exp exp)
+{
+ eval_ldexp(result.value(), arg.value(), exp);
+ result.update_view();\
+}
+
+NON_MEMBER_OP2(floor, "floor");
+NON_MEMBER_OP2(ceil, "ceil");
+NON_MEMBER_OP2(sqrt, "sqrt");
+
+template <class Backend>
+inline int eval_fpclassify(const debug_adaptor<Backend>& arg)
+{
+ using default_ops::eval_fpclassify;
+ return eval_fpclassify(arg.value());
+}
+
+/*********************************************************************
+*
+* Optional arithmetic operations come next:
+*
+*********************************************************************/
+
+NON_MEMBER_OP3(add, "+");
+NON_MEMBER_OP3(subtract, "-");
+NON_MEMBER_OP3(multiply, "*");
+NON_MEMBER_OP3(divide, "/");
+NON_MEMBER_OP3(multiply_add, "fused-multiply-add");
+NON_MEMBER_OP3(multiply_subtract, "fused-multiply-subtract");
+NON_MEMBER_OP4(multiply_add, "fused-multiply-add");
+NON_MEMBER_OP4(multiply_subtract, "fused-multiply-subtract");
+
+NON_MEMBER_OP1(increment, "increment");
+NON_MEMBER_OP1(decrement, "decrement");
+
+/*********************************************************************
+*
+* Optional integer operations come next:
+*
+*********************************************************************/
+
+NON_MEMBER_OP2(modulus, "%=");
+NON_MEMBER_OP3(modulus, "%");
+NON_MEMBER_OP2(bitwise_or, "|=");
+NON_MEMBER_OP3(bitwise_or, "|");
+NON_MEMBER_OP2(bitwise_and, "&=");
+NON_MEMBER_OP3(bitwise_and, "&");
+NON_MEMBER_OP2(bitwise_xor, "^=");
+NON_MEMBER_OP3(bitwise_xor, "^");
+NON_MEMBER_OP4(qr, "quotient-and-remainder");
+NON_MEMBER_OP2(complement, "~");
+
+template <class Backend>
+inline void eval_left_shift(debug_adaptor<Backend>& arg, unsigned a)
+{
+ using default_ops::eval_left_shift;
+ eval_left_shift(arg.value(), a);
+ arg.update_view();\
+}
+template <class Backend>
+inline void eval_left_shift(debug_adaptor<Backend>& arg, const debug_adaptor<Backend>& a, unsigned b)
+{
+ using default_ops::eval_left_shift;
+ eval_left_shift(arg.value(), a, b);
+ arg.update_view();\
+}
+template <class Backend>
+inline void eval_right_shift(debug_adaptor<Backend>& arg, unsigned a)
+{
+ using default_ops::eval_right_shift;
+ eval_right_shift(arg.value(), a);
+ arg.update_view();\
+}
+template <class Backend>
+inline void eval_right_shift(debug_adaptor<Backend>& arg, const debug_adaptor<Backend>& a, unsigned b)
+{
+ using default_ops::eval_right_shift;
+ eval_right_shift(arg.value(), a, b);
+ arg.update_view();\
+}
+
+template <class Backend, class T>
+inline unsigned eval_integer_modulus(const debug_adaptor<Backend>& arg, const T& a)
+{
+ using default_ops::eval_integer_modulus;
+ return eval_integer_modulus(arg.value(), a);
+}
+
+template <class Backend>
+inline unsigned eval_lsb(const debug_adaptor<Backend>& arg)
+{
+ using default_ops::eval_lsb;
+ return eval_lsb(arg.value());
+}
+
+template <class Backend>
+inline bool eval_bit_test(const debug_adaptor<Backend>& arg, unsigned a)
+{
+ using default_ops::eval_bit_test;
+ return eval_bit_test(arg.value(), a);
+}
+
+template <class Backend>
+inline void eval_bit_set(const debug_adaptor<Backend>& arg, unsigned a)
+{
+ using default_ops::eval_bit_set;
+ eval_bit_set(arg.value(), a);
+ arg.update_view();\
+}
+template <class Backend>
+inline void eval_bit_unset(const debug_adaptor<Backend>& arg, unsigned a)
+{
+ using default_ops::eval_bit_unset;
+ eval_bit_unset(arg.value(), a);
+ arg.update_view();\
+}
+template <class Backend>
+inline void eval_bit_flip(const debug_adaptor<Backend>& arg, unsigned a)
+{
+ using default_ops::eval_bit_flip;
+ eval_bit_flip(arg.value(), a);
+ arg.update_view();\
+}
+
+NON_MEMBER_OP3(gcd, "gcd");
+NON_MEMBER_OP3(lcm, "lcm");
+NON_MEMBER_OP4(powm, "powm");
+
+/*********************************************************************
+*
+* abs/fabs:
+*
+*********************************************************************/
+
+NON_MEMBER_OP2(abs, "abs");
+NON_MEMBER_OP2(fabs, "fabs");
+
+/*********************************************************************
+*
+* Floating point functions:
+*
+*********************************************************************/
+
+NON_MEMBER_OP2(trunc, "trunc");
+NON_MEMBER_OP2(round, "round");
+NON_MEMBER_OP2(exp, "exp");
+NON_MEMBER_OP2(log, "log");
+NON_MEMBER_OP2(log10, "log10");
+NON_MEMBER_OP2(sin, "sin");
+NON_MEMBER_OP2(cos, "cos");
+NON_MEMBER_OP2(tan, "tan");
+NON_MEMBER_OP2(asin, "asin");
+NON_MEMBER_OP2(acos, "acos");
+NON_MEMBER_OP2(atan, "atan");
+NON_MEMBER_OP2(sinh, "sinh");
+NON_MEMBER_OP2(cosh, "cosh");
+NON_MEMBER_OP2(tanh, "tanh");
+NON_MEMBER_OP3(fmod, "fmod");
+NON_MEMBER_OP3(pow, "pow");
+NON_MEMBER_OP3(atan2, "atan2");
+
+} // namespace backends
+
+using backends::debug_adaptor;
+
+template<class Backend>
+struct number_category<backends::debug_adaptor<Backend> > : public number_category<Backend> {};
+
+}} // namespaces
+
+namespace std{
+
+template <class Backend, boost::multiprecision::expression_template_option ExpressionTemplates>
+class numeric_limits<boost::multiprecision::number<boost::multiprecision::backends::debug_adaptor<Backend>, ExpressionTemplates> >
+ : public std::numeric_limits<boost::multiprecision::number<Backend, ExpressionTemplates> >
+{
+ typedef std::numeric_limits<boost::multiprecision::number<Backend, ExpressionTemplates> > base_type;
+ typedef boost::multiprecision::number<boost::multiprecision::backends::debug_adaptor<Backend>, ExpressionTemplates> number_type;
+public:
+ static number_type (min)() BOOST_NOEXCEPT { return (base_type::min)(); }
+ static number_type (max)() BOOST_NOEXCEPT { return (base_type::max)(); }
+ static number_type lowest() BOOST_NOEXCEPT { return -(max)(); }
+ static number_type epsilon() BOOST_NOEXCEPT { return base_type::epsilon(); }
+ static number_type round_error() BOOST_NOEXCEPT { return epsilon() / 2; }
+ static number_type infinity() BOOST_NOEXCEPT { return base_type::infinity(); }
+ static number_type quiet_NaN() BOOST_NOEXCEPT { return base_type::quiet_NaN(); }
+ static number_type signaling_NaN() BOOST_NOEXCEPT { return base_type::signaling_NaN(); }
+ static number_type denorm_min() BOOST_NOEXCEPT { return base_type::denorm_min(); }
+};
+
+} // namespace std
+
+namespace boost{ namespace math{
+
+namespace policies{
+
+template <class Backend, boost::multiprecision::expression_template_option ExpressionTemplates, class Policy>
+struct precision< boost::multiprecision::number<boost::multiprecision::debug_adaptor<Backend>, ExpressionTemplates>, Policy>
+ : public precision<boost::multiprecision::number<Backend, ExpressionTemplates>, Policy>
+{};
+
+#undef NON_MEMBER_OP1
+#undef NON_MEMBER_OP2
+#undef NON_MEMBER_OP3
+#undef NON_MEMBER_OP4
+
+} // namespace policies
+
+}} // namespaces boost::math
+
+
+#endif

Modified: trunk/boost/multiprecision/logged_adaptor.hpp
==============================================================================
--- trunk/boost/multiprecision/logged_adaptor.hpp (original)
+++ trunk/boost/multiprecision/logged_adaptor.hpp 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -6,7 +6,7 @@
 #ifndef BOOST_MATH_LOGGED_ADAPTER_HPP
 #define BOOST_MATH_LOGGED_ADAPTER_HPP
 
-#include <boost/multiprecision/number.hpp>
+#include <boost/multiprecision/traits/extract_exponent_type.hpp>
 
 namespace boost{
 namespace multiprecision{
@@ -38,17 +38,6 @@
 
 namespace backends{
 
-template <class Backend, int cat>
-struct extract_exponent_type
-{
- typedef int type;
-};
-template <class Backend>
-struct extract_exponent_type<Backend, number_kind_floating_point>
-{
- typedef typename Backend::exponent_type type;
-};
-
 template <class Backend>
 struct logged_adaptor
 {
@@ -298,6 +287,7 @@
 template <class Backend>
 inline int eval_fpclassify(const logged_adaptor<Backend>& arg)
 {
+ using default_ops::eval_fpclassify;
    log_prefix_event(arg.value(), "fpclassify");
    int r = eval_fpclassify(arg.value());
    log_postfix_event(arg.value(), r, "fpclassify");
@@ -508,5 +498,9 @@
 
 }} // namespaces boost::math
 
+#undef NON_MEMBER_OP1
+#undef NON_MEMBER_OP2
+#undef NON_MEMBER_OP3
+#undef NON_MEMBER_OP4
 
 #endif

Added: trunk/boost/multiprecision/traits/extract_exponent_type.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/multiprecision/traits/extract_exponent_type.hpp 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -0,0 +1,28 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2012 John Maddock. 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_
+
+#ifndef BOOST_MATH_EXTRACT_EXPONENT_HPP
+#define BOOST_MATH_EXTRACT_EXPONENT_HPP
+
+#include <boost/multiprecision/number.hpp>
+
+namespace boost{
+namespace multiprecision{
+namespace backends{
+
+template <class Backend, int cat>
+struct extract_exponent_type
+{
+ typedef int type;
+};
+template <class Backend>
+struct extract_exponent_type<Backend, number_kind_floating_point>
+{
+ typedef typename Backend::exponent_type type;
+};
+
+}}} // namespaces
+
+#endif

Added: trunk/libs/multiprecision/doc/debugger1.png
==============================================================================
Binary file. No diff available.

Added: trunk/libs/multiprecision/doc/debugger2.png
==============================================================================
Binary file. No diff available.

Added: trunk/libs/multiprecision/doc/debugger3.png
==============================================================================
Binary file. No diff available.

Added: trunk/libs/multiprecision/doc/debugger4.png
==============================================================================
Binary file. No diff available.

Added: trunk/libs/multiprecision/doc/debugger5.png
==============================================================================
Binary file. No diff available.

Added: trunk/libs/multiprecision/doc/debugger6.png
==============================================================================
Binary file. No diff available.

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html (original)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -22,9 +22,9 @@
 <div class="spirit-nav">
 <a accesskey="p" href="../indexes.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="s02.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section id991981">
+<div class="section id991181">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id991981"></a>Function Index</h3></div></div></div>
+<a name="id991181"></a>Function Index</h3></div></div></div>
 <p><a class="link" href="s01.html#idx_id_0">A</a> <a class="link" href="s01.html#idx_id_1">B</a> <a class="link" href="s01.html#idx_id_2">C</a> <a class="link" href="s01.html#idx_id_3">D</a> <a class="link" href="s01.html#idx_id_4">E</a> <a class="link" href="s01.html#idx_id_5">F</a> <a class="link" href="s01.html#idx_id_7">I</a> <a class="link" href="s01.html#idx_id_8">L</a> <a class="link" href="s01.html#idx_id_9">M</a> <a class="link" href="s01.html#idx_id_11">O</a> <a class="link" href="s01.html#idx_id_12">P</a> <a class="link" href="s01.html#idx_id_13">R</a> <a class="link" href="s01.html#idx_id_14">S</a> <a class="link" href="s01.html#idx_id_15">T</a> <a class="link" href="s01.html#idx_id_17">V</a> <a class="link" href="s01.html#idx_id_18">Z</a></p>
 <div class="variablelist"><dl class="variablelist">
 <dt>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html (original)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -22,10 +22,10 @@
 <div class="spirit-nav">
 <a accesskey="p" href="s01.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="s03.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section id995998">
+<div class="section id995591">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id995998"></a>Class Index</h3></div></div></div>
-<p><a class="link" href="s02.html#idx_id_21">C</a> <a class="link" href="s02.html#idx_id_23">E</a> <a class="link" href="s02.html#idx_id_25">G</a> <a class="link" href="s02.html#idx_id_26">I</a> <a class="link" href="s02.html#idx_id_27">L</a> <a class="link" href="s02.html#idx_id_28">M</a> <a class="link" href="s02.html#idx_id_29">N</a> <a class="link" href="s02.html#idx_id_34">T</a></p>
+<a name="id995591"></a>Class Index</h3></div></div></div>
+<p><a class="link" href="s02.html#idx_id_21">C</a> <a class="link" href="s02.html#idx_id_22">D</a> <a class="link" href="s02.html#idx_id_23">E</a> <a class="link" href="s02.html#idx_id_25">G</a> <a class="link" href="s02.html#idx_id_26">I</a> <a class="link" href="s02.html#idx_id_27">L</a> <a class="link" href="s02.html#idx_id_28">M</a> <a class="link" href="s02.html#idx_id_29">N</a> <a class="link" href="s02.html#idx_id_34">T</a></p>
 <div class="variablelist"><dl class="variablelist">
 <dt>
 <a name="idx_id_21"></a><span class="term">C</span>
@@ -42,6 +42,10 @@
 </li>
 </ul></div></dd>
 <dt>
+<a name="idx_id_22"></a><span class="term">D</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/debug_adaptor.html" title="debug_adaptor"><span class="index-entry-level-0">debug_adaptor</span></a></p></li></ul></div></dd>
+<dt>
 <a name="idx_id_23"></a><span class="term">E</span>
 </dt>
 <dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none">

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html (original)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -22,9 +22,9 @@
 <div class="spirit-nav">
 <a accesskey="p" href="s02.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="s04.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
-<div class="section id996458">
+<div class="section id996076">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id996458"></a>Typedef Index</h3></div></div></div>
+<a name="id996076"></a>Typedef Index</h3></div></div></div>
 <p><a class="link" href="s03.html#idx_id_40">C</a> <a class="link" href="s03.html#idx_id_45">I</a> <a class="link" href="s03.html#idx_id_46">L</a> <a class="link" href="s03.html#idx_id_47">M</a> <a class="link" href="s03.html#idx_id_52">S</a> <a class="link" href="s03.html#idx_id_53">T</a> <a class="link" href="s03.html#idx_id_54">U</a></p>
 <div class="variablelist"><dl class="variablelist">
 <dt>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html (original)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -21,9 +21,9 @@
 <div class="spirit-nav">
 <a accesskey="p" href="s03.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a>
 </div>
-<div class="section id997505">
+<div class="section id998761">
 <div class="titlepage"><div><div><h3 class="title">
-<a name="id997505"></a>Index</h3></div></div></div>
+<a name="id998761"></a>Index</h3></div></div></div>
 <p><a class="link" href="s04.html#idx_id_57">A</a> <a class="link" href="s04.html#idx_id_58">B</a> <a class="link" href="s04.html#idx_id_59">C</a> <a class="link" href="s04.html#idx_id_60">D</a> <a class="link" href="s04.html#idx_id_61">E</a> <a class="link" href="s04.html#idx_id_62">F</a> <a class="link" href="s04.html#idx_id_63">G</a> <a class="link" href="s04.html#idx_id_64">I</a> <a class="link" href="s04.html#idx_id_65">L</a> <a class="link" href="s04.html#idx_id_66">M</a> <a class="link" href="s04.html#idx_id_67">N</a> <a class="link" href="s04.html#idx_id_68">O</a> <a class="link" href="s04.html#idx_id_69">P</a> <a class="link" href="s04.html#idx_id_70">R</a> <a class="link" href="s04.html#idx_id_71">S</a> <a class="link" href="s04.html#idx_id_72">T</a> <a class="link" href="s04.html#idx_id_73">U</a> <a class="link" href="s04.html#idx_id_74">V</a> <a class="link" href="s04.html#idx_id_75">Z</a></p>
 <div class="variablelist"><dl class="variablelist">
 <dt>
@@ -237,6 +237,7 @@
 <li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li>
 </ul></div>
 </li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/debug_adaptor.html" title="debug_adaptor"><span class="index-entry-level-0">debug_adaptor</span></a></p></li>
 <li class="listitem" style="list-style-type: none">
 <p><span class="index-entry-level-0">default_precision</span></p>
 <div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut.html (original)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut.html 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -68,7 +68,12 @@
 <dt><span class="section">rational_adaptor</span></dt>
 </dl></dd>
 <dt><span class="section">Miscellaneous Number Types.</span></dt>
-<dd><dl><dt><span class="section">logged_adaptor</span></dt></dl></dd>
+<dd><dl>
+<dt><span class="section">logged_adaptor</span></dt>
+<dt><span class="section">debug_adaptor</span></dt>
+<dt><span class="section"><a href="tut/misc/visualizers.html">Visual C++
+ Debugger Visualizers</a></span></dt>
+</dl></dd>
 <dt><span class="section"><a href="tut/conversions.html">Constructing and
       Interconverting Between Number Types</a></span></dt>
 <dt><span class="section">Generating Random Numbers</span></dt>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html (original)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -6,7 +6,7 @@
 <meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
 <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
 <link rel="up" href="../tut.html" title="Tutorial">
-<link rel="prev" href="misc/logged_adaptor.html" title="logged_adaptor">
+<link rel="prev" href="misc/visualizers.html" title="Visual C++ Debugger Visualizers">
 <link rel="next" href="random.html" title="Generating Random Numbers">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -20,7 +20,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="misc/logged_adaptor.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="random.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="misc/visualizers.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="random.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 <div class="section boost_multiprecision_tut_conversions">
 <div class="titlepage"><div><div><h3 class="title">
@@ -171,7 +171,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="misc/logged_adaptor.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="random.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="misc/visualizers.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="random.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html (original)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -26,7 +26,12 @@
 <div class="titlepage"><div><div><h3 class="title">
 <a name="boost_multiprecision.tut.misc"></a><a class="link" href="misc.html" title="Miscellaneous Number Types.">Miscellaneous Number Types.</a>
 </h3></div></div></div>
-<div class="toc"><dl><dt><span class="section">logged_adaptor</span></dt></dl></div>
+<div class="toc"><dl>
+<dt><span class="section">logged_adaptor</span></dt>
+<dt><span class="section">debug_adaptor</span></dt>
+<dt><span class="section"><a href="misc/visualizers.html">Visual C++
+ Debugger Visualizers</a></span></dt>
+</dl></div>
 <p>
         Backend types listed in this section are predominantly designed to aid debugging.
       </p>

Added: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html
==============================================================================
--- (empty file)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -0,0 +1,99 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>debug_adaptor</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="up" href="../misc.html" title="Miscellaneous Number Types.">
+<link rel="prev" href="logged_adaptor.html" title="logged_adaptor">
+<link rel="next" href="visualizers.html" title="Visual C++ Debugger Visualizers">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="logged_adaptor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="visualizers.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section boost_multiprecision_tut_misc_debug_adaptor">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_multiprecision.tut.misc.debug_adaptor"></a><a class="link" href="debug_adaptor.html" title="debug_adaptor">debug_adaptor</a>
+</h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">debug_adaptor</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">debug_adaptor</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">debug_adaptor</span></code> type
+ is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code>
+ and some other backend type: it acts as a thin wrapper around some other
+ backend to class <code class="computeroutput"><span class="identifier">number</span></code>
+ and intercepts all operations on that object storing the result as a string
+ within itself.
+ </p>
+<p>
+ This type provides <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ support whenever the template argument Backend does so.
+ </p>
+<p>
+ This type is particularly useful when your debugger provides a good view
+ of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code>: when this is the case multiprecision
+ values can easily be inspected in the debugger by looking at the <code class="computeroutput"><span class="identifier">debug_value</span></code> member of <code class="computeroutput"><span class="identifier">debug_adapter</span></code>.
+ The down side of this approach is that runtimes are much slower when using
+ this type. Set against that it can make debugging very much easier, certainly
+ much easier than sprinkling code with <code class="computeroutput"><span class="identifier">printf</span></code>
+ statements.
+ </p>
+<p>
+ When used in conjunction with the Visual C++ debugger visualisers, the
+ value of a multiprecision type that uses this backend is displayed in the
+ debugger just a builtin value would be, here we're inspecting a value of
+ type <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">debug_adapter</span><span class="special">&lt;</span><span class="identifier">cpp_dec_float</span><span class="special">&lt;</span><span class="number">50</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+ <span class="special">&gt;</span></code>:
+ </p>
+<p>
+ <span class="inlinemediaobject"><img src="../../../../debugger1.png" alt="debugger1"></span>
+ </p>
+<p>
+ Otherwise you will need to expand out the view and look at the "debug_value"
+ member:
+ </p>
+<p>
+ <span class="inlinemediaobject"><img src="../../../../debugger2.png" alt="debugger2"></span>
+ </p>
+<p>
+ It works for all the backend types equally too, here it is inspecting a
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">debug_adapter</span><span class="special">&lt;</span><span class="identifier">gmp_rational</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span></code>:
+ </p>
+<p>
+ <span class="inlinemediaobject"><img src="../../../../debugger3.png" alt="debugger3"></span>
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="logged_adaptor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="visualizers.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Modified: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html (original)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -7,7 +7,7 @@
 <link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
 <link rel="up" href="../misc.html" title="Miscellaneous Number Types.">
 <link rel="prev" href="../misc.html" title="Miscellaneous Number Types.">
-<link rel="next" href="../conversions.html" title="Constructing and Interconverting Between Number Types">
+<link rel="next" href="debug_adaptor.html" title="debug_adaptor">
 </head>
 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 <table cellpadding="2" width="100%"><tr>
@@ -20,7 +20,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="../misc.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../conversions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="../misc.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="debug_adaptor.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 <div class="section boost_multiprecision_tut_misc_logged_adaptor">
 <div class="titlepage"><div><div><h4 class="title">
@@ -217,7 +217,7 @@
 </tr></table>
 <hr>
 <div class="spirit-nav">
-<a accesskey="p" href="../misc.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../conversions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="../misc.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="debug_adaptor.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
 </div>
 </body>
 </html>

Added: trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html
==============================================================================
--- (empty file)
+++ trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -0,0 +1,198 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Visual C++ Debugger Visualizers</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="up" href="../misc.html" title="Miscellaneous Number Types.">
+<link rel="prev" href="debug_adaptor.html" title="debug_adaptor">
+<link rel="next" href="../conversions.html" title="Constructing and Interconverting Between Number Types">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="debug_adaptor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../conversions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section boost_multiprecision_tut_misc_visualizers">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_multiprecision.tut.misc.visualizers"></a><a class="link" href="visualizers.html" title="Visual C++ Debugger Visualizers">Visual C++
+ Debugger Visualizers</a>
+</h4></div></div></div>
+<p>
+ Let's face it debugger multiprecision numbers is hard - simply because
+ we can't easily inspect the value of the numbers. Visual C++ provides a
+ partial solution in the shape of "visualizers" which provide
+ improved views of complex data structures, these visualizers need to be
+ added to the <code class="computeroutput"><span class="special">[</span><span class="identifier">Visualizer</span><span class="special">]</span></code> section of <code class="computeroutput"><span class="identifier">autoexp</span><span class="special">.</span><span class="identifier">dat</span></code>
+ located in the <code class="computeroutput"><span class="identifier">Common7</span><span class="special">\</span><span class="identifier">Packages</span><span class="special">\</span><span class="identifier">Debugger</span></code>
+ directory of your Visual Studio installation.
+ </p>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ These visualizers have only been tested with VC10, also given the ability
+ of buggy visualizers to crash your Visual C++ debugger, make sure you
+ back up <code class="computeroutput"><span class="identifier">autoexp</span><span class="special">.</span><span class="identifier">dat</span></code> file before using these!!
+ </p></td></tr>
+</table></div>
+<p>
+ This visualizer provides improved views of <code class="computeroutput"><span class="identifier">debug_adaptor</span></code>:
+ </p>
+<pre class="programlisting">boost::multiprecision::number&lt;boost::multiprecision::backends::debug_adaptor&lt;<span class="bold"><strong>&gt;,</strong></span>&gt;{
+ preview(
+ #(
+ $e.m_backend.debug_value
+ )
+ )
+}
+</pre>
+<p>
+ The next visualizer provides improved views of cpp_int: small numbers are
+ displayed as actual values, while larger numbers are displayed as an array
+ of hexadecimal parts, with the most significant part first.
+ </p>
+<p>
+ Here's what it looks like for small values:
+ </p>
+<p>
+ <span class="inlinemediaobject"><img src="../../../../debugger4.png" alt="debugger4"></span>
+ </p>
+<p>
+ And for larger values:
+ </p>
+<p>
+ <span class="inlinemediaobject"><img src="../../../../debugger5.png" alt="debugger5"></span>
+ </p>
+<p>
+ There is also a <code class="computeroutput"><span class="special">~</span><span class="identifier">raw</span></code>
+ child member that lets you see the actual members of the class:
+ </p>
+<p>
+ <span class="inlinemediaobject"><img src="../../../../debugger6.png" alt="debugger6"></span>
+ </p>
+<p>
+ Here's the visualizer code:
+ </p>
+<pre class="programlisting">boost::multiprecision::number&lt;boost::multiprecision::backends::cpp_int_backend&lt;<span class="bold"><strong>,</strong></span>,1,<span class="bold"><strong>,void&gt;,</strong></span>&gt;{
+ preview(
+ #if($e.m_backend.m_limbs == 1) (
+ #if($e.m_backend.m_sign) ( -1 * (__int64)($e.m_backend.m_wrapper.m_data[0]) ) #else ($e.m_backend.m_wrapper.m_data[0])
+ )
+ #elif(($e.m_backend.m_limbs == 2) &amp;&amp; ($e.m_backend.m_wrapper.m_data[1] &lt; 0x80000000)) (
+ #if($e.m_backend.m_sign) ( -1 * (__int64)($e.m_backend.m_wrapper.m_data[0] | ((__int64)$e.m_backend.m_wrapper.m_data[1] &lt;&lt; 32)) ) #else ($e.m_backend.m_wrapper.m_data[0] | ((__int64)$e.m_backend.m_wrapper.m_data[1] &lt;&lt; 32))
+ ) #else (
+ #( "signbit = ", $e.m_backend.m_sign, " data = ", #array ( expr: $e.m_backend.m_wrapper.m_data[$e.m_backend.m_limbs - $i - 1], size: $e.m_backend.m_limbs ) : [$e,x] )
+ )
+ )
+
+ children (
+ #(
+ ~raw: [$c,!],
+ sign bit: $e.m_backend.m_sign,
+ #array (
+ expr: $e.m_backend.m_wrapper.m_data[$e.m_backend.m_limbs - $i - 1],
+ size: $e.m_backend.m_limbs
+ ) : [$e,x]
+ )
+ )
+}
+
+boost::multiprecision::number&lt;boost::multiprecision::backends::cpp_int_backend&lt;<span class="bold"><strong>,</strong></span>,0,<span class="bold"><strong>,void&gt;,</strong></span>&gt;{
+ preview(
+ #if($e.m_backend.m_limbs == 1) (
+ $e.m_backend.m_wrapper.m_data[0]
+ )
+ #elif($e.m_backend.m_limbs == 2) (
+ $e.m_backend.m_wrapper.m_data[0] | ((__int64)$e.m_backend.m_wrapper.m_data[1] &lt;&lt; 32)
+ ) #else (
+ #array ( expr: $e.m_backend.m_wrapper.m_data[$e.m_backend.m_limbs - $i - 1], size: $e.m_backend.m_limbs ) : [$e,x]
+ )
+ )
+
+ children (
+ #(
+ ~raw: [$c,!],
+ #array (
+ expr: $e.m_backend.m_wrapper.m_data[$e.m_backend.m_limbs - $i - 1],
+ size: $e.m_backend.m_limbs
+ ) : [$e,x]
+ )
+ )
+}
+
+boost::multiprecision::number&lt;boost::multiprecision::backends::cpp_int_backend&lt;0,0,1,<span class="bold"><strong>,</strong></span>&gt;,*&gt;{
+ preview(
+ #if ($e.m_backend.m_internal) (
+ #if($e.m_backend.m_limbs == 1) (
+ #if($e.m_backend.m_sign) ( -1 * (__int64)($e.m_backend.m_data.first) ) #else($e.m_backend.m_data.first)
+ ) #elif(($e.m_backend.m_limbs == 2) &amp;&amp; ($e.m_backend.m_data.la[1] &lt; 0x80000000)) (
+ #if($e.m_backend.m_sign) ( -1 * (__int64)($e.m_backend.m_data.double_first) ) #else($e.m_backend.m_data.double_first)
+ ) #else(
+ #( "signbit = ", $e.m_backend.m_sign, " data = ", #array ( expr: $e.m_backend.m_data.la[$e.m_backend.m_limbs - $i - 1], size: $e.m_backend.m_limbs ) : [$e,x] )
+ )
+ ) #else(
+ #if($e.m_backend.m_limbs == 1) (
+ #if($e.m_backend.m_sign) ( -1 * (__int64)($e.m_backend.m_data.ld.data[0]) ) #else($e.m_backend.m_data.ld.data[0])
+ ) #elif(($e.m_backend.m_limbs == 2) &amp;&amp; ($e.m_backend.m_data.ld.data[1] &lt; 0x80000000)) (
+ #if($e.m_backend.m_sign) ( -1 * (__int64)($e.m_backend.m_data.ld.data[0] | ((__int64)$e.m_backend.m_data.ld.data[1] &lt;&lt; 32)) ) #else($e.m_backend.m_data.ld.data[0] | ((__int64)$e.m_backend.m_data.ld.data[1] &lt;&lt; 32))
+ ) #else(
+ #( "signbit = ", $e.m_backend.m_sign, " data = ", #array ( expr: $e.m_backend.m_data.ld.data[$e.m_backend.m_limbs - $i - 1], size: $e.m_backend.m_limbs ) : [$e,x] )
+ )
+ )
+ )
+
+ children (
+ #if ($e.m_backend.m_internal) (
+ #if($e.m_backend.m_limbs == 1) (
+ #(value: $e.m_backend.m_data.first)
+ ) #elif($e.m_backend.m_limbs == 1) (
+ #(value: $e.m_backend.m_data.double_first)
+ ) #else (
+ #(
+ sign bit: $e.m_backend.m_sign,
+ #array (
+ expr: $e.m_backend.m_data.la[$e.m_backend.m_limbs - $i - 1],
+ size: $e.m_backend.m_limbs
+ ) : [$e,x]
+ )
+ )
+ ) #else (
+ #(
+ ~raw: [$c,!],
+ sign bit: $e.m_backend.m_sign,
+ #array (
+ expr: $e.m_backend.m_data.ld.data[$e.m_backend.m_limbs - $i - 1],
+ size: $e.m_backend.m_limbs
+ ) : [$e,x]
+ )
+ )
+ )
+}
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2002-2012 John Maddock and Christopher Kormanyos<p>
+ 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)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="debug_adaptor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../conversions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Modified: trunk/libs/multiprecision/doc/html/index.html
==============================================================================
--- trunk/libs/multiprecision/doc/html/index.html (original)
+++ trunk/libs/multiprecision/doc/html/index.html 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -83,7 +83,12 @@
 <dt><span class="section">rational_adaptor</span></dt>
 </dl></dd>
 <dt><span class="section">Miscellaneous Number Types.</span></dt>
-<dd><dl><dt><span class="section">logged_adaptor</span></dt></dl></dd>
+<dd><dl>
+<dt><span class="section">logged_adaptor</span></dt>
+<dt><span class="section">debug_adaptor</span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/misc/visualizers.html">Visual C++
+ Debugger Visualizers</a></span></dt>
+</dl></dd>
 <dt><span class="section"><a href="boost_multiprecision/tut/conversions.html">Constructing and
       Interconverting Between Number Types</a></span></dt>
 <dt><span class="section">Generating Random Numbers</span></dt>
@@ -140,7 +145,7 @@
 </div>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><p><small>Last revised: January 15, 2013 at 11:39:36 GMT</small></p></td>
+<td align="left"><p><small>Last revised: January 17, 2013 at 12:12:57 GMT</small></p></td>
 <td align="right"><div class="copyright-footer"></div></td>
 </tr></table>
 <hr>

Modified: trunk/libs/multiprecision/doc/multiprecision.qbk
==============================================================================
--- trunk/libs/multiprecision/doc/multiprecision.qbk (original)
+++ trunk/libs/multiprecision/doc/multiprecision.qbk 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -1254,6 +1254,184 @@
 
 [endsect]
 
+[section:debug_adaptor debug_adaptor]
+
+`#include <boost/multiprecision/debug_adaptor.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ template <Backend>
+ class debug_adaptor;
+
+ }} // namespaces
+
+The `debug_adaptor` type is used in conjunction with `number` and some other backend type: it acts as a thin wrapper around
+some other backend to class `number` and intercepts all operations on that object storing the result as a string within itself.
+
+This type provides `numeric_limits` support whenever the template argument Backend does so.
+
+This type is particularly useful when your debugger provides a good view of `std::string`: when this is the case
+multiprecision values can easily be inspected in the debugger by looking at the `debug_value` member of `debug_adapter`.
+The down side of this approach is that runtimes are much slower when using this type. Set against that it can make
+debugging very much easier, certainly much easier than sprinkling code with `printf` statements.
+
+When used in conjunction with the Visual C++ debugger visualisers, the value of a multiprecision type that uses this
+backend is displayed in the debugger just a builtin value would be, here we're inspecting a value of type
+`number<debug_adapter<cpp_dec_float<50> > >`:
+
+[$../debugger1.png]
+
+Otherwise you will need to expand out the view and look at the "debug_value" member:
+
+[$../debugger2.png]
+
+It works for all the backend types equally too, here it is inspecting a `number<debug_adapter<gmp_rational> >`:
+
+[$../debugger3.png]
+
+
+[endsect]
+
+[section:visualizers Visual C++ Debugger Visualizers]
+
+Let's face it debugger multiprecision numbers is hard - simply because we can't easily inspect the value of the numbers.
+Visual C++ provides a partial solution in the shape of "visualizers" which provide improved views of complex data structures,
+these visualizers need to be added to the `[Visualizer]` section of `autoexp.dat` located in the `Common7\Packages\Debugger`
+directory of your Visual Studio installation.
+
+[note These visualizers have only been tested with VC10, also given the ability of buggy visualizers to crash your Visual C++
+debugger, make sure you back up `autoexp.dat` file before using these!!]
+
+This visualizer provides improved views of `debug_adaptor`:
+
+[pre
+boost::multiprecision::number<boost::multiprecision::backends::debug_adaptor<*>,*>{
+ preview(
+ \#(
+ \$e.m_backend.debug_value
+ )
+ )
+}
+]
+
+The next visualizer provides improved views of cpp_int: small numbers are displayed as actual values, while larger numbers are
+displayed as an array of hexadecimal parts, with the most significant part first.
+
+Here's what it looks like for small values:
+
+[$../debugger4.png]
+
+And for larger values:
+
+[$../debugger5.png]
+
+There is also a `~raw` child member that
+lets you see the actual members of the class:
+
+[$../debugger6.png]
+
+Here's the visualizer code:
+
+[pre
+boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<*,*,1,*,void>,*>{
+ preview(
+ \#if(\$e.m_backend.m_limbs == 1) (
+ \#if(\$e.m_backend.m_sign) ( -1 * (__int64)(\$e.m_backend.m_wrapper.m_data\[0\]) ) \#else (\$e.m_backend.m_wrapper.m_data\[0\])
+ )
+ \#elif((\$e.m_backend.m_limbs == 2) && (\$e.m_backend.m_wrapper.m_data\[1\] < 0x80000000)) (
+ \#if(\$e.m_backend.m_sign) ( -1 * (__int64)(\$e.m_backend.m_wrapper.m_data\[0\] | ((__int64)\$e.m_backend.m_wrapper.m_data\[1\] << 32)) ) \#else (\$e.m_backend.m_wrapper.m_data\[0\] | ((__int64)\$e.m_backend.m_wrapper.m_data\[1\] << 32))
+ ) \#else (
+ \#( "signbit = ", \$e.m_backend.m_sign, " data = ", \#array ( expr: \$e.m_backend.m_wrapper.m_data\[\$e.m_backend.m_limbs - \$i - 1\], size: \$e.m_backend.m_limbs ) : \[\$e,x\] )
+ )
+ )
+
+ children (
+ \#(
+ \~raw: \[\$c,!\],
+ sign bit: \$e.m_backend.m_sign,
+ \#array (
+ expr: \$e.m_backend.m_wrapper.m_data\[\$e.m_backend.m_limbs - \$i - 1\],
+ size: \$e.m_backend.m_limbs
+ ) : \[\$e,x\]
+ )
+ )
+}
+
+boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<*,*,0,*,void>,*>{
+ preview(
+ \#if(\$e.m_backend.m_limbs == 1) (
+ \$e.m_backend.m_wrapper.m_data\[0\]
+ )
+ \#elif(\$e.m_backend.m_limbs == 2) (
+ \$e.m_backend.m_wrapper.m_data\[0\] | ((__int64)\$e.m_backend.m_wrapper.m_data\[1\] << 32)
+ ) \#else (
+ \#array ( expr: \$e.m_backend.m_wrapper.m_data\[\$e.m_backend.m_limbs - \$i - 1\], size: \$e.m_backend.m_limbs ) : \[\$e,x\]
+ )
+ )
+
+ children (
+ \#(
+ \~raw: \[\$c,!\],
+ \#array (
+ expr: \$e.m_backend.m_wrapper.m_data\[\$e.m_backend.m_limbs - \$i - 1\],
+ size: \$e.m_backend.m_limbs
+ ) : \[\$e,x\]
+ )
+ )
+}
+
+boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<0,0,1,*,*>,*>{
+ preview(
+ \#if (\$e.m_backend.m_internal) (
+ \#if(\$e.m_backend.m_limbs == 1) (
+ \#if(\$e.m_backend.m_sign) ( -1 * (__int64)(\$e.m_backend.m_data.first) ) \#else(\$e.m_backend.m_data.first)
+ ) \#elif((\$e.m_backend.m_limbs == 2) && (\$e.m_backend.m_data.la\[1\] < 0x80000000)) (
+ \#if(\$e.m_backend.m_sign) ( -1 * (__int64)(\$e.m_backend.m_data.double_first) ) \#else(\$e.m_backend.m_data.double_first)
+ ) \#else(
+ \#( "signbit = ", \$e.m_backend.m_sign, " data = ", \#array ( expr: \$e.m_backend.m_data.la\[\$e.m_backend.m_limbs - \$i - 1\], size: \$e.m_backend.m_limbs ) : \[\$e,x\] )
+ )
+ ) \#else(
+ \#if(\$e.m_backend.m_limbs == 1) (
+ \#if(\$e.m_backend.m_sign) ( -1 * (__int64)(\$e.m_backend.m_data.ld.data\[0\]) ) \#else(\$e.m_backend.m_data.ld.data\[0\])
+ ) \#elif((\$e.m_backend.m_limbs == 2) && (\$e.m_backend.m_data.ld.data\[1\] < 0x80000000)) (
+ \#if(\$e.m_backend.m_sign) ( -1 * (__int64)(\$e.m_backend.m_data.ld.data\[0\] | ((__int64)\$e.m_backend.m_data.ld.data\[1\] << 32)) ) \#else(\$e.m_backend.m_data.ld.data\[0\] | ((__int64)\$e.m_backend.m_data.ld.data\[1\] << 32))
+ ) \#else(
+ \#( "signbit = ", \$e.m_backend.m_sign, " data = ", \#array ( expr: \$e.m_backend.m_data.ld.data\[\$e.m_backend.m_limbs - \$i - 1\], size: \$e.m_backend.m_limbs ) : \[\$e,x\] )
+ )
+ )
+ )
+
+ children (
+ \#if (\$e.m_backend.m_internal) (
+ \#if(\$e.m_backend.m_limbs == 1) (
+ \#(value: \$e.m_backend.m_data.first)
+ ) \#elif(\$e.m_backend.m_limbs == 1) (
+ \#(value: \$e.m_backend.m_data.double_first)
+ ) \#else (
+ \#(
+ sign bit: \$e.m_backend.m_sign,
+ \#array (
+ expr: \$e.m_backend.m_data.la\[\$e.m_backend.m_limbs - \$i - 1\],
+ size: \$e.m_backend.m_limbs
+ ) : \[\$e,x\]
+ )
+ )
+ ) \#else (
+ \#(
+ \~raw: \[\$c,!\],
+ sign bit: \$e.m_backend.m_sign,
+ \#array (
+ expr: \$e.m_backend.m_data.ld.data\[\$e.m_backend.m_limbs - \$i - 1\],
+ size: \$e.m_backend.m_limbs
+ ) : \[\$e,x\]
+ )
+ )
+ )
+}
+]
+
+[endsect]
+
 [endsect]
 
 [section:conversions Constructing and Interconverting Between Number Types]

Added: trunk/libs/multiprecision/example/debug_adaptor_snips.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/multiprecision/example/debug_adaptor_snips.cpp 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -0,0 +1,40 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 John Maddock. 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_
+
+#include <boost/multiprecision/mpfr.hpp>
+#include <boost/multiprecision/debug_adaptor.hpp>
+#include <iostream>
+
+void t1()
+{
+ //[debug_adaptor_eg
+ //=#include <boost/multiprecision/debug_adaptor.hpp>
+ //=#include <boost/multiprecision/cpp_dec_float.hpp>
+
+ using namespace boost::multiprecision;
+
+ typedef number<debug_adaptor<cpp_dec_float<50> > > fp_type;
+
+ fp_type denom = 1;
+ fp_type sum = 1;
+
+ for(unsigned i = 2; i < 50; ++i)
+ {
+ denom *= i;
+ sum += 1 / denom;
+ }
+
+ std::cout << std::setprecision(std::numeric_limits<fp_type>::digits) << sum << std::endl;
+ //]
+}
+
+int main()
+{
+ t1();
+ return 0;
+}
+
+
+

Modified: trunk/libs/multiprecision/test/Jamfile.v2
==============================================================================
--- trunk/libs/multiprecision/test/Jamfile.v2 (original)
+++ trunk/libs/multiprecision/test/Jamfile.v2 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -104,6 +104,9 @@
 run test_arithmetic_logged_1.cpp ;
 run test_arithmetic_logged_2.cpp ;
 
+run test_arithmetic_dbg_adptr1.cpp ;
+run test_arithmetic_dbg_adptr2.cpp ;
+
 run test_arithmetic_mpfi_50.cpp mpfi mpfr gmp : : : [ check-target-builds ../config//has_mpfi : : <build>no ] ;
 
 run test_numeric_limits.cpp

Added: trunk/libs/multiprecision/test/test_arithmetic_dbg_adptr1.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/multiprecision/test/test_arithmetic_dbg_adptr1.cpp 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2012 John Maddock. 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_
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/debug_adaptor.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#include "test_arithmetic.hpp"
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::debug_adaptor<boost::multiprecision::cpp_dec_float<50> > > >();
+ return boost::report_errors();
+}
+

Added: trunk/libs/multiprecision/test/test_arithmetic_dbg_adptr2.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/multiprecision/test/test_arithmetic_dbg_adptr2.cpp 2013-01-17 07:23:21 EST (Thu, 17 Jan 2013)
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2012 John Maddock. 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_
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/debug_adaptor.hpp>
+#include <boost/multiprecision/cpp_int.hpp>
+#include "test_arithmetic.hpp"
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::debug_adaptor<boost::multiprecision::cpp_int_backend<> > > >();
+ return boost::report_errors();
+}
+


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