2 Copyright (C) <2010> <Markus Scharnowski markus.scharnowski@gmail.com>
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 #include "timekeeper.h"
23 timeKeeper::timeKeeper()
29 int timeKeeper::start()
31 gettimeofday(&tvPrev,NULL);
32 gettimeofday(&tvLast,NULL);
33 gettimeofday(&tvStart,NULL);
34 gettimeofday(&tvStop,NULL);
35 timeStart = time(NULL);
40 pauseTotalTimeSec = 0;
42 isPauseActive = false;
43 wasLastPauseLogged = true;
44 disableDateForStrings();
48 int timeKeeper::stop()
50 if(false == isRunning)
56 timeStop = time(NULL);
58 gettimeofday(&tvLast,NULL);
59 gettimeofday(&tvStop,NULL);
65 int timeKeeper::update()
67 if(false == isRunning)
74 timeLast = time(NULL);
77 gettimeofday(&tvLast,NULL);
82 double timeKeeper::getDelta(struct timeval tvLater, struct timeval tvEarlier)
84 double tvTime = (double)(tvLater.tv_sec - tvEarlier.tv_sec);
86 tvTime = tvTime*1e6+(double)(tvLater.tv_usec - tvEarlier.tv_usec);
92 double timeKeeper::getDeltaLastToStart()
96 if(false == isRunning)
98 retval = getDelta(tvStop,tvStart);
102 retval = getDelta(tvLast,tvStart);
104 retval -= pauseTotalTimeSec;
109 double timeKeeper::getDeltaNowToStart()
114 gettimeofday(&now,NULL);
116 if(false == isRunning)
118 retval = getDelta(tvStop,tvStart);
122 retval = getDelta(now,tvStart);
124 retval -= pauseTotalTimeSec;
129 double timeKeeper::getDeltaLastToPrev()
133 if(false == isRunning)
138 retval = getDelta(tvLast,tvPrev);
140 if(false == wasLastPauseLogged)
142 retval -= pauseTimeSec;
143 wasLastPauseLogged = true;
149 double timeKeeper::getDeltalNowToPrev()
154 gettimeofday(&now,NULL);
156 if(false == isRunning)
158 retval = getDelta(tvStop,tvPrev);
162 retval = getDelta(now,tvPrev);
164 retval -= pauseTotalTimeSec;
169 string timeKeeper::makeString(time_t timer)
172 struct tm *helper=NULL;
174 helper=localtime(&timer);
175 sstr << setfill('0');
176 if(true == dateForStrings)
178 sstr << setw(2) << 1900+helper->tm_year << "-";
179 sstr << setw(2) << helper->tm_mon << "-";
180 sstr << setw(2) << helper->tm_mday << " ";
182 sstr << setw(2) << helper->tm_hour << ":";
183 sstr << setw(2) << helper->tm_min << ":";
184 sstr << setw(2) << helper->tm_sec;
189 string timeKeeper::getStartTimeString()
191 return makeString(timeStart);
194 string timeKeeper::getPreviousTimeString()
196 return makeString(timePrev);
199 string timeKeeper::getLastTimeString()
201 return makeString(timeLast);
204 string timeKeeper::getNowTimeString()
206 time_t timeNow = time(NULL);
207 return makeString(timeNow);
210 int timeKeeper::pause()
212 if(false == isRunning)
222 int timeKeeper::startPause()
224 if(true == isPauseActive)
228 gettimeofday(&tvPauseStart,NULL);
229 isPauseActive = true;
234 int timeKeeper::stopPause()
236 if(false == isPauseActive)
241 gettimeofday(&tvPauseStop,NULL);
242 pauseTimeSec = getDelta(tvPauseStop,tvPauseStart);
243 pauseTotalTimeSec += pauseTimeSec;
244 wasLastPauseLogged = false;
245 isPauseActive = false;
250 int timeKeeper::isPaused()
252 return isPauseActive;
258 bool timeKeeper::enableDateForStrings()
260 dateForStrings = true;
261 return dateForStrings;
264 bool timeKeeper::disableDateForStrings()
266 dateForStrings = false;
267 return dateForStrings;
270 bool timeKeeper::isDateForStringsEnabled()
272 return dateForStrings;