source: trunk/MagicSoft/Cosy/base/timer.cc@ 1782

Last change on this file since 1782 was 1760, checked in by tbretz, 23 years ago
*** empty log message ***
File size: 2.4 KB
Line 
1#include "timer.h"
2
3#include <stdio.h>
4#include <iostream.h>
5
6#include <math.h> // modf
7#include "sys/time.h" // struct timeval
8#include "slalib/slalib.h" // slacldj
9
10void Timer::SetTimer(int tv_sec, double tv_usec)
11{
12 fSecs = tv_sec;
13 fMs = tv_usec;
14
15 SetMjd((fMs+fSecs)/(60*60*24) + 40587);
16
17 fSec = tv_sec%60;
18 tv_sec /= 60;
19
20 fMin = tv_sec%60;
21 tv_sec /= 60;
22
23 fHor = tv_sec%24;
24 tv_sec /= 24;
25
26// fDiv = fmod((fMs+fSecs)/(60*60*24), 1.0);
27}
28/*
29void Timer::Set(const long mjd)
30{
31 SetMjd(mjd);
32
33 //
34 // Express day in Gregorian calendar
35 // (taken from slalib slaDjcl)
36 //
37 const long jd = mjd + 2400001;
38 const long n4 = (((((jd*4-17918)/146097)*6)/4+1)/2+jd-37)*4;
39 const long nd10 = (((n4-237)%1461)/4)*10+5;
40
41 fYea = n4/1461 - 4712;
42 fMon = ((nd10/306+2)%12) + 1;
43 fDay = (nd10%306)/10 + 1;
44}
45*/
46void Timer::SetTimer(const struct timeval *tv)
47{
48 SetTimer(tv->tv_sec, (double)tv->tv_usec/1000000.0);
49}
50
51Timer::Timer(double t)
52{
53 double inte;
54 double frac = modf(t, &inte);
55 SetTimer(inte, frac);
56}
57
58Timer::Timer(struct timeval *tv)
59{
60 SetTimer(tv);
61}
62
63Timer::Timer(Timer &t)
64{
65 fMs = t.fMs;
66 fDiv = t.fDiv;
67 fSec = t.fSec;
68 fSecs = t.fSecs;
69 fMin = t.fMin;
70 fHor = t.fHor;
71 fDay = t.fDay;
72 fMon = t.fMon;
73 fYea = t.fYea;
74 fMjd = t.fMjd;
75}
76
77void Timer::SetMjd(double mjd)
78{
79 //
80 // Express day in Gregorian calendar
81 // (taken from slalib slaDjcl)
82 //
83 fMjd = mjd;
84
85 const long jd = (long)mjd + 2400001;
86 const long n4 = (((((jd*4-17918)/146097)*6)/4+1)/2+jd-37)*4;
87 const long nd10 = (((n4-237)%1461)/4)*10+5;
88
89 fYea = n4/1461 - 4712;
90 fMon = ((nd10/306+2)%12) + 1;
91 fDay = (nd10%306)/10 + 1;
92
93 fDiv = fmod(mjd, 1.0);
94
95 mjd -= 40587;
96
97 mjd *= 24;
98 fHor = (int)fmod(mjd, 24);
99
100 mjd *= 60;
101 fMin = (int)fmod(mjd, 60);
102
103 mjd *= 60;
104 fSec = (int)fmod(mjd, 60);
105
106 fMs = fmod(mjd * 1000, 1000);
107}
108
109double Timer::Now() //[s]
110{
111 struct timeval tv;
112 gettimeofday(&tv, NULL);
113
114 SetTimer(&tv);
115
116 return fMs+fSecs;
117}
118
119Timer::operator double() //[s]
120{
121 return fMs+fSecs;
122}
123
124void Timer::Print()
125{
126 cout << fSec << "s +" << fMs << "s" << endl;
127}
128
129const char *Timer::GetTimeStr()
130{
131 sprintf(fDateStr, "%d/%02d/%02d %d:%02d:%02d.%06li",
132 fYea, fMon, fDay, fHor, fMin, fSec, (long)(1000000.0*fMs));
133
134 return fDateStr;
135}
136
Note: See TracBrowser for help on using the repository browser.