time-sort.h   [plain text]



/*  synopsis

class universal_time
{
public:
universal_time();  // current time
universal_time& operator += (const elapsed_time& dt);
universal_time& operator -= (const elapsed_time& dt);

std::time_t  sec_;
std::int32_t nsec_;
};

class elapsed_time
{
 public:
  explicit elapsed_time(std::time_t sec = 0, std::int32_t nsec = 0);

  elapsed_time& operator += (const elapsed_time& dt);
  elapsed_time& operator -= (const elapsed_time& dt);
  elapsed_time operator - () const;
  elapsed_time operator + () const;

  std::time_t  sec_;
  std::int32_t nsec_;
};

elapsed_time   operator-(const universal_time& t1, const universal_time& t2);
universal_time operator-(const universal_time& t1, const elapsed_time& dt);
elapsed_time   operator-(const elapsed_time& dt1, const elapsed_time& dt2);

universal_time operator+(const universal_time& t1, const elapsed_time& dt);
universal_time operator+(const elapsed_time& dt, const universal_time& t1);
elapsed_time   operator+(const elapsed_time& dt1, const elapsed_time& dt2);

bool operator == (const universal_time& x, const universal_time& y);
bool operator != (const universal_time& x, const universal_time& y);
bool operator <  (const universal_time& x, const universal_time& y);
bool operator <= (const universal_time& x, const universal_time& y);
bool operator >  (const universal_time& x, const universal_time& y);
bool operator >= (const universal_time& x, const universal_time& y);

bool operator == (const elapsed_time& x, const elapsed_time& y);
bool operator != (const elapsed_time& x, const elapsed_time& y);
bool operator <  (const elapsed_time& x, const elapsed_time& y);
bool operator <= (const elapsed_time& x, const elapsed_time& y);
bool operator >  (const elapsed_time& x, const elapsed_time& y);
bool operator >= (const elapsed_time& x, const elapsed_time& y);

*/

#ifndef HTIMER
#define HTIMER

#include <time.h>
#include <stdint.h>

class elapsed_time;

class universal_time
{
 public:
  universal_time();  // current time
  universal_time& operator += (const elapsed_time& dt);
  universal_time& operator -= (const elapsed_time& dt);

  time_t  sec_;
  int32_t nsec_;
};

class elapsed_time
{
 public:
  explicit elapsed_time(time_t sec = 0, int32_t nsec = 0)
    : sec_(sec), nsec_(nsec) {}
  elapsed_time& operator += (const elapsed_time& dt);
  elapsed_time& operator -= (const elapsed_time& dt);
  elapsed_time operator - () const {return elapsed_time(-sec_, -nsec_);}
  elapsed_time operator + () const {return *this;}

  time_t  sec_;
  int32_t nsec_;
};

inline
elapsed_time
operator-(const universal_time& t1, const universal_time& t2)
{
  elapsed_time t(t1.sec_, t1.nsec_);
  t -= (const elapsed_time&)t2;
  return t;
}

inline
universal_time
operator-(const universal_time& t1, const elapsed_time& dt)
{
  universal_time t(t1);
  t -= dt;
  return t;

}

inline
elapsed_time
operator-(const elapsed_time& dt1, const elapsed_time& dt2)
{
  elapsed_time t(dt1);
  t -= dt2;
  return t;
}

inline
universal_time
operator+(const universal_time& t1, const elapsed_time& dt)
{
  universal_time t(t1);
  t += dt;
  return t;
}

inline
universal_time
operator+(const elapsed_time& dt, const universal_time& t1)
{
  universal_time t(t1);
  t += dt;
  return t;
}

inline
elapsed_time
operator+(const elapsed_time& dt1, const elapsed_time& dt2)
{
  elapsed_time t(dt1);
  t += dt2;
  return t;
}

inline
bool
operator == (const universal_time& x, const universal_time& y)
{
  return x.sec_ == y.sec_ && x.nsec_ == y.nsec_;
}

inline
bool
operator != (const universal_time& x, const universal_time& y)
{
  return !(x == y);
}

inline
bool
operator <  (const universal_time& x, const universal_time& y)
{
  return x.sec_ < y.sec_ || (x.sec_ == y.sec_ && x.nsec_ < y.nsec_);
}

inline
bool
operator <= (const universal_time& x, const universal_time& y)
{
  return !(y < x);
}

inline
bool
operator >  (const universal_time& x, const universal_time& y)
{
  return y < x;
}

inline
bool
operator >= (const universal_time& x, const universal_time& y)
{
  return !(x < y);
}

inline
bool
operator == (const elapsed_time& x, const elapsed_time& y)
{
  return x.sec_ == y.sec_ && x.nsec_ == y.nsec_;
}

inline
bool
operator != (const elapsed_time& x, const elapsed_time& y)
{
  return !(x == y);
}

inline
bool
operator <  (const elapsed_time& x, const elapsed_time& y)
{
  return x.sec_ < y.sec_ || (x.sec_ == y.sec_ && x.nsec_ < y.nsec_);
}

inline
bool
operator <= (const elapsed_time& x, const elapsed_time& y)
{
  return !(y < x);
}

inline
bool
operator >  (const elapsed_time& x, const elapsed_time& y)
{
  return y < x;
}

inline
bool
operator >= (const elapsed_time& x, const elapsed_time& y)
{
  return !(x < y);
}

#endif  // HTIMER