From: Loof, D. <dl...@us...> - 2005-01-19 18:48:57
|
Update of /cvsroot/pclasses/pclasses2/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13071/src Modified Files: Time.cpp Log Message: add operators +=, -=, +, - Index: Time.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/Time.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- Time.cpp 27 Dec 2004 05:33:15 -0000 1.2 +++ Time.cpp 19 Jan 2005 18:48:39 -0000 1.3 @@ -82,7 +82,7 @@ void Time::setUsec(unsigned int usec) throw(InvalidTime) { if(usec > (1000 * 1000) - 1) - throw InvalidTime("Invalid hour", P_SOURCEINFO); + throw InvalidTime("Invalid usec", P_SOURCEINFO); _usec = usec; } @@ -140,6 +140,80 @@ return (!operator==(t)); } +Time& Time::operator+=(const TimeSpan& sp) throw() +{ + _usec += sp.usecs(); + if ( _usec > (1000 * 1000) - 1 ) + { + ++_second; + } + + _second += sp.seconds(); + if ( _second > 59 ) + { + _second -= 60; + ++_minute; + } + + _minute += sp.minutes(); + if ( _minute > 59 ) + { + _minute -= 60; + ++_hour; + } + + _hour += sp.hours(); + if ( _hour > 23 ) + throw OverflowError("Overflow", P_SOURCEINFO); + + return *this; +} + +Time& Time::operator-=(const TimeSpan& sp) throw() +{ + if ( _usec < sp.usecs() ) + { + _usec += ( 1000 * 1000 ); + --_second; + } + _usec -= sp.usecs(); + + if ( _second < sp.seconds() ) + { + _second += 60; + --_minute; + } + _second -= sp.seconds(); + + if ( _minute < sp.minutes() ) + { + _minute += 60; + --_hour; + } + _minute -= sp.minutes(); + + if ( _hour < sp.hours()) + throw OverflowError("Overflow", P_SOURCEINFO); + + _hour -= sp.hours(); + + return *this; +} + +Time operator+(const Time& t, const TimeSpan& sp) throw() +{ + Time ret = t; + ret += sp; + return ret; +} + +Time operator-(const Time& t, const TimeSpan& sp) throw() +{ + Time ret = t; + ret -= sp; + return ret; +} + std::ostream& operator << (std::ostream& os, const Time& t) { int oldw = os.width(); |