[PPL-devel] [GIT] ppl/ppl(master): Fixed and uniformed iomanip uses.

Abramo Bagnara abramo.bagnara at gmail.com
Sun Feb 26 20:15:16 CET 2012


Module: ppl/ppl
Branch: master
Commit: 9cdc037cdf468b82a6d14217c6c1caad531b0bbd
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=9cdc037cdf468b82a6d14217c6c1caad531b0bbd

Author: Abramo Bagnara <abramo.bagnara at gmail.com>
Date:   Sun Feb 26 20:14:48 2012 +0100

Fixed and uniformed iomanip uses.

---

 src/Checked_Number.templates.hh |   13 +++++++------
 src/Interval.templates.hh       |    2 +-
 src/Interval_Info.inlines.hh    |   18 +++++++++---------
 src/Row_Flags.cc                |   24 ++++++++++--------------
 4 files changed, 27 insertions(+), 30 deletions(-)

diff --git a/src/Checked_Number.templates.hh b/src/Checked_Number.templates.hh
index d756717..5c6c596 100644
--- a/src/Checked_Number.templates.hh
+++ b/src/Checked_Number.templates.hh
@@ -39,12 +39,11 @@ ascii_dump(std::ostream& s, const T& t) {
   else {
     // An inexact data type (probably floating point):
     // first dump its hexadecimal representation ...
-    const std::ios_base::fmtflags old_flags = s.flags();
-    s << std::hex;
+    const std::ios::fmtflags old_flags = s.setf(std::ios::hex,
+                                                std::ios::basefield);
     const unsigned char* p = reinterpret_cast<const unsigned char*>(&t);
     for (unsigned i = 0; i < sizeof(T); ++i) {
-      s << std::setw(2) << std::setfill('0');
-      s << static_cast<unsigned>(p[i]);
+      s << std::setw(2) << std::setfill('0') << static_cast<unsigned>(p[i]);
     }
     s.flags(old_flags);
     // ... and then pretty print it for readability.
@@ -55,9 +54,11 @@ ascii_dump(std::ostream& s, const T& t) {
 template <typename T>
 typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
 ascii_load(std::istream& s, T& t) {
-  if (std::numeric_limits<T>::is_exact)
+  if (std::numeric_limits<T>::is_exact) {
     // An exact data type: input from pretty printed version is accurate.
-    return s >> t;
+    s >> t;
+    return !s.fail();
+  }
   else {
     // An inexact data type (probably floating point):
     // first load its hexadecimal representation ...
diff --git a/src/Interval.templates.hh b/src/Interval.templates.hh
index 6e9dbc7..d785ac1 100644
--- a/src/Interval.templates.hh
+++ b/src/Interval.templates.hh
@@ -291,7 +291,7 @@ operator>>(std::istream& is, Interval<Boundary, Info>& x) {
   unexpected:
     is.unget();
   fail:
-    is.setstate(std::ios_base::failbit);
+    is.setstate(std::ios::failbit);
     return is;
   }
 
diff --git a/src/Interval_Info.inlines.hh b/src/Interval_Info.inlines.hh
index da03cc8..4453019 100644
--- a/src/Interval_Info.inlines.hh
+++ b/src/Interval_Info.inlines.hh
@@ -77,20 +77,20 @@ Interval_Info_Bitset<T, Policy>::m_swap(Interval_Info_Bitset<T, Policy>& y) {
 template <typename T, typename Policy>
 inline void
 Interval_Info_Bitset<T, Policy>::ascii_dump(std::ostream& s) const {
-  std::ios_base::fmtflags old = s.flags();
-  s << std::hex << bitset;
-  s.flags(old);
+  const std::ios::fmtflags old_flags = s.setf(std::ios::hex,
+                                              std::ios::basefield);
+  s << bitset;
+  s.flags(old_flags);
 }
 
 template <typename T, typename Policy>
 inline bool
 Interval_Info_Bitset<T, Policy>::ascii_load(std::istream& s) {
-  std::ios_base::fmtflags old = s.flags();
-  s >> std::hex >> bitset;
-  if (!s)
-    return false;
-  s.flags(old);
-  return true;
+  const std::ios::fmtflags old_flags = s.setf(std::ios::hex,
+                                              std::ios::basefield);
+  s >> bitset;
+  s.flags(old_flags);
+  return !s.fail();
 }
 
 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
diff --git a/src/Row_Flags.cc b/src/Row_Flags.cc
index 39a3c8c..60063a4 100644
--- a/src/Row_Flags.cc
+++ b/src/Row_Flags.cc
@@ -31,15 +31,12 @@ namespace PPL = Parma_Polyhedra_Library;
 void
 PPL::Row_Flags::ascii_dump(std::ostream& s) const {
   s << "0x";
-  std::istream::fmtflags f = s.setf(std::istream::hex);
+  std::ios::fmtflags old_flags = s.setf(std::ios::hex,
+                                        std::ios::basefield);
   const std::streamsize new_sz
     = static_cast<std::streamsize>(2 * sizeof(Row_Flags::base_type));
-  const std::streamsize old_sz = s.width(new_sz);
-  std::ostream::char_type ch = s.fill('0');
-  s << bits;
-  s.fill(ch);
-  s.width(old_sz);
-  s.flags(f);
+  s << std::setw(new_sz) << setfill('0') << bits;
+  s.flags(old_flags);
 }
 
 PPL_OUTPUT_DEFINITIONS_ASCII_ONLY(Row_Flags)
@@ -47,12 +44,11 @@ PPL_OUTPUT_DEFINITIONS_ASCII_ONLY(Row_Flags)
 bool
 PPL::Row_Flags::ascii_load(std::istream& s) {
   std::string str;
-  std::streamsize sz = s.width(2);
-  if (!(s >> str) || str != "0x")
+  if (!(s >> std::setw(2) >> str) || str != "0x")
     return false;
-  s.width(sz);
-  std::istream::fmtflags f = s.setf(std::istream::hex);
-  bool r = s >> bits;
-  s.flags(f);
-  return r;
+  const std::ios::fmtflags old_flags = s.setf(std::ios::hex,
+                                              std::ios::basefield);
+  s >> bits;
+  s.flags(old_flags);
+  return !s.fail();
 }




More information about the PPL-devel mailing list