filetime.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 5k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. #ifndef _FILETIME_H_
  2. #define _FILETIME_H_
  3. //**************************************************************************
  4. //  NOTE:  This file is duplicated in urlmon and webcheck.  If you make 
  5. //         changes please sync them!
  6. //**************************************************************************
  7. #define MAKEINT64(lo, hi)   ((__int64)(((DWORD)(lo)) | ((__int64)((DWORD)(hi))) << 32))
  8. #ifndef LODWORD
  9. #define LODWORD(i)          ((DWORD)(i))
  10. #endif
  11. #ifndef HIDWORD
  12. #define HIDWORD(i)          ((DWORD)(((__int64)(i) >> 32) & 0xFFFFFFFF))
  13. #endif
  14. // This is Monday, January 1, 1601 at 12:00:00 am
  15. #define MIN_FILETIME            0i64
  16. // This is Thursday, September 14, 30828 at 2:48:05 am
  17. #define MAX_FILETIME            0x7FFFFFFFFFFFFFFFi64
  18. //  For clarity since FILETIME is expressed as 100-nanosecond intervals
  19. #define ONE_SECOND_IN_FILETIME  10000000i64
  20. #define ONE_MSEC_IN_FILEITME    10000i64
  21. #define ONE_MINUTE_IN_FILETIME  (ONE_SECOND_IN_FILETIME * 60i64)
  22. struct CFileTime : public FILETIME
  23. {
  24.     // Constructors
  25.     CFileTime()             { *this = 0; }
  26.     CFileTime(const FILETIME& f)  { *this = f; }
  27.     CFileTime(const CFileTime& f) { *this = f; }
  28.     CFileTime(__int64 i)    { *this = i; }
  29.     // Assignment operators
  30.     inline CFileTime& operator = (const FILETIME& f)
  31.     {   
  32.         dwLowDateTime = f.dwLowDateTime;
  33.         dwHighDateTime = f.dwHighDateTime;
  34.         return *this;
  35.     }
  36.     inline CFileTime& operator = (const CFileTime& f)
  37.     {   
  38.         dwLowDateTime = f.dwLowDateTime;
  39.         dwHighDateTime = f.dwHighDateTime;
  40.         return *this;
  41.     }
  42.     inline CFileTime& operator = (__int64 i)
  43.     {   
  44.         dwLowDateTime = LODWORD(i);
  45.         dwHighDateTime = HIDWORD(i);
  46.         return *this;
  47.     }
  48.     // Comparison operators
  49.     inline BOOL operator == (__int64 i)
  50.     {   
  51.         return MAKEINT64(dwLowDateTime, dwHighDateTime) == i;
  52.     }
  53.     inline BOOL operator > (__int64 i)
  54.     {   
  55.         return MAKEINT64(dwLowDateTime, dwHighDateTime) > i;
  56.     }
  57.     inline BOOL operator < (__int64 i)
  58.     {   
  59.         return MAKEINT64(dwLowDateTime, dwHighDateTime) < i;
  60.     }
  61.     inline BOOL operator != (__int64 i)
  62.     {   
  63.         return !(*this == i);
  64.     }
  65.     inline BOOL operator >= (__int64 i)
  66.     {   
  67.         return !(*this < i);
  68.     }
  69.     inline BOOL operator <= (__int64 i)
  70.     {   
  71.         return !(*this > i);
  72.     }
  73.     inline BOOL operator == (const FILETIME& f)
  74.     {   
  75.         return *this == MAKEINT64(f.dwLowDateTime, f.dwHighDateTime);
  76.     }
  77.     inline BOOL operator > (const FILETIME& f)
  78.     {   
  79.         return *this > MAKEINT64(f.dwLowDateTime, f.dwHighDateTime);
  80.     }
  81.     inline BOOL operator < (const FILETIME& f)
  82.     {   
  83.         return *this < MAKEINT64(f.dwLowDateTime, f.dwHighDateTime);
  84.     }
  85.     inline BOOL operator != (const FILETIME& f)
  86.     {   
  87.         return !(*this == f);
  88.     }
  89.     inline BOOL operator >= (const FILETIME& f)
  90.     {   
  91.         return !(*this < f);
  92.     }
  93.     inline BOOL operator <= (const FILETIME& f)
  94.     {   
  95.         return !(*this > f);
  96.     }
  97.     // Arithemetic operators
  98.     inline CFileTime operator + (__int64 i)
  99.     {
  100.         return CFileTime(MAKEINT64(dwLowDateTime, dwHighDateTime) + i);
  101.     }
  102.     
  103.     inline CFileTime operator += (__int64 i)
  104.     {
  105.         *this = *this + i;
  106.         return *this;
  107.     }
  108.     inline CFileTime operator - (__int64 i)
  109.     {
  110.         return CFileTime(MAKEINT64(dwLowDateTime, dwHighDateTime) - i);
  111.     }
  112.     
  113.     inline CFileTime operator -= (__int64 i)
  114.     {
  115.         *this = *this - i;
  116.         return *this;
  117.     }
  118.     inline CFileTime operator * (__int64 i)
  119.     {
  120.         return CFileTime(MAKEINT64(dwLowDateTime, dwHighDateTime) * i);
  121.     }
  122.     
  123.     inline CFileTime operator *= (__int64 i)
  124.     {
  125.         *this = *this * i;
  126.         return *this;
  127.     }
  128.     inline CFileTime operator / (__int64 i)
  129.     {
  130.         return CFileTime(MAKEINT64(dwLowDateTime, dwHighDateTime) / i);
  131.     }
  132.     
  133.     inline CFileTime operator /= (__int64 i)
  134.     {
  135.         *this = *this / i;
  136.         return *this;
  137.     }
  138.     inline CFileTime operator + (const FILETIME& f)
  139.     {
  140.         return *this + MAKEINT64(f.dwLowDateTime, f.dwHighDateTime);
  141.     }
  142.     
  143.     inline CFileTime operator += (const FILETIME& f)
  144.     {
  145.         *this = *this + f;
  146.         return *this;
  147.     }
  148.     inline CFileTime operator - (const FILETIME& f)
  149.     {
  150.         return *this - MAKEINT64(f.dwLowDateTime, f.dwHighDateTime);
  151.     }
  152.     
  153.     inline CFileTime operator -= (const FILETIME& f)
  154.     {
  155.         *this = *this - f;
  156.         return *this;
  157.     }
  158.     inline CFileTime operator * (const FILETIME& f)
  159.     {
  160.         return *this * MAKEINT64(f.dwLowDateTime, f.dwHighDateTime);
  161.     }
  162.     
  163.     inline CFileTime operator *= (const FILETIME& f)
  164.     {
  165.         *this = *this * f;
  166.         return *this;
  167.     }
  168.     inline CFileTime operator / (const FILETIME& f)
  169.     {
  170.         return *this / MAKEINT64(f.dwLowDateTime, f.dwHighDateTime);
  171.     }
  172.     
  173.     inline CFileTime operator /= (const FILETIME& f)
  174.     {
  175.         *this = *this / f;
  176.         return *this;
  177.     }
  178. };
  179. //
  180. //  Conversions 
  181. //  NOTE: We can't do want operator __int64() since what causes to many
  182. //  ambiguous situations that the compiler just can't handle.
  183. //
  184. inline  __int64 FileTimeToInt64(const FILETIME& f)
  185. {
  186.     return MAKEINT64(f.dwLowDateTime, f.dwHighDateTime);
  187. }
  188. #endif