/* * hrtime.cpp * * Created on: Oct 4, 2009 * Author: Michael Fischer * For use in Yale course CPSC 427a, Fall 2010 */ #include "tools.hpp" #include "hrtime.hpp" //------------------------------------------------------------------- // Read system clock void HirezTime::readClock() { int ret = gettimeofday(this, NULL); if (ret<0) perror("Error reading clock"); } //------------------------------------------------------------------- // Operator extension to add two HirezTime values HirezTime HirezTime::operator+(HirezTime ht2) const { long sum_sec = tv_sec + ht2.tv_sec; long sum_usec = tv_usec + ht2.tv_usec; if (sum_usec >= 1000000L) { sum_usec -= 1000000L; sum_sec++; } return HirezTime(sum_sec, sum_usec); } //------------------------------------------------------------------- // Operator extension to subtract two HirezTime values // Assumes first operand >= second, so difference is non-negative. HirezTime HirezTime::operator-(HirezTime ht2) const { long diff_sec = tv_sec - ht2.tv_sec; long diff_usec = tv_usec - ht2.tv_usec; if (diff_sec < 0 || (diff_sec == 0 && diff_usec < 0)) fatal("Can't handle negative time differences"); if (diff_usec < 0) { diff_usec += 1000000L; diff_sec--; } return HirezTime(diff_sec, diff_usec); } //------------------------------------------------------------------- // Prints HirezTime value in seconds as a decimal fraction. ostream& HirezTime::print(ostream& os) const { char prev = cout.fill('0'); os<< tv_sec<< "."<< right<< setw(6)<< tv_usec; cout.fill(prev); return os; }