$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r56476 - sandbox/numeric_adaptor/boost/numeric_adaptor
From: barend.gehrels_at_[hidden]
Date: 2009-09-29 15:47:20
Author: barendgehrels
Date: 2009-09-29 15:47:19 EDT (Tue, 29 Sep 2009)
New Revision: 56476
URL: http://svn.boost.org/trac/boost/changeset/56476
Log:
Added constructors with char const*
Added stream operators
Made free functions inline
Text files modified: 
   sandbox/numeric_adaptor/boost/numeric_adaptor/cln_value_type.hpp |    47 +++++++++++++++++++++++++++++++------   
   sandbox/numeric_adaptor/boost/numeric_adaptor/gmp_value_type.hpp |    50 ++++++++++++++++++++++++++++++++++----- 
   2 files changed, 82 insertions(+), 15 deletions(-)
Modified: sandbox/numeric_adaptor/boost/numeric_adaptor/cln_value_type.hpp
==============================================================================
--- sandbox/numeric_adaptor/boost/numeric_adaptor/cln_value_type.hpp	(original)
+++ sandbox/numeric_adaptor/boost/numeric_adaptor/cln_value_type.hpp	2009-09-29 15:47:19 EDT (Tue, 29 Sep 2009)
@@ -10,6 +10,9 @@
 #ifndef BOOST_NUMERIC_ADAPTOR_CLN_VALUE_TYPE_HPP
 #define BOOST_NUMERIC_ADAPTOR_CLN_VALUE_TYPE_HPP
 
+// CLN can be downloaded from http://www.ginac.de/CLN/
+
+#include <ostream>
 
 #include <cln/cln.h>
 #include <cln/float.h>
@@ -25,7 +28,7 @@
     as being of type cl_F.
 
 */
-struct cln_value_type //: public default_value_type<cln_policy, cln::cl_F>
+struct cln_value_type
 {
     cln_value_type()
         : m_value(cln::cl_float(0.0, cln::float_format(256)))
@@ -38,6 +41,14 @@
         m_value = cln::cl_float(v, cln::float_format(256));
     }
 
+    cln_value_type(char const* s)
+        : m_value(cln::cl_float(0.0, cln::float_format(256)))
+    {
+        // Conversions from `const char *' are provided [...]
+        m_value = s;
+    }
+
+
     cln_value_type(cln::cl_F const& v)
         : m_value(v)
     {}
@@ -104,6 +115,20 @@
         return cln_value_type(-v.m_value);
     }
 
+
+    template <typename Char, typename Traits>
+    friend inline std::basic_ostream<Char, Traits>& operator<<(
+            std::basic_ostream<Char, Traits>& os, cln_value_type const& v)
+    {
+        cln::cl_print_flags flags;
+        flags.default_float_format = cln::float_format_dfloat;
+        cln::print_float(os, flags, v.m_value);
+        return os;
+    }
+
+
+
+
     cln::cl_F m_value;
 };
 
@@ -111,37 +136,43 @@
 } // namespace numeric_adaptor
 
 
-numeric_adaptor::cln_value_type abs(numeric_adaptor::cln_value_type const& v)
+inline numeric_adaptor::cln_value_type abs(
+        numeric_adaptor::cln_value_type const& v)
 {
     return numeric_adaptor::cln_value_type(cln::abs(v.m_value));
 }
 
-numeric_adaptor::cln_value_type sqrt(numeric_adaptor::cln_value_type const& v)
+inline numeric_adaptor::cln_value_type sqrt(
+        numeric_adaptor::cln_value_type const& v)
 {
     return numeric_adaptor::cln_value_type(cln::sqrt(v.m_value));
 }
 
-numeric_adaptor::cln_value_type cos(numeric_adaptor::cln_value_type const& v)
+inline numeric_adaptor::cln_value_type cos(
+        numeric_adaptor::cln_value_type const& v)
 {
     return numeric_adaptor::cln_value_type(cln::cos(v.m_value));
 }
 
-numeric_adaptor::cln_value_type sin(numeric_adaptor::cln_value_type const& v)
+inline numeric_adaptor::cln_value_type sin(
+        numeric_adaptor::cln_value_type const& v)
 {
     return numeric_adaptor::cln_value_type(cln::sin(v.m_value));
 }
 
