2 #ifndef GAUDIKERNEL_TIME_ICPP
3 #define GAUDIKERNEL_TIME_ICPP 1
10 inline Time::Time (
void): m_nsecs(0) {}
14 inline Time::Time (
ValueType nsecs): m_nsecs(nsecs) {
27 : m_nsecs(secs *
Time::SEC_NSECS + nsecs) {
40 TimeAssert( m_nsecs >= -x.
m_nsecs,
"time operation lead to negative time");
48 TimeAssert( m_nsecs >= x.
m_nsecs,
"time operation lead to negative time");
54 inline Time Time::epoch (
void) {
59 inline Time Time::max (
void) {
60 return 0x7fffffffffffffffLL;
64 inline bool Time::isLeap (
int year) {
65 return ((year % 4) == 0
67 || (year % 400) == 0));
74 inline TimeSpan::TimeSpan (
void): m_nsecs(0) {}
77 inline TimeSpan::TimeSpan (
Time t): m_nsecs (t.m_nsecs) {}
80 inline TimeSpan::TimeSpan (
ValueType nsecs): m_nsecs (nsecs) {}
90 inline TimeSpan::TimeSpan (
ValueType secs,
int nsecs)
91 : m_nsecs(secs *
Time::SEC_NSECS + nsecs) {}
104 inline TimeSpan::TimeSpan (
int days,
int hours,
int mins,
int secs,
int nsecs) {
105 m_nsecs = (secs + 60 * (mins + 60 * (hours + 24*days)))*Time::SEC_NSECS + nsecs;
109 inline int TimeSpan::days (
void)
const {
110 return int(m_nsecs / Time::SEC_NSECS / Time::SECS_PER_DAY);
114 inline int TimeSpan::hours (
void)
const {
115 return int(m_nsecs / Time::SEC_NSECS / Time::SECS_PER_HOUR);
119 inline int TimeSpan::minutes (
void)
const {
120 return int(m_nsecs / Time::SEC_NSECS / 60);
125 return m_nsecs / Time::SEC_NSECS;
135 inline int TimeSpan::lastHours (
void)
const {
136 return hours () - days () * 24;
141 inline int TimeSpan::lastMinutes (
void)
const {
142 return minutes () - hours () * 60;
147 inline int TimeSpan::lastSeconds (
void)
const {
153 inline int TimeSpan::lastNSeconds (
void)
const {
154 return int(m_nsecs % Time::SEC_NSECS);
177 m_nsecs /= x.
m_nsecs;
return *
this;
182 m_nsecs %= x.
m_nsecs;
return *
this;
187 return out << Gaudi::TimeSpan(time).seconds() <<
'.' << time.nanoformat();
192 return out << time.seconds() <<
'.' << Gaudi::Time(time).nanoformat();
197 inline Gaudi::Time
operator+ (
const Gaudi::Time &t,
const Gaudi::TimeSpan &
ts) {
198 return Gaudi::Time (t.ns() + ts.ns());
201 inline Gaudi::Time
operator+ (
const Gaudi::TimeSpan &
ts,
const Gaudi::Time &t) {
202 return Gaudi::Time (t.ns() + ts.ns());
205 inline Gaudi::TimeSpan
operator- (
const Gaudi::Time &t1,
const Gaudi::Time &t2) {
206 return Gaudi::TimeSpan (t1.ns() - t2.ns());
209 inline Gaudi::Time
operator- (
const Gaudi::Time &t,
const Gaudi::TimeSpan &
ts) {
210 return Gaudi::Time (t.ns() - ts.ns());
225 inline bool operator== (
const Gaudi::Time &t1,
const Gaudi::Time &t2) {
226 return t1.ns() == t2.ns();
229 inline bool operator!= (
const Gaudi::Time &t1,
const Gaudi::Time &t2) {
230 return t1.ns() != t2.ns();
233 inline bool operator< (
const Gaudi::Time &t1,
const Gaudi::Time &t2) {
234 return t1.ns() < t2.ns();
237 inline bool operator<= (
const Gaudi::Time &t1,
const Gaudi::Time &t2) {
238 return t1.ns() <= t2.ns();
241 inline bool operator> (
const Gaudi::Time &t1,
const Gaudi::Time &t2) {
242 return t1.ns() > t2.ns();
245 inline bool operator>= (
const Gaudi::Time &t1,
const Gaudi::Time &t2) {
246 return t1.ns() >= t2.ns();
262 return Gaudi::TimeSpan (-ts.ns());
265 inline Gaudi::TimeSpan
operator+ (
const Gaudi::TimeSpan &ts1,
const Gaudi::TimeSpan &ts2) {
266 return Gaudi::TimeSpan (ts1.ns() + ts2.ns());
269 inline Gaudi::TimeSpan
operator- (
const Gaudi::TimeSpan &ts1,
const Gaudi::TimeSpan &ts2) {
270 return Gaudi::TimeSpan (ts1.ns() - ts2.ns());
285 inline bool operator== (
const Gaudi::TimeSpan &t1,
const Gaudi::TimeSpan &t2) {
286 return t1.ns() == t2.ns();
289 inline bool operator!= (
const Gaudi::TimeSpan &t1,
const Gaudi::TimeSpan &t2) {
290 return t1.ns() != t2.ns();
293 inline bool operator< (
const Gaudi::TimeSpan &t1,
const Gaudi::TimeSpan &t2) {
294 return t1.ns() < t2.ns();
297 inline bool operator<= (
const Gaudi::TimeSpan &t1,
const Gaudi::TimeSpan &t2) {
298 return t1.ns() <= t2.ns();
301 inline bool operator> (
const Gaudi::TimeSpan &t1,
const Gaudi::TimeSpan &t2) {
302 return t1.ns() > t2.ns();
305 inline bool operator>= (
const Gaudi::TimeSpan &t1,
const Gaudi::TimeSpan &t2) {
306 return t1.ns() >= t2.ns();
321 Gaudi::Time::ValueType tmp;
323 t = Gaudi::Time(tmp);