$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r74360 - in sandbox/stopwatches/libs/chrono/stopwatches: example test
From: vicente.botet_at_[hidden]
Date: 2011-09-12 12:57:25
Author: viboes
Date: 2011-09-12 12:57:24 EDT (Mon, 12 Sep 2011)
New Revision: 74360
URL: http://svn.boost.org/trac/boost/changeset/74360
Log:
Stopwatches: Update some examples of stopwatch reporters to use Boost.Format
Text files modified: 
   sandbox/stopwatches/libs/chrono/stopwatches/example/scoped_stopwatch_example.cpp      |    59 ++++++++++++++++---------               
   sandbox/stopwatches/libs/chrono/stopwatches/example/stopwatch_accumulator_example.cpp |    89 +++++++++++++++++++++++++++++++++++---- 
   sandbox/stopwatches/libs/chrono/stopwatches/test/Jamfile.v2                           |     4                                         
   3 files changed, 117 insertions(+), 35 deletions(-)
Modified: sandbox/stopwatches/libs/chrono/stopwatches/example/scoped_stopwatch_example.cpp
==============================================================================
--- sandbox/stopwatches/libs/chrono/stopwatches/example/scoped_stopwatch_example.cpp	(original)
+++ sandbox/stopwatches/libs/chrono/stopwatches/example/scoped_stopwatch_example.cpp	2011-09-12 12:57:24 EDT (Mon, 12 Sep 2011)
@@ -6,41 +6,56 @@
 
 #include <boost/chrono/stopwatches/stopwatches.hpp>
 #include <cmath>
+#include <string>
 #include "sleep_for.hpp"
 #include <boost/chrono/chrono_io.hpp>
-//#include <iostream>
+#include <boost/format.hpp>
 
 using namespace boost::chrono;
 
+template <typename Stopwatch>
+class stopwatch_reporter : public Stopwatch
+{
+  public:
+  stopwatch_reporter( )
+  : internal_fmt_("%1%"), fmt_(internal_fmt_) {}
+  stopwatch_reporter(const char* str )
+  : internal_fmt_(str), fmt_(internal_fmt_) {}
+  stopwatch_reporter(std::string const& str )
+  : internal_fmt_(str), fmt_(internal_fmt_) {}
+  stopwatch_reporter(boost::format & fmt )
+  : fmt_(fmt) {}
+  ~stopwatch_reporter() {
+    std::cout << fmt_ % this->elapsed() << std::endl;
+  }
+  private:
+  boost::format internal_fmt_;
+  boost::format& fmt_;
+};
+
 long double res;
 void f1(long j)
 {
-    //stopwatch_reporter<stopwatch<> > _(BOOST_STOPWATCHES_STOPWATCH_FUNCTION_FORMAT);
-    //stopwatch<> sw;
-    for (long i =0; i< j; i+=1)
-        res+=std::sqrt( res+123.456L+i );  // burn some time
-    if (j!=0) f1(j-1);
-    //stopwatch_reporter<stopwatch<> >::scoped_suspend s(_);
-    //std::cout << "f1("<< j <<") Elapsed time: " << sw.elapsed() << std::endl;
-
+  //stopwatch_reporter<stopwatch<> > _(BOOST_STOPWATCHES_STOPWATCH_FUNCTION_FORMAT);
+  boost::format fmt("f1(%1%): Elapsed time: %2%");
+  fmt % j;
+  ::stopwatch_reporter<stopwatch<> > sw(fmt);
+  for (long i =0; i< j; i+=1)
+    res+=std::sqrt( res+123.456L+i );  // burn some time
+  stopwatch_suspender< ::stopwatch_reporter<stopwatch<> > > _(sw);
+  boost::this_thread::sleep_for(boost::chrono::milliseconds(10));
 }
