133 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			133 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | //  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... | ||
|  | 
 | ||
|  | //--------------------------------------------------------------------------------------// | ||
|  | 
 | ||
|  | 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() BOOST_NOEXCEPT                                   { start(); } | ||
|  | 
 | ||
|  |     //  observers | ||
|  |     bool          is_stopped() const BOOST_NOEXCEPT              { return m_is_stopped; } | ||
|  |     cpu_times     elapsed() const BOOST_NOEXCEPT;  // 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() BOOST_NOEXCEPT; | ||
|  |     void          stop() BOOST_NOEXCEPT; | ||
|  |     void          resume() BOOST_NOEXCEPT;  | ||
|  | 
 | ||
|  |   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 |