SMIL  1.0.4
DTime.h
1 /*
2  * Copyright (c) 2011-2016, Matthieu FAESSEL and ARMINES
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * * Neither the name of Matthieu FAESSEL, or ARMINES nor the
14  * names of its contributors may be used to endorse or promote products
15  * derived from this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 
30 #ifndef _DTIME_H
31 #define _DTIME_H
32 
33 #include <ctime>
34 #include <iomanip>
35 
36 #ifdef _MSC_VER
37 #include <sys/timeb.h>
38 #else
39 #include <sys/time.h>
40 #endif
41 
42 namespace smil
43 {
44  #ifdef _MSC_VER
45 
46  typedef struct timeval {
47  UINT64 tv_sec;
48  UINT64 tv_usec;
49  } timeval;
50 
51  inline int gettimeofday (struct timeval *tp, void *tz)
52  {
53  struct _timeb timebuffer;
54  _ftime_s (&timebuffer);
55  tp->tv_sec = timebuffer.time;
56  tp->tv_usec = timebuffer.millitm * 1000;
57  return 0;
58  }
59 
60  #endif // _MSC_VER
61 
62 
63  static inline double getCpuTime()
64  {
65  struct timeval tv;
66  if (gettimeofday(&tv, 0))
67  {
68  cout << "gettimeofday returned error" << endl;
69  }
70  return tv.tv_sec + double(tv.tv_usec)/1E6;
71  }
72 
73  inline string displayTime(double tSec)
74  {
75  stringstream s;
76  s << std::fixed;
77 
78  if (tSec>=1.)
79  s << std::setprecision(2) << tSec << " secs";
80  else if (tSec*1E3>=1.)
81  s << std::setprecision(2) << tSec*1E3 << " msecs";
82  else
83  s << std::setprecision(0) << tSec*1E6 << " usecs";
84 
85  return s.str();
86  }
87 
88 
89 } // namespace smil
90 
91 #endif // _DTIME_H
92