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