+
 int main()
 {
   //stopwatch_reporter<stopwatch<> > _(BOOST_STOPWATCHES_STOPWATCH_FUNCTION_FORMAT);
-    stopwatch<> sw;
+  ::stopwatch_reporter<stopwatch<> > _("main(): Elapsed time: %1%");
 
-    res=0;
-    for (long i =1; i< 4; ++i) {
-      stopwatch<> sw;
-        f1(i*1000);
-        {
-        stopwatch_suspender<stopwatch<> > _(sw);
-        boost::this_thread::sleep_for(boost::chrono::milliseconds(10));
-        }
-        std::cout << "f1("<< i*1000 <<") Elapsed time: " << sw.elapsed() << std::endl;
-    }
+  res=0;
+  for (long i =1; i< 4; ++i) {
+    f1(i*1000000);
+  }
 
-    std::cout<< res << std::endl;
-    std::cout << "main() Elapsed time: " << sw.elapsed() << std::endl;
+  std::cout<< res << std::endl;
   return 0;
 }
Modified: sandbox/stopwatches/libs/chrono/stopwatches/example/stopwatch_accumulator_example.cpp
==============================================================================
--- sandbox/stopwatches/libs/chrono/stopwatches/example/stopwatch_accumulator_example.cpp	(original)
+++ sandbox/stopwatches/libs/chrono/stopwatches/example/stopwatch_accumulator_example.cpp	2011-09-12 12:57:24 EDT (Mon, 12 Sep 2011)
@@ -8,12 +8,71 @@
 #include <boost/chrono/stopwatches/stopwatches.hpp>
 //#include <boost/chrono/process_cpu_clocks.hpp>
 #include <cmath>
+#include <iostream>
+#include <iomanip>
+#include <boost/format.hpp>
+#include <boost/format/group.hpp>
+#include <boost/chrono/chrono_io.hpp>
 
 
 using namespace boost::chrono;
 using namespace boost;
 
+std::ostream&
+my_duration_short(std::ostream& os)
+{
+  return boost::chrono::duration_short(os);
+}
 
+template <typename Stopwatch, typename Ratio=boost::ratio<1> >
+class stopwatch_reporter : public Stopwatch
+{
+  public:
+  stopwatch_reporter( )
+  : internal_fmt_("times=%1%, sum=%2%, min=%3%, max=%4%, mean=%5%, frequency=%6% Hz, lifetime=%7%, time=%8% %%"),
+    fmt_(internal_fmt_),
+    os_(std::cout)
+  {}
+  stopwatch_reporter(const char* str )
+  : internal_fmt_(str),
+    fmt_(internal_fmt_),
+    os_(std::cout)
+  {}
+  stopwatch_reporter(std::string const& str )
+  : internal_fmt_(str),
+    fmt_(internal_fmt_),
+    os_(std::cout)
+  {}
+  stopwatch_reporter(boost::format & fmt )
+  : fmt_(fmt),
+    os_(std::cout)
+  {}
+  ~stopwatch_reporter() {
+    typename Stopwatch::accumulator_set& acc = this->get_storage();
+    typedef typename Stopwatch::duration duration_t;
+    int precision_=3;
+
+    os_ << fmt_
+        % boost::accumulators::count(acc)
+        % io::group(std::fixed, std::setprecision(precision_),my_duration_short, boost::chrono::duration<double,Ratio>(duration_t(boost::accumulators::sum(acc))))
+        % io::group(std::fixed, std::setprecision(precision_),my_duration_short, boost::chrono::duration<double,Ratio>(duration_t((boost::accumulators::min)(acc))))
+        % io::group(std::fixed, std::setprecision(precision_),my_duration_short, boost::chrono::duration<double,Ratio>(duration_t((boost::accumulators::max)(acc))))
+        % io::group(std::fixed, std::setprecision(precision_),my_duration_short,((boost::accumulators::count(acc)>0)
+            ? boost::chrono::duration<double,Ratio>(duration_t(boost::accumulators::sum(acc)/boost::accumulators::count(acc)))
+            : boost::chrono::duration<double,Ratio>(duration_t(0))))
+        % io::group(std::fixed, std::setprecision(precision_),
+            ((boost::accumulators::count(acc)>0)
+            ? boost::accumulators::count(acc)/boost::chrono::duration<double>(this->lifetime())
+            : 0))
+        % io::group(std::fixed, std::setprecision(precision_),my_duration_short, boost::chrono::duration<double,Ratio>(this->lifetime()))
+        % io::group(std::fixed, std::setprecision(precision_),boost::chrono::duration<double>(duration_t(accumulators::sum(acc))).count()*100/boost::chrono::duration<double>(this->lifetime()).count())
+    << std::endl;
+  }
+  private:
+  boost::format internal_fmt_;
+  boost::format& fmt_;
+  std::ostream& os_;
+};
 
 //typedef stopwatch_accumulator<process_real_cpu_clock> swa;
 typedef stopwatch_accumulator<high_resolution_clock> swa;