-numeric_adaptor::cln_value_type tan(numeric_adaptor::cln_value_type const& v)
+inline numeric_adaptor::cln_value_type tan(
+        numeric_adaptor::cln_value_type const& v)
 {
     return numeric_adaptor::cln_value_type(cln::tan(v.m_value));
 }
 
-numeric_adaptor::cln_value_type atan(numeric_adaptor::cln_value_type const& v)
+inline numeric_adaptor::cln_value_type atan(
+        numeric_adaptor::cln_value_type const& v)
 {
     return numeric_adaptor::cln_value_type(cln::atan(v.m_value));
 }
 
-numeric_adaptor::cln_value_type hypot(
+inline numeric_adaptor::cln_value_type hypot(
     numeric_adaptor::cln_value_type const& a,
     numeric_adaptor::cln_value_type const& b)
 {
Modified: sandbox/numeric_adaptor/boost/numeric_adaptor/gmp_value_type.hpp
==============================================================================
--- sandbox/numeric_adaptor/boost/numeric_adaptor/gmp_value_type.hpp	(original)
+++ sandbox/numeric_adaptor/boost/numeric_adaptor/gmp_value_type.hpp	2009-09-29 15:47:19 EDT (Tue, 29 Sep 2009)
@@ -30,6 +30,13 @@
         mpf_set_d(m_value, v);
     }
 
+    gmp_value_type(char const* s)
+    {
+        mpf_init(m_value);
+        mpf_set_str(m_value, s, 10);
+    }
+
+
     gmp_value_type(mpf_t& v)
     {
         mpf_init(m_value);
@@ -129,6 +136,29 @@
         return r;
     }
 
+
+    template <typename Char, typename Traits>
+    friend inline std::basic_ostream<Char, Traits>& operator<<(
+            std::basic_ostream<Char, Traits>& os, gmp_value_type const& v)
+    {
+        mp_exp_t exponent;
+
+        char* s = mpf_get_str(NULL, &exponent, 10, 0, v.m_value);
+
+        if (exponent != 0)
+        {
+            os << "0." << s << "e" << exponent;
+        }
+        else
+        {
+            os << s;
+        }
+        free(s);
+        return os;
+    }
+
+
+
     mpf_t m_value;
 };
 
@@ -136,41 +166,47 @@
 } // namespace numeric_adaptor
 
 
-numeric_adaptor::gmp_value_type abs(numeric_adaptor::gmp_value_type const& v)
+inline numeric_adaptor::gmp_value_type abs(
+        numeric_adaptor::gmp_value_type const& v)
 {
     numeric_adaptor::gmp_value_type r;
     mpf_abs(r.m_value, v.m_value);
     return r;
 }
 
-numeric_adaptor::gmp_value_type sqrt(numeric_adaptor::gmp_value_type const& v)
+inline numeric_adaptor::gmp_value_type sqrt(
+        numeric_adaptor::gmp_value_type const& v)
 {
     numeric_adaptor::gmp_value_type r;
     mpf_sqrt(r.m_value, v.m_value);
     return r;
 }
 
-numeric_adaptor::gmp_value_type cos(numeric_adaptor::gmp_value_type const& v)
+inline numeric_adaptor::gmp_value_type cos(
+        numeric_adaptor::gmp_value_type const& v)
 {
     return numeric_adaptor::gmp_value_type(std::cos(v));
 }
 
-numeric_adaptor::gmp_value_type sin(numeric_adaptor::gmp_value_type const& v)
+inline numeric_adaptor::gmp_value_type sin(
+        numeric_adaptor::gmp_value_type const& v)
 {
     return numeric_adaptor::gmp_value_type(std::sin(v));
 }
 
-numeric_adaptor::gmp_value_type tan(numeric_adaptor::gmp_value_type const& v)
+inline numeric_adaptor::gmp_value_type tan(
+        numeric_adaptor::gmp_value_type const& v)
 {
     return numeric_adaptor::gmp_value_type(std::tan(v));
 }
 
-numeric_adaptor::gmp_value_type atan(numeric_adaptor::gmp_value_type const& v)
+inline numeric_adaptor::gmp_value_type atan(
+        numeric_adaptor::gmp_value_type const& v)
 {
     return numeric_adaptor::gmp_value_type(std::atan(v));
 }
 
-numeric_adaptor::gmp_value_type hypot(
+inline numeric_adaptor::gmp_value_type hypot(
     numeric_adaptor::gmp_value_type const& a,
     numeric_adaptor::gmp_value_type const& b)
 {