- Naming style migrated to camel-case - P7lib logger sources added - Vcpkg manifest, CMake presets and build moved to root - SDL2, Vulkan and RmlUi dependencies added - Logger LOG macro added - Logger configuration - SDL2 window configuration - Vulkan configuration - RmlUi configuration - SDL event loop
204 lines
7.6 KiB
C
204 lines
7.6 KiB
C
////////////////////////////////////////////////////////////////////////////////
|
|
// /
|
|
// 2012-2020 (c) Baical /
|
|
// /
|
|
// This library is free software; you can redistribute it and/or /
|
|
// modify it under the terms of the GNU Lesser General Public /
|
|
// License as published by the Free Software Foundation; either /
|
|
// version 3.0 of the License, or (at your option) any later version. /
|
|
// /
|
|
// This library 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 /
|
|
// Lesser General Public License for more details. /
|
|
// /
|
|
// You should have received a copy of the GNU Lesser General Public /
|
|
// License along with this library. /
|
|
// /
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
#pragma once
|
|
|
|
#define TIME_HRS_100NS 36000000000ull
|
|
#define TIME_MIN_100NS 600000000ull
|
|
#define TIME_SEC_100NS 10000000ull
|
|
#define TIME_MSC_100NS 10000ull
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//GetTickCount - exist in OS
|
|
//tUINT32 GetTickCount()
|
|
//{
|
|
//}//GetTickCount
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//GetPerformanceCounter
|
|
static inline tUINT64 GetPerformanceCounter()
|
|
{
|
|
LARGE_INTEGER l_qwValue;
|
|
l_qwValue.QuadPart = 0;
|
|
QueryPerformanceCounter(&l_qwValue);
|
|
return l_qwValue.QuadPart;
|
|
}//GetPerformanceCounter
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//GetPerformanceFrequency
|
|
static inline tUINT64 GetPerformanceFrequency()
|
|
{
|
|
LARGE_INTEGER l_qwValue;
|
|
l_qwValue.QuadPart = 0;
|
|
QueryPerformanceFrequency(&l_qwValue);
|
|
return l_qwValue.QuadPart;
|
|
}//GetPerformanceFrequency
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//GetEpochTime
|
|
//return a 64-bit value of 100-nanosecond intervals since January 1, 1601 (UTC).
|
|
static inline void GetEpochTime(tUINT32 *o_pHi, tUINT32 *o_pLow)
|
|
{
|
|
SYSTEMTIME l_sSTime = {0};
|
|
FILETIME l_sFTime = {0};
|
|
GetSystemTime(&l_sSTime);
|
|
|
|
SystemTimeToFileTime(&l_sSTime, &l_sFTime);
|
|
if (o_pHi)
|
|
{
|
|
*o_pHi = l_sFTime.dwHighDateTime;
|
|
}
|
|
|
|
if (o_pLow)
|
|
{
|
|
*o_pLow = l_sFTime.dwLowDateTime;
|
|
}
|
|
}//GetEpochTime
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//UnpackLocalTime
|
|
//convert a 64-bit value of 100-nanosecond intervals since January 1, 1601 (UTC)
|
|
//to readable form
|
|
static inline void UnpackLocalTime(tUINT64 i_qwTime,
|
|
tUINT32 &o_rYear,
|
|
tUINT32 &o_rMonth,
|
|
tUINT32 &o_rDay,
|
|
tUINT32 &o_rHour,
|
|
tUINT32 &o_rMinutes,
|
|
tUINT32 &o_rSeconds,
|
|
tUINT32 &o_rMilliseconds,
|
|
tUINT32 &o_rMicroseconds,
|
|
tUINT32 &o_rNanoseconds
|
|
)
|
|
{
|
|
tUINT32 l_dwReminder = i_qwTime % TIME_MSC_100NS; //micro & 100xNanoseconds
|
|
tUINT32 l_dwNano = i_qwTime % 10;
|
|
tUINT32 l_dwMicro = l_dwReminder / 10;
|
|
|
|
i_qwTime -= l_dwReminder;
|
|
|
|
SYSTEMTIME l_sTime = {0};
|
|
FILETIME l_sLocalTime = {0};
|
|
|
|
FileTimeToLocalFileTime((FILETIME*)&i_qwTime, &l_sLocalTime);
|
|
FileTimeToSystemTime(&l_sLocalTime, &l_sTime);
|
|
|
|
o_rYear = l_sTime.wYear;
|
|
o_rMonth = l_sTime.wMonth;
|
|
o_rDay = l_sTime.wDay;
|
|
o_rHour = l_sTime.wHour;
|
|
o_rMinutes = l_sTime.wMinute;
|
|
o_rSeconds = l_sTime.wSecond;
|
|
o_rMilliseconds = l_sTime.wMilliseconds;
|
|
o_rMicroseconds = l_dwMicro;
|
|
o_rNanoseconds = l_dwNano;
|
|
}//UnpackLocalTime
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//PackLocalTime
|
|
//convert date & time to 64-bit value of 100-nanosecond intervals since January 1, 1601 (UTC)
|
|
tUINT64 static inline PackLocalTime(tUINT32 i_uiYear,
|
|
tUINT32 i_uiMonth,
|
|
tUINT32 i_uiDay,
|
|
tUINT32 i_uiHour,
|
|
tUINT32 i_uiMinutes,
|
|
tUINT32 i_uiSeconds,
|
|
tUINT32 i_uiMilliseconds,
|
|
tUINT32 i_uiMicroseconds,
|
|
tUINT32 i_uiNanoseconds
|
|
)
|
|
{
|
|
FILETIME l_sLocal = {0};
|
|
FILETIME l_sSystem = {0};
|
|
SYSTEMTIME l_sTime = {0};
|
|
|
|
l_sTime.wYear = (WORD)i_uiYear;
|
|
l_sTime.wMonth = (WORD)i_uiMonth;
|
|
l_sTime.wDay = (WORD)i_uiDay;
|
|
l_sTime.wHour = (WORD)i_uiHour;
|
|
l_sTime.wMinute = (WORD)i_uiMinutes;
|
|
l_sTime.wSecond = (WORD)i_uiSeconds;
|
|
l_sTime.wMilliseconds = (WORD)i_uiMilliseconds;
|
|
|
|
SystemTimeToFileTime(&l_sTime, &l_sLocal);
|
|
LocalFileTimeToFileTime(&l_sLocal, &l_sSystem);
|
|
|
|
tUINT64 l_qwReturn = ((tUINT64)(l_sSystem.dwHighDateTime) << 32) + (tUINT64)(l_sSystem.dwLowDateTime);
|
|
|
|
l_qwReturn += (i_uiMicroseconds * 10ull) + (i_uiNanoseconds / 100ull);
|
|
|
|
return l_qwReturn;
|
|
}//PackLocalTime
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//GetSecondOfDay
|
|
static inline tUINT32 GetSecondOfDay()
|
|
{
|
|
SYSTEMTIME l_sTime = {0};
|
|
|
|
GetLocalTime(&l_sTime);
|
|
|
|
return 3600 * (tUINT32)l_sTime.wHour + (tUINT32)l_sTime.wMinute * 60 + (tUINT32)l_sTime.wSecond;
|
|
}//GetSecondOfDay
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//GetEpochTime
|
|
//return a 64-bit value of 100-nanosecond intervals since January 1, 1601 (UTC).
|
|
static inline tUINT64 GetEpochTime()
|
|
{
|
|
SYSTEMTIME l_sSTime = {0};
|
|
FILETIME l_sFTime = {0};
|
|
GetSystemTime(&l_sSTime);
|
|
|
|
SystemTimeToFileTime(&l_sSTime, &l_sFTime);
|
|
|
|
return (((tUINT64)l_sFTime.dwHighDateTime) << 32ull) + (tUINT64)l_sFTime.dwLowDateTime;
|
|
}//GetEpochTime
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//GetEpochLocalTime
|
|
//return a 64-bit value of 100-nanosecond intervals since January 1, 1601 (UTC).
|
|
static inline tUINT64 GetEpochLocalTime()
|
|
{
|
|
SYSTEMTIME l_sSTime = {0};
|
|
FILETIME l_sFTime = {0};
|
|
GetLocalTime(&l_sSTime);
|
|
|
|
SystemTimeToFileTime(&l_sSTime, &l_sFTime);
|
|
|
|
return (((tUINT64)l_sFTime.dwHighDateTime) << 32ull) + (tUINT64)l_sFTime.dwLowDateTime;
|
|
}//GetEpochTime
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//GetUtcOffsetSeconds
|
|
//return UTC0 offset in seconds
|
|
static inline tINT32 GetUtcOffsetSeconds()
|
|
{
|
|
TIME_ZONE_INFORMATION l_sTZ = {};
|
|
GetTimeZoneInformation(&l_sTZ);
|
|
return (tINT32)l_sTZ.Bias * -60;
|
|
} |