ROOT logo
// $Id: GTime.cxx 2088 2008-11-23 20:26:46Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#include "GTime.h"
#include <time.h>
#include <sys/time.h>

//______________________________________________________________________
// GTime
//

ClassImp(GTime);

void GTime::SetNow()
{
  struct timeval t;
  gettimeofday(&t, 0);
  mSec   = t.tv_sec;
  mMuSec = t.tv_usec;
}

GTime GTime::TimeUntilNow()
{
  GTime n(I_Now);
  n -= *this;
  return n;
}

/**************************************************************************/

GTime& GTime::operator=(Long_t mus)
{
  GTime tt(mus/1000000, mus%1000000);
  *this = tt;
  return *this;
}

GTime& GTime::operator=(ULong_t mus)
{
  GTime tt(mus/1000000, mus%1000000);
  *this = tt;
  return *this;
}

GTime& GTime::operator=(Double_t sec)
{
  Long_t s = (Long_t)sec;
  GTime tt(s, 1000000*((Long_t)(sec-s)) );
  *this = tt;
  return *this;
}

/**************************************************************************/

GTime& GTime::operator+=(const GTime& t)
{
  mSec   += t.mSec;
  mMuSec += t.mMuSec;
  if(mMuSec > 1000000) {
    ++mSec;
    mMuSec -= 1000000;
  }
  return *this;
}

GTime& GTime::operator-=(const GTime& t)
{
  mSec   -= t.mSec;
  mMuSec -= t.mMuSec;
  if(mMuSec < 0) {
    --mSec;
    mMuSec += 1000000;
  }
  return *this;
}

GTime& GTime::operator+=(Long_t mus)
{
  GTime tt(mus/1000000, mus%1000000);
  *this += tt;
  return *this;
}

GTime& GTime::operator-=(Long_t mus)
{
  GTime tt(mus/1000000, mus%1000000);
  *this -= tt;
  return *this;
}

GTime& GTime::operator+=(ULong_t mus)
{
  GTime tt(mus/1000000, mus%1000000);
  *this += tt;
  return *this;
}

GTime& GTime::operator-=(ULong_t mus)
{
  GTime tt(mus/1000000, mus%1000000);
  *this -= tt;
  return *this;
}

GTime& GTime::operator+=(Double_t sec)
{
  Long_t s = (Long_t)sec;
  GTime tt(s, 1000000*((Long_t)(sec-s)) );
  *this += tt;
  return *this;
}

GTime& GTime::operator-=(Double_t sec)
{
  Long_t s = (Long_t)sec;
  GTime tt(s, 1000000*((Long_t)(sec-s)) );
  *this -= tt;
  return *this;
}

/**************************************************************************/

GTime GTime::operator+(const GTime& t) const
{
  GTime r(*this);
  r += t;
  return r;
}

GTime GTime::operator-(const GTime& t) const
{
  GTime r(*this);
  r -= t;
  return r;
}

/**************************************************************************/

bool GTime::operator<(const GTime& t) const
{
  if(mSec == t.mSec) return mMuSec < t.mMuSec;
  return mSec < t.mSec;
}

bool GTime::operator>(const GTime& t) const
{
  if(mSec == t.mSec) return mMuSec > t.mMuSec;
  return mSec > t.mSec;
}

bool GTime::operator<=(const GTime& t) const
{
  if(mSec == t.mSec) return mMuSec <= t.mMuSec;
  return mSec <= t.mSec;
}

bool GTime::operator>=(const GTime& t) const
{
  if(mSec == t.mSec) return mMuSec >= t.mMuSec;
  return mSec >= t.mSec;
}

bool GTime::operator==(const GTime& t) const
{
  return mMuSec == t.mMuSec && mSec == t.mSec;
}

/**************************************************************************/

void GTime::Sleep()
{
  struct timespec req, rem;
  req.tv_sec  = mSec;
  req.tv_nsec = mMuSec * 1000;
  if(nanosleep(&req, &rem))
    perror("GTime::Sleep");
  // !!! Should sleep on? Need flag.
}

/**************************************************************************/

