Initial revision
[blender.git] / intern / iksolver / intern / TNT / stopwatch.h
1 /**
2  * $Id$
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31
32 /*
33
34 *
35 * Template Numerical Toolkit (TNT): Linear Algebra Module
36 *
37 * Mathematical and Computational Sciences Division
38 * National Institute of Technology,
39 * Gaithersburg, MD USA
40 *
41 *
42 * This software was developed at the National Institute of Standards and
43 * Technology (NIST) by employees of the Federal Government in the course
44 * of their official duties. Pursuant to title 17 Section 105 of the
45 * United States Code, this software is not subject to copyright protection
46 * and is in the public domain.  The Template Numerical Toolkit (TNT) is
47 * an experimental system.  NIST assumes no responsibility whatsoever for
48 * its use by other parties, and makes no guarantees, expressed or implied,
49 * about its quality, reliability, or any other characteristic.
50 *
51 * BETA VERSION INCOMPLETE AND SUBJECT TO CHANGE
52 * see http://math.nist.gov/tnt for latest updates.
53 *
54 */
55
56
57
58 #ifndef STPWATCH_H
59 #define STPWATCH_H
60
61 // for clock() and CLOCKS_PER_SEC
62 #include <ctime>
63
64 namespace TNT
65 {
66
67 /*  Simple stopwatch object:
68
69         void    start()     : start timing
70         double  stop()      : stop timing
71         void    reset()     : set elapsed time to 0.0
72         double  read()      : read elapsed time (in seconds)
73
74 */
75
76 inline double seconds(void)
77 {
78     static const double secs_per_tick = 1.0 / CLOCKS_PER_SEC;
79     return ( (double) clock() ) * secs_per_tick;
80 }
81
82
83 class stopwatch {
84     private:
85         int running;
86         double last_time;
87         double total;
88
89     public:
90         stopwatch() : running(0), last_time(0.0), total(0.0) {}
91         void reset() { running = 0; last_time = 0.0; total=0.0; }
92         void start() { if (!running) { last_time = seconds(); running = 1;}}
93         double stop()  { if (running) 
94                             {
95                                 total += seconds() - last_time; 
96                                 running = 0;
97                              }
98                           return total; 
99                         }
100         double read()   {  if (running) 
101                             {
102                                 total+= seconds() - last_time;
103                                 last_time = seconds();
104                             }
105                            return total;
106                         }       
107                             
108 };
109
110 } // namespace TNT
111
112 #endif
113     
114
115