home *** CD-ROM | disk | FTP | other *** search
- //==========================================================================;
- //
- // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
- // KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- // IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
- // PURPOSE.
- //
- // Copyright (c) 1992 - 1996 Microsoft Corporation. All Rights Reserved.
- //
- //--------------------------------------------------------------------------;
-
- //
- // CRefTime
- //
- // Manage reference times.
- // Shares same data layout as REFERENCE_TIME, but adds some (nonvirtual)
- // functions providing simple comparison, conversion and arithmetic.
- //
- // A reference time (at the moment) is a unit of seconds represented in
- // 100ns units as is used in the Win32 FILETIME structure. BUT the time
- // a REFERENCE_TIME represents is NOT the time elapsed since 1/1/1601 it
- // will either be stream time or reference time depending upon context
- //
- // This class provides simple arithmetic operations on reference times
- //
- // keep non-virtual otherwise the data layout will not be the same as
- // REFERENCE_TIME
-
-
- // -----
- // note that you are safe to cast a CRefTime* to a REFERENCE_TIME*, but
- // you will need to do so explicitly
- // -----
-
-
- #ifndef __REFTIME__
- #define __REFTIME__
-
-
- const LONGLONG MILLISECONDS = (1000); // 10 ^ 3
- const LONGLONG NANOSECONDS = (1000000000); // 10 ^ 9
- const LONGLONG UNITS = (NANOSECONDS / 100); // 10 ^ 7
-
- /* Unfortunately an inline function here generates a call to __allmul
- - even for constants!
- */
- #define MILLISECONDS_TO_100NS_UNITS(lMs) \
- Int32x32To64((lMs), (UNITS / MILLISECONDS))
-
- class CRefTime
- {
- public:
-
- // *MUST* be the only data member so that this class is exactly
- // equivalent to a REFERENCE_TIME.
- // Also, must be *no virtual functions*
-
- REFERENCE_TIME m_time;
-
- inline CRefTime()
- {
- // default to 0 time
- m_time = 0;
- };
-
- inline CRefTime(LONG msecs)
- {
- m_time = MILLISECONDS_TO_100NS_UNITS(msecs);
- };
-
- inline CRefTime(REFERENCE_TIME rt)
- {
- m_time = rt;
- };
-
- inline operator REFERENCE_TIME() const
- {
- return m_time;
- };
-
- inline CRefTime& operator=(const CRefTime& rt)
- {
- m_time = rt.m_time;
- return *this;
- };
-
- inline CRefTime& operator=(const LONGLONG ll)
- {
- m_time = ll;
- return *this;
- };
-
- inline CRefTime& operator+=(const CRefTime& rt)
- {
- return (*this = *this + rt);
- };
-
- inline CRefTime& operator-=(const CRefTime& rt)
- {
- return (*this = *this - rt);
- };
-
- inline LONG Millisecs(void)
- {
- return (LONG)(m_time / (UNITS / MILLISECONDS));
- };
-
- inline LONGLONG GetUnits(void)
- {
- return m_time;
- };
- };
-
- const CRefTime TimeZero = LONGLONG(0);
-
- #endif /* __REFTIME__ */
-
-