Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cTimeTick.h
Go to the documentation of this file.
1 //
5 
6 #ifndef _INC_cTimeTick_H
7 #define _INC_cTimeTick_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "../GrayLibBase.h"
16 
17 namespace GrayLib
18 {
20 
21  typedef UINT TIMETICK_t;
22  typedef int TIMETICKD_t;
23  // Must define m_nTimeFreq locally
24 
26  {
31 
32  protected:
34  public:
35  static const TIMETICK_t k_NEVER = ((TIMETICK_t)(-1));
36  public:
37  bool isTimeValid() const noexcept
38  {
39  return(m_PrivateTime != k_NEVER);
40  }
41  bool isTimeFuture() const noexcept
42  {
43  return(m_PrivateTime > GetTickCount().m_PrivateTime);
44  }
45  void InitTime(TIMETICK_t lTimeBase = k_NEVER) noexcept
46  {
47  m_PrivateTime = lTimeBase;
48  }
49  void InitTimeNow()
50  {
51  m_PrivateTime = GetTickCount().m_PrivateTime;
52  }
53  void InitTimeNowPlusTicks(TIMETICKD_t iOffsetTicks)
54  {
55  // NOTE: Assume iOffset is in m_nTimeFreq
56  m_PrivateTime = GetTickCount().m_PrivateTime + iOffsetTicks;
57  }
58  TIMETICK_t get_TimeTicks() const noexcept
59  {
60  return m_PrivateTime;
61  }
62  operator TIMETICK_t() const noexcept
63  {
64  return m_PrivateTime;
65  }
66  int GetTimeSinceTick(const cTimeTickBase& time) const noexcept
67  {
70  return(m_PrivateTime - time.m_PrivateTime);
71  }
73  {
79  return(m_PrivateTime - GetTickCount().m_PrivateTime);
80  }
82  {
86  return(-get_TimeTilTick());
87  }
88 
89  void InitTimeNowPlusSec(TIMESECF_t fOffsetSec);
90  TIMESECF_t get_TimeTilSec() const;
92  {
93  return(-get_TimeTilSec());
94  }
95 
97  {
98  cTimeTickBase time;
99  time.m_PrivateTime = m_PrivateTime + iTimeDiff;
100  return(time);
101  }
103  {
104  cTimeTickBase time;
105  time.m_PrivateTime = m_PrivateTime - iTimeDiff;
106  return(time);
107  }
108  int operator-(cTimeTickBase time) const
109  {
110  return(m_PrivateTime - time.m_PrivateTime);
111  }
112  bool operator==(cTimeTickBase time) const
113  {
114  return(m_PrivateTime == time.m_PrivateTime);
115  }
116  bool operator!=(cTimeTickBase time) const
117  {
118  return(m_PrivateTime != time.m_PrivateTime);
119  }
120  bool operator<(cTimeTickBase time) const
121  {
122  return(m_PrivateTime < time.m_PrivateTime);
123  }
124  bool operator>(cTimeTickBase time) const
125  {
126  return(m_PrivateTime>time.m_PrivateTime);
127  }
128  bool operator<=(cTimeTickBase time) const
129  {
130  return(m_PrivateTime <= time.m_PrivateTime);
131  }
132  bool operator>=(cTimeTickBase time) const
133  {
134  return(m_PrivateTime >= time.m_PrivateTime);
135  }
136 
137  // define this function locally.
138  static cTimeTickBase GRAYCALL GetTickCount();
139  static TIMETICK_t GRAYCALL GetTickFreq(); // static
140  };
141 
143  {
147  public:
149  {
150  InitTime();
151  }
152  explicit cTimeTick(TIMETICK_t lTimeBase)
153  {
154  InitTime(lTimeBase);
155  }
157  {
158  InitTime(time.get_TimeTicks());
159  }
160  };
161 
163  : public cSingletonStatic<cTimeTickMaster>
164  , public cTimeTick
165  {
170  typedef cTimeTick SUPER_t;
171 
172  public:
174  protected:
178 
179  public:
180  cTimeTickMaster(TIMETICK_t nTimeFreq = cTimeSys::k_FREQ, TIMETICK_t lTimeBase = 1); // TIMETICK_FREQ, TIMETICK_FREQ
181  ~cTimeTickMaster();
182 
183  bool AdvanceTimeSpec(); // tick forward the time.
184  void InitTime(TIMETICK_t lTimeBase);
185 
187  };
188 
190  {
193  {
194  return cTimeTickMaster::I().m_nTimeFreq;
195  }
196  return cTimeSys::k_FREQ;
197  }
198 
200  {
204 
206  {
207  return *cTimeTickMaster::get_Single(); // must call AdvanceTime() periodically!
208  }
209 
210  // Just make up a default time.
211  // ASSERT(m_nTimeFreq==cTimeSys::k_FREQ);
212  cTimeTickBase servtime;
213  servtime.InitTime(cTimeSys::GetTimeNow());
214  return servtime;
215  }
216 
218  {
221  }
223  {
226  }
227 };
228 #endif // _INC_cTimeTick_H
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
Definition: cTimeTick.h:26
static TIMETICK_t GRAYCALL GetTickFreq()
Definition: cTimeTick.h:189
bool operator<=(cTimeTickBase time) const
Definition: cTimeTick.h:128
bool operator>=(cTimeTickBase time) const
Definition: cTimeTick.h:132
bool operator==(cTimeTickBase time) const
Definition: cTimeTick.h:112
bool operator<(cTimeTickBase time) const
Definition: cTimeTick.h:120
void InitTimeNowPlusSec(TIMESECF_t fOffsetSec)
Definition: cTimeTick.h:217
int GetTimeSinceTick(const cTimeTickBase &time) const noexcept
Definition: cTimeTick.h:66
TIMETICK_t m_PrivateTime
m_nTimeFreq arbitrary frequency
Definition: cTimeTick.h:33
void InitTime(TIMETICK_t lTimeBase=k_NEVER) noexcept
Definition: cTimeTick.h:45
int operator-(cTimeTickBase time) const
Definition: cTimeTick.h:108
bool operator>(cTimeTickBase time) const
Definition: cTimeTick.h:124
void InitTimeNow()
Definition: cTimeTick.h:49
static cTimeTickBase GRAYCALL GetTickCount()
from cTimeTickMaster
Definition: cTimeTick.h:199
TIMETICK_t get_TimeTicks() const noexcept
Definition: cTimeTick.h:58
cTimeTickBase operator-(TIMETICKD_t iTimeDiff) const
Definition: cTimeTick.h:102
bool operator!=(cTimeTickBase time) const
Definition: cTimeTick.h:116
TIMETICKD_t get_AgeTick() const
Definition: cTimeTick.h:81
TIMESECF_t get_TimeTilSec() const
Definition: cTimeTick.h:222
void InitTimeNowPlusTicks(TIMETICKD_t iOffsetTicks)
Definition: cTimeTick.h:53
cTimeTickBase operator+(TIMETICKD_t iTimeDiff) const
Definition: cTimeTick.h:96
TIMESECF_t get_AgeSec() const
Definition: cTimeTick.h:91
bool isTimeValid() const noexcept
Definition: cTimeTick.h:37
TIMETICKD_t get_TimeTilTick() const
Definition: cTimeTick.h:72
bool isTimeFuture() const noexcept
Definition: cTimeTick.h:41
Definition: cTimeTick.h:165
cThreadLockCount m_Lock
Make this thread safe.
Definition: cTimeTick.h:175
TIMETICK_t m_nTimeDiv
Desired tick freq. TIMETICK_FREQ per real second.
Definition: cTimeTick.h:176
const TIMETICK_t m_nTimeFreq
Desired tick freq. TIMETICK_FREQ.
Definition: cTimeTick.h:173
cTimeSys m_TimeSysLast
cTimeSys::GetTimeNow() of the last AdvanceTimeSpec(). "(1/cTimeSys::k_FREQ)"
Definition: cTimeTick.h:177
Definition: cTimeTick.h:143
cTimeTick(TIMETICK_t lTimeBase)
Definition: cTimeTick.h:152
cTimeTick()
Definition: cTimeTick.h:148
cTimeTick(const cTimeTickBase &time)
Definition: cTimeTick.h:156
Definition: cSingleton.h:30
static bool isSingleCreated() noexcept
Definition: cSingleton.h:70
static cTimeTickMaster * get_Single()
Definition: cSingleton.h:79
static cTimeTickMaster & I() noexcept
Definition: cSingleton.h:91
Definition: cThreadLock.h:498
Definition: cTimeSys.h:93
static const TIMESYS_t k_FREQ
milliSec per Sec
Definition: cTimeSys.h:100
static TIMESYS_t GetTimeNow() noexcept
Definition: cTimeSys.h:121
Definition: cMesh.h:22
int TIMETICKD_t
base type for holding time diff values. (span in time ticks is signed!)
Definition: cTimeTick.h:22
UNITTEST2_PREDEF(cQuadtree)
UINT TIMETICK_t
base type for holding time tick count.
Definition: cTimeTick.h:21
float TIMESECF_t
delta float seconds.
Definition: cTimeSys.h:20