doxygen: intern/smoke tagged.
[blender.git] / intern / smoke / intern / tnt / tnt_stopwatch.h
1 /** \file smoke/intern/tnt/tnt_stopwatch.h
2  *  \ingroup smoke
3  */
4 /*
5 *
6 * Mathematical and Computational Sciences Division
7 * National Institute of Technology,
8 * Gaithersburg, MD USA
9 *
10 *
11 * This software was developed at the National Institute of Standards and
12 * Technology (NIST) by employees of the Federal Government in the course
13 * of their official duties. Pursuant to title 17 Section 105 of the
14 * United States Code, this software is not subject to copyright protection
15 * and is in the public domain.  NIST assumes no responsibility whatsoever for
16 * its use by other parties, and makes no guarantees, expressed or implied,
17 * about its quality, reliability, or any other characteristic.
18 *
19 */
20
21
22
23 #ifndef STOPWATCH_H
24 #define STOPWATCH_H
25
26 // for clock() and CLOCKS_PER_SEC
27 #include <time.h>
28
29
30 namespace TNT
31 {
32
33 inline static double seconds(void)
34 {
35     const double secs_per_tick = 1.0 / CLOCKS_PER_SEC;
36     return ( (double) clock() ) * secs_per_tick;
37 }
38
39 class Stopwatch {
40     private:
41         int running_;
42         double start_time_;
43         double total_;
44
45     public:
46         inline Stopwatch();
47         inline void start();
48         inline double stop();
49                 inline double read();
50                 inline void resume();
51                 inline int running();
52 };
53
54 inline Stopwatch::Stopwatch() : running_(0), start_time_(0.0), total_(0.0) {}
55
56 void Stopwatch::start() 
57 {
58         running_ = 1;
59         total_ = 0.0;
60         start_time_ = seconds();
61 }
62
63 double Stopwatch::stop()  
64 {
65         if (running_) 
66         {
67          total_ += (seconds() - start_time_); 
68          running_ = 0;
69     }
70     return total_; 
71 }
72
73 inline void Stopwatch::resume()
74 {
75         if (!running_)
76         {
77                 start_time_ = seconds();
78                 running_ = 1;
79         }
80 }
81                 
82
83 inline double Stopwatch::read()   
84 {
85         if (running_)
86         {
87                 stop();
88                 resume();
89         }
90         return total_;
91 }
92
93
94 } /* TNT namespace */
95 #endif
96     
97
98