1 /*
2 * Copyright 2010 Vicente J. Botet Escriba
3 * Copyright (c) Microsoft Corporation 2014
4 * Copyright 2015, 2017 Andrey Semashev
5 *
6 * Distributed under the Boost Software License, Version 1.0.
7 * See http://www.boost.org/LICENSE_1_0.txt
8 */
9
10 #ifndef BOOST_WINAPI_TIME_HPP_INCLUDED_
11 #define BOOST_WINAPI_TIME_HPP_INCLUDED_
12
13 #include <boost/winapi/basic_types.hpp>
14
15 #ifdef BOOST_HAS_PRAGMA_ONCE
16 #pragma once
17 #endif
18
19 #if !defined( BOOST_USE_WINDOWS_H )
20 extern "C" {
21 struct _FILETIME;
22 struct _SYSTEMTIME;
23
24 BOOST_SYMBOL_IMPORT boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
25 GetSystemTime(::_SYSTEMTIME* lpSystemTime);
26
27 #ifdef BOOST_HAS_GETSYSTEMTIMEASFILETIME // Windows CE does not define GetSystemTimeAsFileTime
28 BOOST_SYMBOL_IMPORT boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
29 GetSystemTimeAsFileTime(::_FILETIME* lpSystemTimeAsFileTime);
30 #endif
31
32 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
33 SystemTimeToFileTime(
34 const ::_SYSTEMTIME* lpSystemTime,
35 ::_FILETIME* lpFileTime);
36
37 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
38 FileTimeToSystemTime(
39 const ::_FILETIME* lpFileTime,
40 ::_SYSTEMTIME* lpSystemTime);
41
42 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
43
44 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
45 FileTimeToLocalFileTime(
46 const ::_FILETIME* lpFileTime,
47 ::_FILETIME* lpLocalFileTime);
48
49 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
50 LocalFileTimeToFileTime(
51 const ::_FILETIME* lpLocalFileTime,
52 ::_FILETIME* lpFileTime);
53
54 #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
55
56 #if BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
57 BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
58 GetTickCount(BOOST_WINAPI_DETAIL_VOID);
59 #endif // BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
60
61 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
62 BOOST_SYMBOL_IMPORT boost::winapi::ULONGLONG_ BOOST_WINAPI_WINAPI_CC
63 GetTickCount64(BOOST_WINAPI_DETAIL_VOID);
64 #endif
65
66 } // extern "C"
67 #endif // !defined( BOOST_USE_WINDOWS_H )
68
69 namespace boost {
70 namespace winapi {
71
72 typedef struct BOOST_MAY_ALIAS _FILETIME {
73 DWORD_ dwLowDateTime;
74 DWORD_ dwHighDateTime;
75 } FILETIME_, *PFILETIME_, *LPFILETIME_;
76
77 typedef struct BOOST_MAY_ALIAS _SYSTEMTIME {
78 WORD_ wYear;
79 WORD_ wMonth;
80 WORD_ wDayOfWeek;
81 WORD_ wDay;
82 WORD_ wHour;
83 WORD_ wMinute;
84 WORD_ wSecond;
85 WORD_ wMilliseconds;
86 } SYSTEMTIME_, *PSYSTEMTIME_, *LPSYSTEMTIME_;
87
88 #if BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
89 using ::GetTickCount;
90 #endif
91 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
92 using ::GetTickCount64;
93 #endif
94
GetSystemTime(LPSYSTEMTIME_ lpSystemTime)95 BOOST_FORCEINLINE VOID_ GetSystemTime(LPSYSTEMTIME_ lpSystemTime)
96 {
97 ::GetSystemTime(reinterpret_cast< ::_SYSTEMTIME* >(lpSystemTime));
98 }
99
SystemTimeToFileTime(const SYSTEMTIME_ * lpSystemTime,FILETIME_ * lpFileTime)100 BOOST_FORCEINLINE BOOL_ SystemTimeToFileTime(const SYSTEMTIME_* lpSystemTime, FILETIME_* lpFileTime)
101 {
102 return ::SystemTimeToFileTime(reinterpret_cast< const ::_SYSTEMTIME* >(lpSystemTime), reinterpret_cast< ::_FILETIME* >(lpFileTime));
103 }
104
FileTimeToSystemTime(const FILETIME_ * lpFileTime,SYSTEMTIME_ * lpSystemTime)105 BOOST_FORCEINLINE BOOL_ FileTimeToSystemTime(const FILETIME_* lpFileTime, SYSTEMTIME_* lpSystemTime)
106 {
107 return ::FileTimeToSystemTime(reinterpret_cast< const ::_FILETIME* >(lpFileTime), reinterpret_cast< ::_SYSTEMTIME* >(lpSystemTime));
108 }
109
110 #if BOOST_WINAPI_PARTITION_APP_SYSTEM
FileTimeToLocalFileTime(const FILETIME_ * lpFileTime,FILETIME_ * lpLocalFileTime)111 BOOST_FORCEINLINE BOOL_ FileTimeToLocalFileTime(const FILETIME_* lpFileTime, FILETIME_* lpLocalFileTime)
112 {
113 return ::FileTimeToLocalFileTime(reinterpret_cast< const ::_FILETIME* >(lpFileTime), reinterpret_cast< ::_FILETIME* >(lpLocalFileTime));
114 }
115
LocalFileTimeToFileTime(const FILETIME_ * lpLocalFileTime,FILETIME_ * lpFileTime)116 BOOST_FORCEINLINE BOOL_ LocalFileTimeToFileTime(const FILETIME_* lpLocalFileTime, FILETIME_* lpFileTime)
117 {
118 return ::LocalFileTimeToFileTime(reinterpret_cast< const ::_FILETIME* >(lpLocalFileTime), reinterpret_cast< ::_FILETIME* >(lpFileTime));
119 }
120 #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
121
122 #if defined( BOOST_HAS_GETSYSTEMTIMEASFILETIME )
GetSystemTimeAsFileTime(LPFILETIME_ lpSystemTimeAsFileTime)123 BOOST_FORCEINLINE VOID_ GetSystemTimeAsFileTime(LPFILETIME_ lpSystemTimeAsFileTime)
124 {
125 ::GetSystemTimeAsFileTime(reinterpret_cast< ::_FILETIME* >(lpSystemTimeAsFileTime));
126 }
127 #else
128 // Windows CE does not define GetSystemTimeAsFileTime
GetSystemTimeAsFileTime(FILETIME_ * lpFileTime)129 BOOST_FORCEINLINE VOID_ GetSystemTimeAsFileTime(FILETIME_* lpFileTime)
130 {
131 boost::winapi::SYSTEMTIME_ st;
132 boost::winapi::GetSystemTime(&st);
133 boost::winapi::SystemTimeToFileTime(&st, lpFileTime);
134 }
135 #endif
136
137 }
138 }
139
140 #endif // BOOST_WINAPI_TIME_HPP_INCLUDED_
141