diff DEPENDENCIES/generic/include/boost/timer/timer.hpp @ 16:2665513ce2d3

Add boost headers
author Chris Cannam
date Tue, 05 Aug 2014 11:11:38 +0100
parents
children c530137014c0
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DEPENDENCIES/generic/include/boost/timer/timer.hpp	Tue Aug 05 11:11:38 2014 +0100
@@ -0,0 +1,138 @@
+//  boost/timer/timer.hpp  -------------------------------------------------------------//
+
+//  Copyright Beman Dawes 1994-2007, 2011
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_TIMER_TIMER_HPP                  
+#define BOOST_TIMER_TIMER_HPP
+
+#include <boost/config/warning_disable.hpp>
+
+#include <boost/timer/config.hpp>
+#include <boost/chrono/chrono.hpp>
+#include <boost/cstdint.hpp>
+#include <string>
+#include <cstring>
+#include <ostream>
+
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+
+#   if defined(_MSC_VER)
+#     pragma warning(push)           // Save warning settings
+#     pragma warning(disable : 4251) // disable warning: class 'std::basic_string<_Elem,_Traits,_Ax>'
+#   endif                            // needs to have dll-interface...
+
+//--------------------------------------------------------------------------------------//
+
+//  TODO:
+//  
+//  * Add BOOST_NOEXCEPT where applicable
+
+//--------------------------------------------------------------------------------------//
+
+namespace boost
+{
+namespace timer
+{
+  class cpu_timer;
+  class auto_cpu_timer;
+
+  typedef boost::int_least64_t nanosecond_type;
+
+  struct cpu_times
+  {
+    nanosecond_type wall;
+    nanosecond_type user;
+    nanosecond_type system;
+
+    void clear() { wall = user = system = 0LL; }
+  };
+      
+  const short         default_places = 6;
+
+  BOOST_TIMER_DECL
+  std::string format(const cpu_times& times, short places, const std::string& format); 
+
+  BOOST_TIMER_DECL
+  std::string format(const cpu_times& times, short places = default_places); 
+
+//  cpu_timer  -------------------------------------------------------------------------//
+
+  class BOOST_TIMER_DECL cpu_timer
+  {
+  public:
+
+    //  constructor
+    cpu_timer()                                    { start(); }
+
+    //  observers
+    bool          is_stopped() const               { return m_is_stopped; }
+    cpu_times     elapsed() const;  // does not stop()
+    std::string   format(short places, const std::string& format) const
+                        { return ::boost::timer::format(elapsed(), places, format); }
+    std::string   format(short places = default_places) const
+                        { return ::boost::timer::format(elapsed(), places); }
+    //  actions
+    void          start();
+    void          stop();
+    void          resume(); 
+
+  private:
+    cpu_times     m_times;
+    bool          m_is_stopped;
+  };
+
+//  auto_cpu_timer  --------------------------------------------------------------------//
+
+  class BOOST_TIMER_DECL auto_cpu_timer : public cpu_timer
+  {
+  public:
+
+    //  Explicit defaults for os are not provided to avoid including <iostream>, which has
+    //  high costs even when the standard streams are not actually used. Explicit defaults
+    //  for format are not provided to avoid order-of-dynamic-initialization issues with a
+    //  std::string.
+
+    explicit auto_cpu_timer(short places = default_places);                          // #1
+             auto_cpu_timer(short places, const std::string& format);                // #2
+    explicit auto_cpu_timer(const std::string& format);                              // #3
+             auto_cpu_timer(std::ostream& os, short places,
+                            const std::string& format)                               // #4
+                                   : m_places(places), m_os(&os), m_format(format)
+                                   { start(); }
+    explicit auto_cpu_timer(std::ostream& os, short places = default_places);        // #5
+             auto_cpu_timer(std::ostream& os, const std::string& format)             // #6
+                                   : m_places(default_places), m_os(&os), m_format(format)
+                                   { start(); }
+
+   ~auto_cpu_timer();
+
+   //  observers
+   //    not particularly useful to users, but allow testing of constructor
+   //    postconditions and ease specification of other functionality without resorting
+   //    to "for exposition only" private members.
+   std::ostream&       ostream() const       { return *m_os; }
+   short               places() const        { return m_places; }
+   const std::string&  format_string() const { return m_format; }
+
+    //  actions
+    void   report(); 
+
+  private:
+    short           m_places;
+    std::ostream*   m_os;      // stored as ptr so compiler can generate operator= 
+    std::string     m_format;  
+  };
+   
+} // namespace timer
+} // namespace boost
+
+#   if defined(_MSC_VER)
+#     pragma warning(pop) // restore warning settings.
+#   endif 
+
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+
+#endif  // BOOST_TIMER_TIMER_HPP