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();
|