/* * Copyright 2010 Vicente J. Botet Escriba * Copyright (c) Microsoft Corporation 2014 * Copyright 2015, 2017 Andrey Semashev * * Distributed under the Boost Software License, Version 1.0. * See http://www.boost.org/LICENSE_1_0.txt */ #ifndef BOOST_WINAPI_TIME_HPP_INCLUDED_ #define BOOST_WINAPI_TIME_HPP_INCLUDED_ #include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once #endif #if !defined( BOOST_USE_WINDOWS_H ) extern "C" { struct _FILETIME; struct _SYSTEMTIME; BOOST_SYMBOL_IMPORT lslboost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC GetSystemTime(::_SYSTEMTIME* lpSystemTime); #ifdef BOOST_HAS_GETSYSTEMTIMEASFILETIME // Windows CE does not define GetSystemTimeAsFileTime BOOST_SYMBOL_IMPORT lslboost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC GetSystemTimeAsFileTime(::_FILETIME* lpSystemTimeAsFileTime); #endif BOOST_SYMBOL_IMPORT lslboost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC SystemTimeToFileTime( const ::_SYSTEMTIME* lpSystemTime, ::_FILETIME* lpFileTime); BOOST_SYMBOL_IMPORT lslboost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC FileTimeToSystemTime( const ::_FILETIME* lpFileTime, ::_SYSTEMTIME* lpSystemTime); #if BOOST_WINAPI_PARTITION_APP_SYSTEM BOOST_SYMBOL_IMPORT lslboost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC FileTimeToLocalFileTime( const ::_FILETIME* lpFileTime, ::_FILETIME* lpLocalFileTime); BOOST_SYMBOL_IMPORT lslboost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC LocalFileTimeToFileTime( const ::_FILETIME* lpLocalFileTime, ::_FILETIME* lpFileTime); #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM #if BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM BOOST_SYMBOL_IMPORT lslboost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC GetTickCount(BOOST_WINAPI_DETAIL_VOID); #endif // BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 BOOST_SYMBOL_IMPORT lslboost::winapi::ULONGLONG_ BOOST_WINAPI_WINAPI_CC GetTickCount64(BOOST_WINAPI_DETAIL_VOID); #endif } // extern "C" #endif // !defined( BOOST_USE_WINDOWS_H ) namespace lslboost { namespace winapi { typedef struct BOOST_MAY_ALIAS _FILETIME { DWORD_ dwLowDateTime; DWORD_ dwHighDateTime; } FILETIME_, *PFILETIME_, *LPFILETIME_; typedef struct BOOST_MAY_ALIAS _SYSTEMTIME { WORD_ wYear; WORD_ wMonth; WORD_ wDayOfWeek; WORD_ wDay; WORD_ wHour; WORD_ wMinute; WORD_ wSecond; WORD_ wMilliseconds; } SYSTEMTIME_, *PSYSTEMTIME_, *LPSYSTEMTIME_; #if BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM using ::GetTickCount; #endif #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 using ::GetTickCount64; #endif BOOST_FORCEINLINE VOID_ GetSystemTime(LPSYSTEMTIME_ lpSystemTime) { ::GetSystemTime(reinterpret_cast< ::_SYSTEMTIME* >(lpSystemTime)); } BOOST_FORCEINLINE BOOL_ SystemTimeToFileTime(const SYSTEMTIME_* lpSystemTime, FILETIME_* lpFileTime) { return ::SystemTimeToFileTime(reinterpret_cast< const ::_SYSTEMTIME* >(lpSystemTime), reinterpret_cast< ::_FILETIME* >(lpFileTime)); } BOOST_FORCEINLINE BOOL_ FileTimeToSystemTime(const FILETIME_* lpFileTime, SYSTEMTIME_* lpSystemTime) { return ::FileTimeToSystemTime(reinterpret_cast< const ::_FILETIME* >(lpFileTime), reinterpret_cast< ::_SYSTEMTIME* >(lpSystemTime)); } #if BOOST_WINAPI_PARTITION_APP_SYSTEM BOOST_FORCEINLINE BOOL_ FileTimeToLocalFileTime(const FILETIME_* lpFileTime, FILETIME_* lpLocalFileTime) { return ::FileTimeToLocalFileTime(reinterpret_cast< const ::_FILETIME* >(lpFileTime), reinterpret_cast< ::_FILETIME* >(lpLocalFileTime)); } BOOST_FORCEINLINE BOOL_ LocalFileTimeToFileTime(const FILETIME_* lpLocalFileTime, FILETIME_* lpFileTime) { return ::LocalFileTimeToFileTime(reinterpret_cast< const ::_FILETIME* >(lpLocalFileTime), reinterpret_cast< ::_FILETIME* >(lpFileTime)); } #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM #if defined( BOOST_HAS_GETSYSTEMTIMEASFILETIME ) BOOST_FORCEINLINE VOID_ GetSystemTimeAsFileTime(LPFILETIME_ lpSystemTimeAsFileTime) { ::GetSystemTimeAsFileTime(reinterpret_cast< ::_FILETIME* >(lpSystemTimeAsFileTime)); } #else // Windows CE does not define GetSystemTimeAsFileTime BOOST_FORCEINLINE VOID_ GetSystemTimeAsFileTime(FILETIME_* lpFileTime) { lslboost::winapi::SYSTEMTIME_ st; lslboost::winapi::GetSystemTime(&st); lslboost::winapi::SystemTimeToFileTime(&st, lpFileTime); } #endif } } #endif // BOOST_WINAPI_TIME_HPP_INCLUDED_