]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Use io saver class to restore flags/precision/width 9472/head
authorMartin Kronbichler <kronbichler@lnm.mw.tum.de>
Fri, 7 Feb 2020 07:27:58 +0000 (08:27 +0100)
committerMartin Kronbichler <kronbichler@lnm.mw.tum.de>
Fri, 7 Feb 2020 07:27:58 +0000 (08:27 +0100)
source/base/timer.cc

index cf358d8941a2463649f7fc6fae3baa40613d711e..21a9f884ea0b31f6c16ccfc86040aad9bbcf981f 100644 (file)
@@ -19,6 +19,8 @@
 #include <deal.II/base/timer.h>
 #include <deal.II/base/utilities.h>
 
+#include <boost/io/ios_state.hpp>
+
 #include <algorithm>
 #include <chrono>
 #include <iomanip>
@@ -549,10 +551,8 @@ void
 TimerOutput::print_summary() const
 {
   // we are going to change the precision and width of output below. store the
-  // old values so we can restore it later on
-  const std::istream::fmtflags old_flags = out_stream.get_stream().flags();
-  const std::streamsize old_precision    = out_stream.get_stream().precision();
-  const std::streamsize old_width        = out_stream.get_stream().width();
+  // old values so the get restored when exiting this function
+  const boost::io::ios_base_all_saver restore_stream(out_stream.get_stream());
 
   // get the maximum width among all sections
   unsigned int max_width = 0;
@@ -852,11 +852,6 @@ TimerOutput::print_summary() const
           << "(Timer function may have introduced too much overhead, or different\n"
           << "section timers may have run at the same time.)" << std::endl;
     }
-
-  // restore previous precision and width
-  out_stream.get_stream().precision(old_precision);
-  out_stream.get_stream().width(old_width);
-  out_stream.get_stream().flags(old_flags);
 }
 
 
@@ -866,10 +861,8 @@ TimerOutput::print_wall_time_statistics(const MPI_Comm mpi_comm,
                                         const double   quantile) const
 {
   // we are going to change the precision and width of output below. store the
-  // old values so we can restore it later on
-  const std::istream::fmtflags old_flags = out_stream.get_stream().flags();
-  const std::streamsize old_precision    = out_stream.get_stream().precision();
-  const std::streamsize old_width        = out_stream.get_stream().width();
+  // old values so the get restored when exiting this function
+  const boost::io::ios_base_all_saver restore_stream(out_stream.get_stream());
 
   AssertDimension(sections.size(),
                   Utilities::MPI::max(sections.size(), mpi_comm));
@@ -1036,11 +1029,6 @@ TimerOutput::print_wall_time_statistics(const MPI_Comm mpi_comm,
                << (n_ranks > 1 && quantile > 0. ? time_rank_column : "")
                << time_rank_column << "\n";
   }
-
-  // restore previous precision and width
-  out_stream.get_stream().precision(old_precision);
-  out_stream.get_stream().width(old_width);
-  out_stream.get_stream().flags(old_flags);
 }
 
 

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.