chxavtimevalue.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:4k
源码类别:

Symbian

开发平台:

Visual C++

  1. /*============================================================================*
  2.  *
  3.  * (c) 1995-2002 RealNetworks, Inc. Patents pending. All rights reserved.
  4.  *
  5.  *============================================================================*/
  6.  
  7. #ifndef UT_TIME_VALUE_H
  8. #define UT_TIME_VALUE_H
  9. /*
  10.  *  CHXAvTimeValue:  Wrapper class for system time.
  11.  *
  12.  *
  13.  * This wrapper for time was lifted for the most part from
  14.  * the ACE Networking Package.
  15.  */
  16. #include <sys/time.h>
  17. #include <e32std.h>
  18. class CHXAvTimeValue {
  19. public:
  20.     CHXAvTimeValue(long sec = 0, long usec = 0);
  21.     CHXAvTimeValue(const CHXAvTimeValue&);
  22.     CHXAvTimeValue& operator=(const CHXAvTimeValue&);
  23.     long sec() const;
  24.     long usec() const;
  25.     CHXAvTimeValue& operator+=(const CHXAvTimeValue&);
  26.     CHXAvTimeValue& operator-=(const CHXAvTimeValue&);
  27.     CHXAvTimeValue operator+(const CHXAvTimeValue&)const;
  28.     CHXAvTimeValue operator-(const CHXAvTimeValue&)const;
  29.     int operator<(const CHXAvTimeValue&) const;
  30.     int operator>(const CHXAvTimeValue&) const;
  31.     int operator<=(const CHXAvTimeValue&) const;
  32.     int operator>=(const CHXAvTimeValue&) const;
  33.     int operator==(const CHXAvTimeValue&) const;
  34.     int operator!=(const CHXAvTimeValue&) const;
  35. // get current time
  36.     static int now(CHXAvTimeValue&);
  37.     CHXAvTimeValue zero() const { return CHXAvTimeValue(0, 0); } // zero constant.
  38. private:
  39.     void normalize();
  40.     static bool GetTimeofDay(long& sec, long& usec);
  41.     long sec_;
  42.     long usec_;
  43. };
  44. inline
  45. TTime UnixStart()
  46. {
  47.     return TDateTime(1970, EJanuary, 0, 00, 0, 0, 0);
  48. }
  49. inline
  50. bool CHXAvTimeValue::GetTimeofDay(long& sec, long& usec)
  51. {
  52.     TTime utc;
  53.     utc.UniversalTime();
  54.     
  55.     TInt64 unixTime = utc.Int64()  - UnixStart().Int64();
  56.     sec = (unixTime/1000000).GetTInt();
  57.     usec = (unixTime%1000000).GetTInt();
  58.     return true;
  59. }
  60. inline
  61. CHXAvTimeValue::CHXAvTimeValue(long sec, long usec)
  62.     : sec_(sec), usec_(usec)
  63. {
  64.     normalize();
  65. }
  66.   
  67. inline
  68. CHXAvTimeValue::CHXAvTimeValue(const CHXAvTimeValue& tv)
  69.     : sec_(tv.sec_), usec_(tv.usec_)
  70. {}
  71. inline
  72. CHXAvTimeValue& CHXAvTimeValue::operator=(const CHXAvTimeValue& tv)
  73. {
  74.     if (this != &tv)  {
  75. sec_ = tv.sec_;
  76. usec_ = tv.usec_;
  77.     }
  78.     return *this;
  79. }
  80. inline
  81. CHXAvTimeValue& CHXAvTimeValue::operator+=(const CHXAvTimeValue& tv)
  82. {
  83.     sec_ += tv.sec_;
  84.     usec_ += tv.usec_;
  85.     normalize();
  86.     return *this;
  87. }
  88. inline
  89. CHXAvTimeValue& CHXAvTimeValue::operator-=(const CHXAvTimeValue& tv)
  90. {
  91.     sec_ -= tv.sec_;
  92.     usec_ -= tv.usec_;
  93.     normalize();
  94.     return *this;
  95. }
  96. inline
  97. long CHXAvTimeValue::sec() const
  98. {
  99.     return sec_;
  100. }
  101. inline
  102. long CHXAvTimeValue::usec() const
  103. {
  104.     return usec_;
  105. }
  106. inline
  107. CHXAvTimeValue CHXAvTimeValue::operator+(const CHXAvTimeValue& tv) const
  108. {
  109.     CHXAvTimeValue sum(*this);
  110.     return sum += tv;
  111. }
  112. inline
  113. CHXAvTimeValue CHXAvTimeValue::operator-(const CHXAvTimeValue& tv) const
  114. {
  115.     CHXAvTimeValue delta(*this);
  116.     return delta -= tv;
  117. }
  118. inline
  119. int CHXAvTimeValue::operator<(const CHXAvTimeValue& tv) const
  120. {
  121.     return sec_ < tv.sec_ || (sec_ == tv.sec_ && usec_ < tv.usec_);
  122. }
  123. inline
  124. int CHXAvTimeValue::operator>(const CHXAvTimeValue& tv) const
  125. {
  126.     return sec_ > tv.sec_ || (sec_ == tv.sec_ &&  usec_ > tv.usec_);
  127. }
  128. inline
  129. int CHXAvTimeValue::operator<=(const CHXAvTimeValue& tv) const
  130. {
  131.     return sec_ < tv.sec_ || (sec_ == tv.sec_ &&  usec_ <= tv.usec_);
  132. }
  133. inline
  134. int CHXAvTimeValue::operator>=(const CHXAvTimeValue& tv) const
  135. {
  136.     return sec_ > tv.sec_ || (sec_ == tv.sec_ && usec_ >= tv.usec_);
  137. }
  138. inline
  139. int CHXAvTimeValue::operator==(const CHXAvTimeValue& tv) const
  140. {
  141.     return sec_ == tv.sec_ &&  usec_ == tv.usec_;
  142. }
  143. inline
  144. int CHXAvTimeValue::operator!=(const CHXAvTimeValue& tv) const
  145. {
  146.     return sec_ != tv.sec_ ||  usec_ != tv.usec_;
  147. }
  148. // CHXAvTimeValue::now:
  149. //   Get current time
  150. inline
  151. int CHXAvTimeValue::now(CHXAvTimeValue& tv)
  152. {
  153.     int ok = 0;
  154.  
  155.     if ((ok = (GetTimeofDay(tv.sec_, tv.usec_))))
  156. tv.normalize();
  157.     return ok;
  158. }
  159. #endif // UT_STREAM_VALUE_H