Go to the documentation of this file.00001 #ifndef _sys_Time_h
00002 #define _sys_Time_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "qpid/sys/IntegerTypes.h"
00026
00027
00028
00029
00030 #if defined (_WIN32)
00031 # include "windows/Time.h"
00032 #else
00033 # include "posix/Time.h"
00034 #endif
00035
00036 #include "qpid/CommonImportExport.h"
00037
00038 #include <limits>
00039 #include <iosfwd>
00040
00041 namespace qpid {
00042 namespace sys {
00043
00044 class Duration;
00045
00080 class AbsTime {
00081 friend class Duration;
00082 friend class Condition;
00083
00084 TimePrivate timepoint;
00085
00086 public:
00087
00088 inline AbsTime() : timepoint() {}
00089 QPID_COMMON_EXTERN AbsTime(const AbsTime& time0, const Duration& duration);
00090
00091
00092
00093 QPID_COMMON_EXTERN static AbsTime now();
00094 QPID_COMMON_EXTERN static AbsTime FarFuture();
00095 QPID_COMMON_EXTERN static AbsTime Epoch();
00096
00097 bool operator==(const AbsTime& t) const { return t.timepoint == timepoint; }
00098
00099 friend bool operator<(const AbsTime& a, const AbsTime& b);
00100 friend bool operator>(const AbsTime& a, const AbsTime& b);
00101 QPID_COMMON_EXTERN friend std::ostream& operator << (std::ostream&, const AbsTime&);
00102 };
00103
00104 QPID_COMMON_EXTERN std::ostream& operator << (std::ostream&, const AbsTime&);
00105
00115 class Duration {
00116 static int64_t max() { return std::numeric_limits<int64_t>::max(); }
00117 int64_t nanosecs;
00118
00119 friend class AbsTime;
00120
00121 public:
00122 QPID_COMMON_INLINE_EXTERN inline Duration(int64_t time0 = 0);
00123 QPID_COMMON_EXTERN explicit Duration(const AbsTime& start, const AbsTime& finish);
00124 inline operator int64_t() const;
00125 };
00126
00127 QPID_COMMON_EXTERN std::ostream& operator << (std::ostream&, const Duration&);
00128 QPID_COMMON_EXTERN std::istream& operator >> (std::istream&, Duration&);
00129
00130 inline AbsTime now() { return AbsTime::now(); }
00131
00132 inline bool operator<(const AbsTime& a, const AbsTime& b)
00133 { return a.timepoint < b.timepoint; }
00134 inline bool operator>(const AbsTime& a, const AbsTime& b)
00135 { return a.timepoint > b.timepoint; }
00136
00137 Duration::Duration(int64_t time0) :
00138 nanosecs(time0)
00139 {}
00140
00141 Duration::operator int64_t() const
00142 { return nanosecs; }
00143
00145 const Duration TIME_SEC = 1000*1000*1000;
00147 const Duration TIME_MSEC = 1000*1000;
00149 const Duration TIME_USEC = 1000;
00151 const Duration TIME_NSEC = 1;
00152
00154 const Duration TIME_INFINITE = std::numeric_limits<int64_t>::max();
00155
00157 const AbsTime EPOCH = AbsTime::Epoch();
00158
00160 const AbsTime FAR_FUTURE = AbsTime::FarFuture();
00161
00163 QPID_COMMON_EXTERN void sleep(int secs);
00164
00166 QPID_COMMON_EXTERN void usleep(uint64_t usecs);
00167
00169 void outputFormattedNow(std::ostream&);
00170
00172 void outputHiresNow(std::ostream&);
00173
00174 }}
00175
00176 #endif