home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / classinc.pak / TIME.H < prev    next >
C/C++ Source or Header  |  1997-07-23  |  6KB  |  222 lines

  1. /*------------------------------------------------------------------------*/
  2. /*                                                                        */
  3. /*  TIME.H                                                                */
  4. /*                                                                        */
  5. /*  Copyright (c) 1993, 1994 Borland International                        */
  6. /*  All Rights Reserved                                                   */
  7. /*                                                                        */
  8. /*------------------------------------------------------------------------*/
  9.  
  10. #if !defined(CLASSLIB_TIME_H)
  11. #define CLASSLIB_TIME_H
  12.  
  13. #if !defined( __TIME_H )
  14. #include <time.h>
  15. #endif
  16.  
  17. #if !defined( CLASSLIB_DEFS_H )
  18. #include <classlib/defs.h>
  19. #endif
  20.  
  21. #if !defined( CLASSLIB_DATE_H )
  22. #include <classlib/date.h>
  23. #endif
  24.  
  25. #if defined( BI_CLASSLIB_NO_po )
  26. #pragma option -po-
  27. #endif
  28.  
  29. class _EXPCLASS string;
  30. class _EXPCLASS istream;
  31. class _EXPCLASS ostream;
  32. class _BIDSCLASS ipstream;
  33. class _BIDSCLASS opstream;
  34.  
  35. typedef unsigned HourTy;
  36. typedef unsigned MinuteTy;
  37. typedef unsigned SecondTy;
  38. typedef unsigned long ClockTy;
  39.  
  40. static const unsigned long secFrom_Jan_1_1901_to_Jan_1_1970 = 2177452800L;
  41.  
  42. class _BIDSCLASS TTime
  43. {
  44.  
  45. public:
  46.  
  47.     friend TDate::TDate( const TTime _BIDSFAR & );
  48.  
  49.     TTime();                  // Current time
  50.     TTime( ClockTy s );       // Seconds since Jan 1, 1901.
  51.     TTime( HourTy h, MinuteTy m, SecondTy s = 0 );
  52.                                 // Specified time and today's date
  53.     TTime( const TDate _BIDSFAR &, HourTy h=0, MinuteTy m=0, SecondTy s=0 );
  54.                                 // Given date and time
  55.  
  56.     string AsString() const;
  57.     int CompareTo( const TTime _BIDSFAR & ) const;
  58.     unsigned Hash() const;
  59.     HourTy Hour() const;        // hour: local time
  60.     HourTy HourGMT() const;     // hour: GMT
  61.     int IsDST() const;
  62.     int IsValid() const;
  63.     TTime Max( const TTime _BIDSFAR & t ) const;
  64.     TTime Min( const TTime _BIDSFAR & t ) const;
  65.     MinuteTy Minute() const;    // minute: local time
  66.     MinuteTy MinuteGMT() const; // minute: GMT
  67.     SecondTy Second() const;    // second: local time or GMT
  68.     ClockTy Seconds() const;
  69.  
  70.     // Write times:
  71.     friend ostream _BIDSFAR & _BIDSFUNC operator << ( ostream _BIDSFAR &, const TTime _BIDSFAR & );
  72.  
  73.     // Read or write times on persistent streams
  74.     friend opstream _BIDSFAR & _BIDSFUNC operator << ( opstream _BIDSFAR & s, const TTime _BIDSFAR & d );
  75.     friend ipstream _BIDSFAR & _BIDSFUNC operator >> ( ipstream _BIDSFAR & s, TTime _BIDSFAR & d );
  76.  
  77.     // Boolean operators.
  78.     int operator <  ( const TTime _BIDSFAR & t ) const;
  79.     int operator <= ( const TTime _BIDSFAR & t ) const;
  80.     int operator >  ( const TTime _BIDSFAR & t ) const;
  81.     int operator >= ( const TTime _BIDSFAR & t ) const;
  82.     int operator == ( const TTime _BIDSFAR & t ) const;
  83.     int operator != ( const TTime _BIDSFAR & t ) const;
  84.     int Between( const TTime _BIDSFAR & a, const TTime _BIDSFAR & b ) const;
  85.  
  86.     // Add or subtract seconds.
  87.     friend TTime _BIDSFUNC operator + ( const TTime _BIDSFAR & t, long s );
  88.     friend TTime _BIDSFUNC operator + ( long s, const TTime _BIDSFAR & t );
  89.     friend TTime operator - ( const TTime _BIDSFAR & t, long s );
  90.     friend TTime operator - ( long s, const TTime _BIDSFAR & t );
  91.     void operator++();
  92.     void operator--();
  93.     void operator+=(long s);
  94.     void operator-=(long s);
  95.  
  96.     // Static member functions:
  97.     static TTime BeginDST( unsigned year ); // Start of DST for given year.
  98.     static TTime EndDST( unsigned year );   // End of DST for given year.
  99.     static int PrintDate( int );    // Whether to include date when printing time
  100.  
  101. protected:
  102.  
  103.     static int AssertDate( const TDate _BIDSFAR & );
  104.     static const TDate RefDate;
  105.     static const TDate MaxDate;
  106.  
  107. private:
  108.  
  109.     ClockTy Sec;        // Seconds since 1/1/1901.
  110.     static int PrintDateFlag;  // True to print date along with time.
  111.  
  112.     ClockTy LocalSecs() const;
  113.     static TTime BuildLocal( const TDate _BIDSFAR &, HourTy );
  114.  
  115. };
  116.  
  117. #if defined( BI_OLDNAMES )
  118. #define BI_Time TTime
  119. #endif
  120.  
  121. inline TTime::TTime( ClockTy s )
  122. {
  123.     Sec = s;
  124. }
  125.  
  126. inline int TTime::IsValid() const
  127. {
  128.     return Sec > 0;
  129. }
  130.  
  131. inline ClockTy TTime::Seconds() const
  132. {
  133.     return Sec;
  134. }
  135.  
  136. inline int TTime::operator <  ( const TTime& t ) const
  137. {
  138.     return Sec < t.Sec;
  139. }
  140.  
  141. inline int TTime::operator <= ( const TTime& t ) const
  142. {
  143.     return Sec <= t.Sec;
  144. }
  145.  
  146. inline int TTime::operator >  ( const TTime& t ) const
  147. {
  148.     return Sec > t.Sec;
  149. }
  150.  
  151. inline int TTime::operator >= ( const TTime& t ) const
  152. {
  153.     return Sec >= t.Sec;
  154. }
  155.  
  156. inline int TTime::operator == ( const TTime& t ) const
  157. {
  158.     return Sec == t.Sec;
  159. }
  160.  
  161. inline int TTime::operator != ( const TTime& t ) const
  162. {
  163.     return Sec != t.Sec;
  164. }
  165.  
  166. inline int TTime::Between( const TTime& a, const TTime& b ) const
  167. {
  168.     return *this >= a && *this <= b;
  169. }
  170.  
  171. inline TTime operator + ( const TTime& t, long s )
  172. {
  173.     return TTime(t.Sec+s);
  174. }
  175.  
  176. inline TTime operator + ( long s, const TTime& t )
  177. {
  178.     return TTime(t.Sec+s);
  179. }
  180.  
  181. inline TTime operator - ( const TTime& t, long s )
  182. {
  183.     return TTime(t.Sec-s);
  184. }
  185.  
  186. inline TTime operator - ( long s, const TTime& t )
  187. {
  188.     return TTime(t.Sec-s);
  189. }
  190.  
  191. inline void TTime::operator++()
  192. {
  193.     Sec += 1;
  194. }
  195.  
  196. inline void TTime::operator--()
  197. {
  198.     Sec -= 1;
  199. }
  200.  
  201. inline void TTime::operator+=(long s)
  202. {
  203.     Sec += s;
  204. }
  205.  
  206. inline void TTime::operator-=(long s)
  207. {
  208.     Sec -= s;
  209. }
  210.  
  211. inline HashValue( TTime _BIDSFAR & t )
  212. {
  213.     return t.Hash();
  214. }
  215.  
  216. #if defined( BI_CLASSLIB_NO_po )
  217. #pragma option -po.
  218. #endif
  219.  
  220. #endif  // CLASSLIB_TIME_H
  221.  
  222.