00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef __SGL_TIMESPEC_HPP
00026 #define __SGL_TIMESPEC_HPP
00027
00028 #include <sgl.h>
00029 #include <time.h>
00030
00031
00032
00033 class SGL_DLL_API sglTimespec
00034 {
00035 public:
00036 sglTimespec() : m_sec(0), m_nsec(0) {}
00037 sglTimespec(time_t sec, long nsec) : m_sec(sec), m_nsec(nsec) {}
00038 sglTimespec(const sglTimespec &rhs) : m_sec(rhs.m_sec), m_nsec(rhs.m_nsec){}
00039 sglTimespec(double sec) : m_sec((time_t)sec), m_nsec(0)
00040 {
00041 m_nsec = (long)(fabs(sec - m_sec)*1000000000);
00042 }
00043 ~sglTimespec() {}
00044
00045 sglTimespec &operator=(const sglTimespec &rhs)
00046 {
00047 m_sec = rhs.m_sec; m_nsec = rhs.m_nsec; return *this;
00048 }
00049
00050 sglTimespec& operator+=(const sglTimespec& rhs);
00051 sglTimespec& operator-=(const sglTimespec& rhs);
00052
00053 bool operator<(const sglTimespec& rhs)
00054 {
00055 if (m_sec < rhs.m_sec)
00056 return true;
00057 else if (m_sec > rhs.m_sec)
00058 return false;
00059 else if (m_nsec < rhs.m_nsec)
00060 return true;
00061
00062 return false;
00063 }
00064
00065 const sglTimespec operator+(const sglTimespec& rhs) const;
00066 const sglTimespec operator-(const sglTimespec& rhs) const;
00067
00068 static double convertToDouble(const sglTimespec &ts)
00069 { return ((double)ts.m_sec) + (1.0e-9*((double)ts.m_nsec)); }
00070
00071 static void getSysTime(sglTimespec &ts);
00072
00073 public:
00074 long m_sec;
00075 long m_nsec;
00076 };
00077
00078
00079 SGL_DLL_API
00080 ostream& operator<<(ostream& strm, const sglTimespec& rhs);
00081
00082 #endif