From: Loof, D. <dl...@us...> - 2005-01-22 10:17:35
|
Update of /cvsroot/pclasses/pclasses2/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17168/src Modified Files: DateTime.cpp Log Message: add operators Index: DateTime.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/DateTime.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- DateTime.cpp 27 Dec 2004 06:57:05 -0000 1.3 +++ DateTime.cpp 22 Jan 2005 10:17:25 -0000 1.4 @@ -119,6 +119,101 @@ Time(ltm->tm_hour, ltm->tm_min, ltm->tm_sec)); } +DateTime& DateTime::operator+=(const TimeSpan& sp) throw() +{ + unsigned int dayoverflow = 0; + unsigned int tmp = usec() + sp.usecs(); + if ( tmp > (1000 * 1000) - 1 ) + { + tmp -= 1000 * 1000; + setSecond(second() + 1); + } + setUsec(tmp); + + tmp = second() + sp.seconds(); + if ( tmp > 59 ) + { + tmp -= 60; + setMinute(minute() + 1); + } + setSecond(tmp); + + tmp = minute() + sp.minutes(); + if ( tmp > 59 ) + { + tmp -= 60; + setHour(hour() + 1); + } + setMinute(tmp); + + tmp = hour() + sp.hours(); + if ( tmp > 23 ) + { + tmp -= 24; + ++dayoverflow; + } + setHour(tmp); + + TimeSpan tmpts(sp.days() + dayoverflow); + Date::operator+=(tmpts); + + return *this; +} + +DateTime& DateTime::operator-=(const TimeSpan& sp) throw() +{ + unsigned int underflow = 0; + int tmp = usec() - sp.usecs(); + if ( tmp < 0 ) + { + tmp += 1000 * 1000; + setSecond(second() - 1); + } + setUsec(tmp); + + tmp = second() - sp.seconds(); + if ( tmp < 0 ) + { + tmp += 60; + setMinute(minute() -1); + } + setSecond(tmp); + + tmp = minute() - sp.minutes(); + if ( tmp < 0 ) + { + tmp += 60; + setHour(hour() -1); + } + setMinute(tmp); + + tmp = hour() - sp.hours(); + if ( tmp < 0 ) + { + tmp += 24; + ++underflow; + } + setHour(tmp); + + TimeSpan tmpts(sp.days() + underflow); + Date::operator-=(tmpts); + return *this; +} + +DateTime operator+(const DateTime& dt, const TimeSpan& sp) throw() +{ + DateTime ret = dt; + ret += sp; + return ret; +} + +DateTime operator-(const DateTime& dt, const TimeSpan& sp) throw() +{ + DateTime ret = dt; + ret -= sp; + return ret; +} + std::ostream& operator << (std::ostream& os, const DateTime& dt) { os << (Date&)dt << ' ' << (Time&)dt << ' ' << dt.timeZone(); |