@@ -21,10 +80,16 @@
 {
   //static stopwatch_reporter<stopwatch_accumulator<high_resolution_clock> > acc(BOOST_STOPWATCHES_ACCUMULATOR_FUNCTION_FORMAT);
   //stopwatch_reporter<stopwatch_accumulator<high_resolution_clock> >::scoped_run r_(acc);
+  static ::stopwatch_reporter<stopwatch_accumulator<high_resolution_clock>, boost::micro> acc;
+  stopwatch_runner<
+    ::stopwatch_reporter<
+       stopwatch_accumulator<high_resolution_clock>, boost::micro
+    >
+  > r_(acc);
   //static stopwatch_reporter<stopwatch_accumulator<process_real_cpu_clock> > acc2(BOOST_STOPWATCHES_ACCUMULATOR_FUNCTION_FORMAT);
   //stopwatch_reporter<stopwatch_accumulator<process_real_cpu_clock> >::scoped_run r2_(acc2);
 
-  stopwatch_runner<swa > _(sw);
+  //stopwatch_runner<swa > _(sw);
 
   for ( long i = 0; i < j; ++i )
     std::sqrt( 123.456L );  // burn some time
@@ -35,18 +100,20 @@
 {
   swa sw;
 
+  std::cout << duration_short << nanoseconds(10) << std::endl;
+
   f1(10000000,sw);
   f1(20000000,sw);
   f1(30000000,sw);
 
-  swa::accumulator_set& acc = sw.get_storage();
-  std::cout << "f1() Lifetime: " << sw.lifetime() << std::endl;
-  std::cout << "f1() Elapsed: " << sw.elapsed() << std::endl;
-  std::cout << "f1() Count: " << accumulators::count(acc) << std::endl;
-  std::cout << "f1() Sum: " << accumulators::sum(acc) << std::endl;
-  std::cout << "f1() Sum/Count: " << accumulators::sum(acc)/accumulators::count(acc) << std::endl;
-  std::cout << "f1() Mean: " << accumulators::mean(acc) << std::endl;
-  std::cout << "f1() Min: " << (accumulators::min)(acc) << std::endl;
-  std::cout << "f1() Max: " << (accumulators::max)(acc) << std::endl;
-  return 0;
+//  swa::accumulator_set& acc = sw.get_storage();
+//  std::cout << "f1() Lifetime: " << sw.lifetime() << std::endl;
+//  std::cout << "f1() Elapsed: " << sw.elapsed() << std::endl;
+//  std::cout << "f1() Count: " << accumulators::count(acc) << std::endl;
+//  std::cout << "f1() Sum: " << accumulators::sum(acc) << std::endl;
+//  std::cout << "f1() Sum/Count: " << accumulators::sum(acc)/accumulators::count(acc) << std::endl;
+//  std::cout << "f1() Mean: " << accumulators::mean(acc) << std::endl;
+//  std::cout << "f1() Min: " << (accumulators::min)(acc) << std::endl;
+//  std::cout << "f1() Max: " << (accumulators::max)(acc) << std::endl;
+  return 1;
 }
Modified: sandbox/stopwatches/libs/chrono/stopwatches/test/Jamfile.v2
==============================================================================
--- sandbox/stopwatches/libs/chrono/stopwatches/test/Jamfile.v2	(original)
+++ sandbox/stopwatches/libs/chrono/stopwatches/test/Jamfile.v2	2011-09-12 12:57:24 EDT (Mon, 12 Sep 2011)
@@ -25,9 +25,9 @@
         <library>/boost/system//boost_system
         #<library>/boost/thread//boost_thread/<link>shared
         # uncomment the line above if you build outside the Boost release
-        <include>$(BOOST) 
-        # uncomment the line above if you build outside the Boost release
         <include>../../../..
+        # uncomment the line above if you build outside the Boost release
+        <include>$(BOOST) 
         <toolset>msvc:<asynch-exceptions>on
         <define>BOOST_ENABLE_WARNINGS
         <define>BOOST_CHRONO_EXTENSIONS