$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r73450 - in sandbox/e_float: boost/e_float libs/e_float/src/e_float/efx
From: e_float_at_[hidden]
Date: 2011-07-30 15:26:48
Author: christopher_kormanyos
Date: 2011-07-30 15:26:48 EDT (Sat, 30 Jul 2011)
New Revision: 73450
URL: http://svn.boost.org/trac/boost/changeset/73450
Log:
- Refined write functions to std::ostream.
Text files modified: 
   sandbox/e_float/boost/e_float/e_float_efx.hpp                |     2 +-                                      
   sandbox/e_float/libs/e_float/src/e_float/efx/e_float_efx.cpp |    39 +++++++++++++++++++++------------------ 
   2 files changed, 22 insertions(+), 19 deletions(-)
Modified: sandbox/e_float/boost/e_float/e_float_efx.hpp
==============================================================================
--- sandbox/e_float/boost/e_float/e_float_efx.hpp	(original)
+++ sandbox/e_float/boost/e_float/e_float_efx.hpp	2011-07-30 15:26:48 EDT (Sat, 30 Jul 2011)
@@ -181,7 +181,7 @@
     private:
       virtual void wr_string(std::string& str, std::ostream& os) const;
       void wr_string_scientific(std::string& str, const INT64 my_exp, const std::size_t os_precision, const bool my_showpos, const bool my_uppercase) const;
-      void wr_string_fixed     (std::string& str, const INT64 my_exp, const std::size_t os_precision, const bool my_showpos, const bool my_showpoint, const bool use_pad_when_above_one = true) const;
+      void wr_string_fixed     (std::string& str, const INT64 my_exp, const std::size_t os_precision, const bool my_showpos, const bool my_showpoint, const bool trim_trailing_zeros = false) const;
       virtual bool rd_string(const char* const s);
     };
   }
Modified: sandbox/e_float/libs/e_float/src/e_float/efx/e_float_efx.cpp
==============================================================================
--- sandbox/e_float/libs/e_float/src/e_float/efx/e_float_efx.cpp	(original)
+++ sandbox/e_float/libs/e_float/src/e_float/efx/e_float_efx.cpp	2011-07-30 15:26:48 EDT (Sat, 30 Jul 2011)
@@ -1592,7 +1592,7 @@
     }
     else if(use_fixed)
     {
-      wr_string_fixed(str, my_exp, os_precision, my_showpos, my_showpoint, false);
+      wr_string_fixed(str, my_exp, os_precision, my_showpos, my_showpoint, true);
     }
   }
 }
@@ -1641,7 +1641,7 @@
   }
 }
 
-void efx::e_float::wr_string_fixed(std::string& str, const INT64 my_exp, const std::size_t os_precision, const bool my_showpos, const bool my_showpoint, const bool use_pad_when_above_one) const
+void efx::e_float::wr_string_fixed(std::string& str, const INT64 my_exp, const std::size_t os_precision, const bool my_showpos, const bool my_showpoint, const bool trim_trailing_zeros) const
 {
   const std::size_t str_len = str.length();
 
@@ -1663,30 +1663,33 @@
   }
   else
   {
-    // Insert the decimal point, but only if showpoint is set
-    // and the string does not represent a whole number.
+    // Insert the decimal point.
     const std::size_t my_exp_plus_one = static_cast<std::size_t>(my_exp + 1);
 
-    if((!my_showpoint) && (my_exp_plus_one == str.length()))
+    str.insert(my_exp_plus_one, ".");
+
+    // Zero-extend the string to the given precision if necessary.
+    const INT64 n_pad = static_cast<INT64>(os_precision) - static_cast<INT64>(static_cast<INT64>(str_len) - (my_exp + 1));
+
+    if(n_pad > static_cast<INT64>(0))
     {
+      str.insert(str.end(), static_cast<std::size_t>(n_pad), static_cast<char>('0'));
     }
-    else
-    {
-      str.insert(static_cast<std::size_t>(my_exp + 1), ".");
-
-      // Zero-extend the string to the given precision if necessary.
-      if(use_pad_when_above_one)
-      {
-        const INT64 n_pad = static_cast<INT64>(os_precision) - static_cast<INT64>(static_cast<INT64>(str_len) - (my_exp + 1));
+  }
 
-        if(n_pad > static_cast<INT64>(0))
-        {
-          str.insert(str.end(), static_cast<std::size_t>(n_pad), static_cast<char>('0'));
-        }
-      }
+  if(trim_trailing_zeros)
+  {
+    while(str.back() == static_cast<char>('0'))
+    {
+      str.pop_back();
     }
   }
 
+  if((str.back() == static_cast<char>('.')) && (!my_showpoint))
+  {
+    str.pop_back();
+  }
+
   // Append the sign.
   if(isneg())
   {