$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r75597 - sandbox/big_number/boost/multiprecision
From: john_at_[hidden]
Date: 2011-11-21 14:20:38
Author: johnmaddock
Date: 2011-11-21 14:20:35 EST (Mon, 21 Nov 2011)
New Revision: 75597
URL: http://svn.boost.org/trac/boost/changeset/75597
Log:
Fix showpos support.
Text files modified: 
   sandbox/big_number/boost/multiprecision/cpp_float.hpp |     3 +++                                     
   sandbox/big_number/boost/multiprecision/gmp.hpp       |     8 ++++++++                                
   sandbox/big_number/boost/multiprecision/mpfr.hpp      |     8 ++++++++                                
   3 files changed, 19 insertions(+), 0 deletions(-)
Modified: sandbox/big_number/boost/multiprecision/cpp_float.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/cpp_float.hpp	(original)
+++ sandbox/big_number/boost/multiprecision/cpp_float.hpp	2011-11-21 14:20:35 EST (Mon, 21 Nov 2011)
@@ -1644,6 +1644,7 @@
    bool scientific = (f & std::ios_base::scientific) == std::ios_base::scientific;
    bool fixed      = (f & std::ios_base::fixed) == std::ios_base::fixed;
    bool showpoint  = (f & std::ios_base::showpoint) == std::ios_base::showpoint;
+   bool shopos     = (f & std::ios_base::showpos) == std::ios_base::showpos;
 
    std::string str;
    boost::int64_t my_exp = order();
@@ -1756,6 +1757,8 @@
    }
    if(isneg())
       str.insert(0, 1, '-');
+   else if(shopos)
+      str.insert(0, 1, '+');
    return str;
 }
 
Modified: sandbox/big_number/boost/multiprecision/gmp.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/gmp.hpp	(original)
+++ sandbox/big_number/boost/multiprecision/gmp.hpp	2011-11-21 14:20:35 EST (Mon, 21 Nov 2011)
@@ -164,6 +164,7 @@
       bool scientific = (f & std::ios_base::scientific) == std::ios_base::scientific;
       bool fixed      = (f & std::ios_base::fixed) == std::ios_base::fixed;
       bool showpoint  = (f & std::ios_base::showpoint) == std::ios_base::showpoint;
+      bool showpos    = (f & std::ios_base::showpos) == std::ios_base::showpos;
 
       std::string result;
       mp_exp_t e;
@@ -173,7 +174,12 @@
       const char* ps = mpf_get_str (0, &e, 10, static_cast<std::size_t>(digits), m_data);
       std::ptrdiff_t sl = std::strlen(ps);
       if(sl == 0)
+      {
+         result = scientific ? "0.0e0" : showpoint ? "0.0" : "0";
+         if(showpos)
+            result.insert(0, 1, '+');
          return "0";
+      }
       if(*ps == '-')
          --sl; // number of digits excluding sign.
       result = ps;
@@ -209,6 +215,8 @@
          if(e)
             result += "e" + lexical_cast<std::string>(e);
       }
+      if(shopos && (str[0] != '-'))
+         str.insert(0, 1, '+');
       mp_get_memory_functions(&alloc_func_ptr, &realloc_func_ptr, &free_func_ptr);
       (*free_func_ptr)((void*)ps, std::strlen(ps) + 1);
       return result;
Modified: sandbox/big_number/boost/multiprecision/mpfr.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/mpfr.hpp	(original)
+++ sandbox/big_number/boost/multiprecision/mpfr.hpp	2011-11-21 14:20:35 EST (Mon, 21 Nov 2011)
@@ -161,6 +161,7 @@
       bool scientific = (f & std::ios_base::scientific) == std::ios_base::scientific;
       bool fixed      = (f & std::ios_base::fixed) == std::ios_base::fixed;
       bool showpoint  = (f & std::ios_base::showpoint) == std::ios_base::showpoint;
+      bool showpos    = (f & std::ios_base::showpos) == std::ios_base::showpos;
 
       std::string result;
       mp_exp_t e;
@@ -168,7 +169,12 @@
       std::ptrdiff_t sl = std::strlen(ps);
       int chars = sl;
       if(sl == 0)
+      {
+         result = scientific ? "0.0e0" : showpoint ? "0.0" : "0";
+         if(showpos)
+            result.insert(0, 1, '+');
          return "0";
+      }
       while(ps[chars-1] == '0')
          --chars;
       ps[chars] = 0;
@@ -209,6 +215,8 @@
          if(e)
             result += "e" + lexical_cast<std::string>(e);
       }
+      if(shopos && (str[0] != '-'))
+         str.insert(0, 1, '+');
       mpfr_free_str(ps);
       return result;
    }