williamr@2: // boost timer.hpp header file ---------------------------------------------// williamr@2: williamr@2: // Copyright Beman Dawes 1994-99. Distributed under the Boost williamr@2: // Software License, Version 1.0. (See accompanying file williamr@2: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) williamr@2: williamr@2: // See http://www.boost.org/libs/timer for documentation. williamr@2: williamr@2: // Revision History williamr@2: // 01 Apr 01 Modified to use new header. (JMaddock) williamr@2: // 12 Jan 01 Change to inline implementation to allow use without library williamr@2: // builds. See docs for more rationale. (Beman Dawes) williamr@2: // 25 Sep 99 elapsed_max() and elapsed_min() added (John Maddock) williamr@2: // 16 Jul 99 Second beta williamr@2: // 6 Jul 99 Initial boost version williamr@2: williamr@2: #ifndef BOOST_TIMER_HPP williamr@2: #define BOOST_TIMER_HPP williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: # ifdef BOOST_NO_STDC_NAMESPACE williamr@2: namespace std { using ::clock_t; using ::clock; } williamr@2: # endif williamr@2: williamr@2: williamr@2: namespace boost { williamr@2: williamr@2: // timer -------------------------------------------------------------------// williamr@2: williamr@2: // A timer object measures elapsed time. williamr@2: williamr@2: // It is recommended that implementations measure wall clock rather than CPU williamr@2: // time since the intended use is performance measurement on systems where williamr@2: // total elapsed time is more important than just process or CPU time. williamr@2: williamr@2: // Warnings: The maximum measurable elapsed time may well be only 596.5+ hours williamr@2: // due to implementation limitations. The accuracy of timings depends on the williamr@2: // accuracy of timing information provided by the underlying platform, and williamr@2: // this varies a great deal from platform to platform. williamr@2: williamr@2: class timer williamr@2: { williamr@2: public: williamr@2: timer() { _start_time = std::clock(); } // postcondition: elapsed()==0 williamr@2: // timer( const timer& src ); // post: elapsed()==src.elapsed() williamr@2: // ~timer(){} williamr@2: // timer& operator=( const timer& src ); // post: elapsed()==src.elapsed() williamr@2: void restart() { _start_time = std::clock(); } // post: elapsed()==0 williamr@2: double elapsed() const // return elapsed time in seconds williamr@2: { return double(std::clock() - _start_time) / CLK_TCK; } williamr@2: williamr@2: double elapsed_max() const // return estimated maximum value for elapsed() williamr@2: // Portability warning: elapsed_max() may return too high a value on systems williamr@2: // where std::clock_t overflows or resets at surprising values. williamr@2: { williamr@2: return (double((std::numeric_limits::max)()) williamr@2: - double(_start_time)) / double(CLK_TCK); williamr@2: } williamr@2: williamr@2: double elapsed_min() const // return minimum value for elapsed() williamr@2: { return double(1)/double(CLK_TCK); } williamr@2: williamr@2: private: williamr@2: std::clock_t _start_time; williamr@2: }; // timer williamr@2: williamr@2: } // namespace boost williamr@2: williamr@2: #endif // BOOST_TIMER_HPP