Panda3D

time_general.h

00001 #ifndef __TIME_GENERAL_H__
00002 #define __TIME_GENERAL_H__
00003 
00004 
00005 Time_Span TimeDifference(const Time_Clock &time1, const Time_Clock &time2);
00006 Time_Clock TimeDifference( const Time_Clock &time1, const Time_Span &Time_Span);
00007 Time_Clock TimeAddition(const Time_Clock &time1, Time_Span &Time_Span);
00008 
00009 
00010 Time_Clock operator+(const Time_Clock &tm, const Time_Span &ts);
00011 Time_Clock operator-(const Time_Clock &tm, const Time_Span &ts);
00012 
00013 
00014 bool SetFromTimeStr(const char * str, Time_Clock & outtime);
00015 std::string GetTimeStr(const Time_Clock & intime);
00016 
00017 //////////////////////////////////////////////////////////////
00018 // Function name :  TimeDifference
00019 // Description     :
00020 // Return type  : inline Time_Span
00021 // Argument         : const  Time_Clock &time1
00022 // Argument         : const Time_Clock &time2
00023 //////////////////////////////////////////////////////////////
00024 inline Time_Span TimeDifference(const Time_Clock &time1, const Time_Clock &time2)
00025 {
00026     timeval ans;
00027     TimeDif(time2.GetTval(), time1.GetTval(), ans);
00028     return Time_Span(ans);
00029 }
00030 //////////////////////////////////////////////////////////////
00031 // Function name : TimeDifference
00032 // Description     :
00033 // Return type  :
00034 // Argument         :  const Time_Clock &time1
00035 // Argument         : const Time_Span &Time_Span
00036 //////////////////////////////////////////////////////////////
00037 inline Time_Clock TimeDifference( const Time_Clock &time1, const Time_Span &Time_Span)
00038 {
00039     timeval ans;
00040     TimeDif(Time_Span.GetTval(), time1.GetTval(), ans);
00041     return Time_Clock(ans);
00042 }
00043 //////////////////////////////////////////////////////////////
00044 // Function name : TimeAddition
00045 // Description     :
00046 // Return type  :
00047 // Argument         : const Time_Clock &time1
00048 // Argument         : Time_Span &Time_Span
00049 //////////////////////////////////////////////////////////////
00050 inline Time_Clock TimeAddition(const Time_Clock &time1, Time_Span &Time_Span)
00051 {
00052     timeval ans;
00053     TimeAdd(time1.GetTval(), Time_Span.GetTval(), ans);
00054     return Time_Clock(ans);
00055 }
00056 //////////////////////////////////////////////////////////////
00057 // Function name : Time_Clock& Time_Clock::operator+=
00058 // Description     :
00059 // Return type  : inline const
00060 // Argument         : Time_Span &Time_Span
00061 //////////////////////////////////////////////////////////////
00062 inline const Time_Clock& Time_Clock::operator+=(const Time_Span &Time_Span)
00063 {
00064     _my_time.tv_usec += Time_Span._my_time.tv_usec;
00065     _my_time.tv_sec += Time_Span._my_time.tv_sec;
00066     NormalizeTime(_my_time);
00067     return *this;
00068 }
00069 //////////////////////////////////////////////////////////////
00070 // Function name : operator+
00071 // Description     :
00072 // Return type  : inline Time_Clock
00073 // Argument         : const Time_Clock &tm
00074 // Argument         : const Time_Span &ts
00075 //////////////////////////////////////////////////////////////
00076 inline Time_Clock operator+(const Time_Clock &tm, const Time_Span &ts)
00077 {
00078     Time_Clock work(tm);
00079     work += ts;
00080     return work;
00081 }
00082 //////////////////////////////////////////////////////////////
00083 // Function name : operator-
00084 // Description     :
00085 // Return type  : inline Time_Clock
00086 // Argument         : const Time_Clock &tm
00087 // Argument         : const Time_Span &ts
00088 //////////////////////////////////////////////////////////////
00089 inline Time_Clock operator-(const Time_Clock &tm, const Time_Span &ts)
00090 {
00091     return TimeDifference(tm, ts);
00092 }
00093 //////////////////////////////////////////////////////////////
00094 // Function name : Time_Clock& Time_Clock::operator-=
00095 // Description     :
00096 // Return type  : inline const
00097 // Argument         : Time_Span &Time_Span
00098 //////////////////////////////////////////////////////////////
00099 inline const Time_Clock& Time_Clock::operator-=(const Time_Span &Time_Span)
00100 {
00101     _my_time.tv_usec -= Time_Span._my_time.tv_usec;
00102     _my_time.tv_sec -= Time_Span._my_time.tv_sec;
00103     NormalizeTime(_my_time);
00104     return *this;
00105 }
00106 //////////////////////////////////////////////////////////////
00107 // Function name : operator-
00108 // Description     :
00109 // Return type  : inline Time_Span
00110 // Argument         : const Time_Clock &tm1
00111 // Argument         : const Time_Clock &tm2
00112 //////////////////////////////////////////////////////////////
00113 inline Time_Span operator-(const Time_Clock &tm1, const Time_Clock &tm2)
00114 {
00115     return TimeDifference(tm1, tm2);
00116 }
00117 //////////////////////////////////////////////////////////////
00118 // Function name : char * GetTimeStr
00119 // Description     :
00120 // Return type  : inline const
00121 // Argument         : const Time_Clock & intime
00122 //////////////////////////////////////////////////////////////
00123 inline std::string GetTimeStr(const Time_Clock & intime)
00124 {
00125     static std::string ts;
00126     static Time_Clock prev_time;
00127     
00128     if (prev_time != intime || ts.empty()) 
00129     {
00130         ts = intime.Format("%Y-%m-%d %H:%M:%S");
00131         prev_time = intime;
00132     }
00133     return ts;
00134 }
00135 //////////////////////////////////////////////////////////////
00136 // Function name :  GetTimeStr
00137 // Description     :
00138 // Return type  : inline std::string
00139 // Argument         : void
00140 //////////////////////////////////////////////////////////////
00141 inline std::string GetTimeStr()
00142 {
00143     return GetTimeStr(Time_Clock::GetCurrentTime());
00144 }
00145 //////////////////////////////////////////////////////////////
00146 // Function name : SetFromTimeStr
00147 // Description     :
00148 // Return type  : inline bool
00149 // Argument         : const char * str
00150 // Argument         : Time_Clock & outtime
00151 //////////////////////////////////////////////////////////////
00152 inline bool SetFromTimeStr(const char * str, Time_Clock & outtime)
00153 {
00154     int year = 0;
00155     int month = 0;
00156     int day = 0;
00157     int hour = 0;
00158     int min = 0;
00159     int sec = 0;
00160     
00161     if (sscanf(str, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &min, &sec) != 6)
00162         return false;
00163     
00164     outtime.Set(year, month, day, hour, min, sec);
00165     return true;
00166 }
00167 
00168 #endif //__TIME_GENERAL_H__
 All Classes Functions Variables Enumerations