// NOTE: in order to compile this system on Linux (and most Unix
// systems) you will have to include the -lrt flag to your compiler.
#include <sstream>
#include <math.h>
#include <cstring>
#include "timer.h"
timer::timer(timer & t) : running(t.running) {
memcpy(&startVar, &(t.startVar), sizeof (timeval));
memcpy(&stopVar, &(t.stopVar), sizeof (timeval));
}
int timer::start() {
if (!running) {
running = true;
gettimeofday(&startVar,NULL);
return 0;
}
return 1;
}
int timer::stop() {
if (running) {
running = 0;
gettimeofday(&stopVar,NULL);
return 0;
}
return 1;
}
ostream & timer::print(ostream & out) {
return (out << toString());
}
double timer::getTime() {
time_t sec = stopVar.tv_sec - startVar.tv_sec;
long usec = stopVar.tv_usec - startVar.tv_usec;
return sec + usec/1000000.0;
}
string timer::toString() {
ostringstream out;
if (running)
out << "Timer still running\n";
else {
time_t sec = stopVar.tv_sec - startVar.tv_sec;
long usec = stopVar.tv_usec - startVar.tv_usec;
if ( usec < 0 ) {
sec--;
usec += 1000000;
}
out << sec << "."
<< ((usec<100000)?"0":"")
<< ((usec<10000)?"0":"")
<< ((usec<1000)?"0":"")
<< ((usec<100)?"0":"")
<< ((usec<10)?"0":"")
<< usec;
}
return out.str();
}
ostream & operator<<(ostream &out, timer &t) {
return t.print(out);
}