Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/tools/wave/stop_watch.hpp @ 26

Last change on this file since 26 was 12, checked in by landauf, 17 years ago

added boost

File size: 2.5 KB
Line 
1/*=============================================================================
2    Boost.Wave: A Standard compliant C++ preprocessor library
3    http://www.boost.org/
4
5    Copyright (c) 2001-2005 Hartmut Kaiser. Distributed under the Boost
6    Software License, Version 1.0. (See accompanying file
7    LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8=============================================================================*/
9
10#if !defined(STOP_WATCH_HPP_HK040911_INCLUDED)
11#define STOP_WATCH_HPP_HK040911_INCLUDED
12
13#include <boost/config.hpp>
14#include <boost/timer.hpp>
15
16///////////////////////////////////////////////////////////////////////////////
17// 
18class stop_watch : public boost::timer {
19
20    typedef boost::timer base_t;
21   
22public:
23    stop_watch() : is_suspended_since(0), suspended_overall(0) {}
24
25    void suspend()
26    {
27        if (0 == is_suspended_since) {
28        // if not already suspended
29            is_suspended_since = this->base_t::elapsed();
30        }
31    }
32    void resume()
33    {
34        if (0 != is_suspended_since) {
35        // if really suspended
36            suspended_overall += this->base_t::elapsed() - is_suspended_since;
37            is_suspended_since = 0;
38        }
39    }
40    double elapsed() const
41    {
42        if (0 == is_suspended_since) {
43        // currently running
44            return this->base_t::elapsed() - suspended_overall;
45        }
46
47    // currently suspended
48        BOOST_ASSERT(is_suspended_since >= suspended_overall);
49        return is_suspended_since - suspended_overall;
50    }
51   
52    std::string format_elapsed_time() const
53    {
54    double current = elapsed();
55    char time_buffer[sizeof("1234:56:78.90 abcd.")+1];
56
57        using namespace std;
58        if (current >= 3600) {
59        // show hours
60            sprintf (time_buffer, "%d:%02d:%02d.%03d hrs.",
61                (int)(current) / 3600, ((int)(current) % 3600) / 60,
62                ((int)(current) % 3600) % 60, 
63                (int)(current * 1000) % 1000);
64        }
65        else if (current >= 60) {
66        // show minutes
67            sprintf (time_buffer, "%d:%02d.%03d min.", 
68                (int)(current) / 60, (int)(current) % 60, 
69                (int)(current * 1000) % 1000);
70        }
71        else {
72        // show seconds
73            sprintf(time_buffer, "%d.%03d sec.", (int)current, 
74                (int)(current * 1000) % 1000);
75        }
76        return time_buffer;
77    }
78   
79private:
80    double is_suspended_since;
81    double suspended_overall; 
82};
83
84#endif // !defined(STOP_WATCH_HPP_HK040911_INCLUDED)
Note: See TracBrowser for help on using the repository browser.