void GTime::SleepMiliSec(UInt_t ms)
{
  struct timespec req, rem;
  req.tv_sec  = ms / 1000;
  req.tv_nsec = (ms % 1000) * 1000000;
  if(nanosleep(&req, &rem))
    perror("GTime::SleepMiliSec");
  // !!! Should sleep on? Need flag.
}
 GTime.cxx:1
 GTime.cxx:2
 GTime.cxx:3
 GTime.cxx:4
 GTime.cxx:5
 GTime.cxx:6
 GTime.cxx:7
 GTime.cxx:8
 GTime.cxx:9
 GTime.cxx:10
 GTime.cxx:11
 GTime.cxx:12
 GTime.cxx:13
 GTime.cxx:14
 GTime.cxx:15
 GTime.cxx:16
 GTime.cxx:17
 GTime.cxx:18
 GTime.cxx:19
 GTime.cxx:20
 GTime.cxx:21
 GTime.cxx:22
 GTime.cxx:23
 GTime.cxx:24
 GTime.cxx:25
 GTime.cxx:26
 GTime.cxx:27
 GTime.cxx:28
 GTime.cxx:29
 GTime.cxx:30
 GTime.cxx:31
 GTime.cxx:32
 GTime.cxx:33
 GTime.cxx:34
 GTime.cxx:35
 GTime.cxx:36
 GTime.cxx:37
 GTime.cxx:38
 GTime.cxx:39
 GTime.cxx:40
 GTime.cxx:41
 GTime.cxx:42
 GTime.cxx:43
 GTime.cxx:44
 GTime.cxx:45
 GTime.cxx:46
 GTime.cxx:47
 GTime.cxx:48
 GTime.cxx:49
 GTime.cxx:50
 GTime.cxx:51
 GTime.cxx:52
 GTime.cxx:53
 GTime.cxx:54
 GTime.cxx:55
 GTime.cxx:56
 GTime.cxx:57
 GTime.cxx:58
 GTime.cxx:59
 GTime.cxx:60
 GTime.cxx:61
 GTime.cxx:62
 GTime.cxx:63
 GTime.cxx:64
 GTime.cxx:65
 GTime.cxx:66
 GTime.cxx:67
 GTime.cxx:68
 GTime.cxx:69
 GTime.cxx:70
 GTime.cxx:71
 GTime.cxx:72
 GTime.cxx:73
 GTime.cxx:74
 GTime.cxx:75
 GTime.cxx:76
 GTime.cxx:77
 GTime.cxx:78
 GTime.cxx:79
 GTime.cxx:80
 GTime.cxx:81
 GTime.cxx:82
 GTime.cxx:83
 GTime.cxx:84
 GTime.cxx:85
 GTime.cxx:86
 GTime.cxx:87
 GTime.cxx:88
 GTime.cxx:89
 GTime.cxx:90
 GTime.cxx:91
 GTime.cxx:92
 GTime.cxx:93
 GTime.cxx:94
 GTime.cxx:95
 GTime.cxx:96
 GTime.cxx:97
 GTime.cxx:98
 GTime.cxx:99
 GTime.cxx:100
 GTime.cxx:101
 GTime.cxx:102
 GTime.cxx:103
 GTime.cxx:104
 GTime.cxx:105
 GTime.cxx:106
 GTime.cxx:107
 GTime.cxx:108
 GTime.cxx:109
 GTime.cxx:110
 GTime.cxx:111
 GTime.cxx:112
 GTime.cxx:113
 GTime.cxx:114
 GTime.cxx:115
 GTime.cxx:116
 GTime.cxx:117
 GTime.cxx:118
 GTime.cxx:119
 GTime.cxx:120
 GTime.cxx:121
 GTime.cxx:122
 GTime.cxx:123
 GTime.cxx:124
 GTime.cxx:125
 GTime.cxx:126
 GTime.cxx:127
 GTime.cxx:128
 GTime.cxx:129
 GTime.cxx:130
 GTime.cxx:131
 GTime.cxx:132
 GTime.cxx:133
 GTime.cxx:134
 GTime.cxx:135
 GTime.cxx:136
 GTime.cxx:137
 GTime.cxx:138
 GTime.cxx:139
 GTime.cxx:140
 GTime.cxx:141
 GTime.cxx:142
 GTime.cxx:143
 GTime.cxx:144
 GTime.cxx:145
 GTime.cxx:146
 GTime.cxx:147
 GTime.cxx:148
 GTime.cxx:149
 GTime.cxx:150
 GTime.cxx:151
 GTime.cxx:152
 GTime.cxx:153
 GTime.cxx:154
 GTime.cxx:155
 GTime.cxx:156
 GTime.cxx:157
 GTime.cxx:158
 GTime.cxx:159
 GTime.cxx:160
 GTime.cxx:161
 GTime.cxx:162
 GTime.cxx:163
 GTime.cxx:164
 GTime.cxx:165
 GTime.cxx:166
 GTime.cxx:167
 GTime.cxx:168
 GTime.cxx:169
 GTime.cxx:170
 GTime.cxx:171
 GTime.cxx:172
 GTime.cxx:173
 GTime.cxx:174
 GTime.cxx:175
 GTime.cxx:176
 GTime.cxx:177
 GTime.cxx:178
 GTime.cxx:179
 GTime.cxx:180
 GTime.cxx:181
 GTime.cxx:182
 GTime.cxx:183
 GTime.cxx:184
 GTime.cxx:185
 GTime.cxx:186
 GTime.cxx:187
 GTime.cxx:188
 GTime.cxx:189
 GTime.cxx:190
 GTime.cxx:191
 GTime.cxx:192
 GTime.cxx:193