TimeInterval.cc

00001 /* 
00002    EyeDB Object Database Management System
00003    Copyright (C) 1994-2008 SYSRA
00004    
00005    EyeDB is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009    
00010    EyeDB is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014    
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with this library; if not, write to the Free Software
00017    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA 
00018 */
00019 
00020 /*
00021    Author: Laurent Pereira
00022 */
00023 
00024 #include <eyedb/syscls.h>
00025 #include "ClockConverter.h"
00026 #include "datelib.h"
00027 
00028 namespace eyedb {
00029   //
00030   // TimeInterval user methods
00031   //
00032 
00033   void
00034   TimeInterval::userCopy(const Object &)
00035   {
00036     setClientData();
00037   }
00038 
00039   void
00040   TimeInterval::userInitialize()
00041   {
00042     setClientData();
00043   }
00044 
00045   void
00046   TimeInterval::setClientData()
00047   {
00048     ClockConverter * clock = DateAlgorithmRepository::getDefaultClockConverter();
00049 
00050     char * s_time = clock->usec2ascii(getUsecs());
00051 
00052     strcpy(string_time_interval, s_time);
00053 
00054     delete [] s_time;
00055   }
00056 
00057 
00058   eyedblib::int32
00059   TimeInterval::day() const
00060   {
00061     ClockConverter * clock = DateAlgorithmRepository::getDefaultClockConverter();
00062 
00063     return clock->usec2day(getUsecs());
00064   }
00065 
00066   eyedblib::int16
00067   TimeInterval::hour() const
00068   {
00069     ClockConverter * clock = DateAlgorithmRepository::getDefaultClockConverter();
00070 
00071     eyedblib::int16 hour = 0;
00072     clock->usec2clock( getUsecs(), &hour);
00073 
00074     return hour % 24;
00075   }
00076 
00077   eyedblib::int16
00078   TimeInterval::minute() const
00079   {
00080     ClockConverter * clock = DateAlgorithmRepository::getDefaultClockConverter();
00081 
00082     eyedblib::int16 min = 0;
00083     clock->usec2clock( getUsecs(), 0, &min);
00084 
00085     return min;
00086   }
00087 
00088   eyedblib::int16
00089   TimeInterval::second() const
00090   {
00091     ClockConverter * clock = DateAlgorithmRepository::getDefaultClockConverter();
00092 
00093     eyedblib::int16 sec = 0;
00094     clock->usec2clock( getUsecs(), 0, 0, &sec);
00095 
00096     return sec;
00097   }
00098 
00099   eyedblib::int16
00100   TimeInterval::millisecond() const
00101   {
00102     ClockConverter * clock = DateAlgorithmRepository::getDefaultClockConverter();
00103 
00104     eyedblib::int16 ms = 0;
00105     clock->usec2clock( getUsecs(), 0, 0, 0, &ms);
00106 
00107     return ms;
00108   }
00109 
00110 
00111   eyedblib::int16
00112   TimeInterval::microsecond() const
00113   {
00114     ClockConverter * clock = DateAlgorithmRepository::getDefaultClockConverter();
00115 
00116     eyedblib::int16 us = 0;
00117     clock->usec2clock( getUsecs(), 0, 0, 0, 0, &us);
00118 
00119     return us;
00120   }
00121 
00122 
00123   Bool
00124   TimeInterval::is_zero() const
00125   {
00126     if( getUsecs() == 0 ) 
00127       {
00128         return True;
00129       }
00130     else
00131       {
00132         return False;
00133       }
00134   }
00135 
00136   TimeInterval &
00137   TimeInterval::plus(const TimeInterval & i)
00138   {
00139     set_usecs( getUsecs() + i.getUsecs() );
00140 
00141     return *this;
00142   }
00143 
00144   TimeInterval &
00145   TimeInterval::minus(const TimeInterval & i)
00146   {
00147     set_usecs( getUsecs() - i.getUsecs() );
00148 
00149     return *this;
00150   }
00151 
00152   TimeInterval &
00153   TimeInterval::product(eyedblib::int64 val)
00154   {
00155     set_usecs( getUsecs() * val );
00156 
00157     return *this;
00158   }
00159 
00160   TimeInterval &
00161   TimeInterval::quotient(eyedblib::int64 val)
00162   {
00163     set_usecs( getUsecs() / val );
00164 
00165     return *this;
00166   }
00167 
00168   Bool
00169   TimeInterval::is_equal(const TimeInterval & i) const
00170   {
00171     if( getUsecs() == i.getUsecs() )
00172       {
00173         return True;
00174       }
00175     else
00176       {
00177         return False;
00178       }
00179   }
00180 
00181   Bool
00182   TimeInterval::is_greater(const TimeInterval & i) const
00183   {
00184     if( getUsecs() > i.getUsecs() )
00185       {
00186         return True;
00187       }
00188     else
00189       {
00190         return False;
00191       }
00192   }
00193 
00194   Bool
00195   TimeInterval::is_greater_or_equal(const TimeInterval & i) const
00196   {
00197     if( getUsecs() >= i.getUsecs() )
00198       {
00199         return True;
00200       }
00201     else
00202       {
00203         return False;
00204       }
00205   }
00206 
00207   Bool
00208   TimeInterval::is_less(const TimeInterval & i) const
00209   {
00210     if( getUsecs() < i.getUsecs() )
00211       {
00212         return True;
00213       }
00214     else
00215       {
00216         return False;
00217       }
00218   }
00219 
00220   Bool
00221   TimeInterval::is_less_or_equal(const TimeInterval & i) const
00222   {
00223     if( getUsecs() <= i.getUsecs() )
00224       {
00225         return True;
00226       }
00227     else
00228       {
00229         return False;
00230       }
00231   }
00232 
00233   Status
00234   TimeInterval::set_usecs(eyedblib::int64 usecs)
00235   {
00236     Status s = setUsecs(usecs);
00237   
00238     if(!s)
00239       {
00240         setClientData();
00241       }
00242 
00243     return s;
00244   }
00245 
00246   TimeInterval *
00247   TimeInterval::time_interval(Database * db, eyedblib::int64 usecs)
00248   {
00249     TimeInterval * i = new TimeInterval(db);
00250     i->set_usecs(usecs);
00251 
00252     return i;
00253   }
00254 
00255   TimeInterval *
00256   TimeInterval::time_interval(Database * db, eyedblib::int32 day, eyedblib::int16 hours, eyedblib::int16 min, eyedblib::int16 sec, eyedblib::int16 msec, eyedblib::int16 usec)
00257   {
00258     ClockConverter * clock = DateAlgorithmRepository::getDefaultClockConverter();
00259 
00260     TimeInterval * i = new TimeInterval(db);
00261 
00262     eyedblib::int64 usecs = 0;
00263     eyedblib::int64 total_hours = day * 24 + hours;
00264     clock->clock2usec(&usecs, total_hours, min, sec, msec, usec);
00265 
00266     i->set_usecs(usecs);
00267    
00268     return i;
00269   }
00270 
00271   const char *
00272   TimeInterval::toString() const
00273   {
00274     return string_time_interval;
00275   }
00276 
00277 }

Generated on Mon Dec 22 18:16:11 2008 for eyedb by  doxygen 1.5.3