123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Copyright 2016 RWS Inc, All Rights Reserved
- //
- // This program is free software; you can redistribute it and/or modify
- // it under the terms of version 2 of the GNU General Public License as published by
- // the Free Software Foundation
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License along
- // with this program; if not, write to the Free Software Foundation, Inc.,
- // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- //
- #ifndef RTTIME_H
- #define RTTIME_H
- //////////////////////////////////////////////////////////////////////////////
- // Headers.
- //////////////////////////////////////////////////////////////////////////////
- #include "bdebug.h"
- #include "btime.h"
-
- //////////////////////////////////////////////////////////////////////////////
- // Macros.
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // Typedefs.
- //////////////////////////////////////////////////////////////////////////////
- typedef long (*RTTIMEFUNC)(void);
- class CRtTime
- {
- public: // Construction/Destruction.
- // Default constructor.
- CRtTime()
- {
- m_fnTime = NULL;
- m_lOffset = 0L;
- m_sSuspended = 0;
- // Might as well start out at 0.
- SetTime(0L);
- }
- // Destructor.
- ~CRtTime()
- { }
- public: // Methods.
- // Sets (or clears, if NULL) the timer override function.
- void SetTimeFunc(RTTIMEFUNC fnTime)
- { m_fnTime = fnTime; }
- // Set the current time. Sets the time offset to specified time minus
- // the current GetTime() so that a subsequent call to GetTime() would.
- void SetTime(long lTime)
- {
- // Zero the offset so we get the actual reported time.
- m_lOffset = 0;
- m_lOffset = lTime - GetTime();
- }
- // Suspends the timer. Stores the current time.
- // Every call to this requires a subsequent Resume().
- void Suspend(void)
- {
- // If this is the first . . .
- if (m_sSuspended++ == 0)
- {
- // Get the current time.
- m_lSuspended = GetTime();
- }
- }
- // Resumes the timer. Basically, does a SetTime() with the time that
- // Suspend was called.
- void Resume(void)
- {
- ASSERT(m_lSuspended > 0);
- // If this is the last necessary resume to release the timer . . .
- if (--m_sSuspended == 0)
- {
- // Set the time to the time the timer was first suspended.
- SetTime(m_lSuspended);
- }
- }
- public: // Querries.
- // Returns the time from the override function if set or, if not set,
- // from Blu_GetTime(). If suspended, this function returns the time
- // of the suspension.
- long GetTime(void)
- {
- if (m_sSuspended == 0)
- return (m_fnTime != NULL ? (*m_fnTime)() : Blu_GetTime()) + m_lOffset;
- else
- return m_lSuspended;
- }
- // Static version of above for those that need to call via a ptr and
- // don't know anything about this object. Send this a long and it
- // will use it to call the appropriate 'this'-based GetTime().
- static long GetTime(long l_pRtTime)
- {
- return ((CRtTime*)l_pRtTime)->GetTime();
- }
- protected: // Internal methods.
- public: // Members.
- protected: // Members.
-
- RTTIMEFUNC m_fnTime; // If set, used to get time.
- long m_lOffset; // Added to the time to manipulate it.
- long m_lSuspended; // Time at which the timer was suspended.
- short m_sSuspended; // TRUE if the timer is currently suspended.
- };
- #endif // RTTIME_H
- //////////////////////////////////////////////////////////////////////////////
- // EOF
- //////////////////////////////////////////////////////////////////////////////
|