Switch timestamp format to combined UTC + local so fewer stupid hacks are required.

This commit is contained in:
elasota
2020-01-23 22:36:12 -05:00
parent 6171b1185e
commit 928efdd527
8 changed files with 143 additions and 90 deletions

View File

@@ -0,0 +1,57 @@
#pragma once
#include <stdint.h>
namespace PortabilityLayer
{
struct CombinedTimestamp
{
uint8_t m_utcTimestamp[8];
uint8_t m_localYear[4];
uint8_t m_localMonth;
uint8_t m_localDay;
uint8_t m_localHour;
uint8_t m_localMinute;
uint8_t m_localSecond;
uint8_t m_padding[3];
int64_t GetUTCTime() const;
void SetUTCTime(int64_t timestamp);
int32_t GetLocalYear() const;
void SetLocalYear(int32_t year);
};
inline int64_t CombinedTimestamp::GetUTCTime() const
{
int64_t result = 0;
for (int i = 0; i < 8; i++)
result |= static_cast<int64_t>(m_utcTimestamp[i]) << (i * 8);
return result;
}
void CombinedTimestamp::SetUTCTime(int64_t timestamp)
{
for (int i = 0; i < 8; i++)
m_utcTimestamp[i] = static_cast<uint8_t>((timestamp >> (i * 8)) & 0xff);
}
inline int32_t CombinedTimestamp::GetLocalYear() const
{
int32_t result = 0;
for (int i = 0; i < 4; i++)
result |= static_cast<int32_t>(m_localYear[i]) << (i * 8);
return result;
}
void CombinedTimestamp::SetLocalYear(int32_t timestamp)
{
for (int i = 0; i < 4; i++)
m_localYear[i] = static_cast<uint8_t>((timestamp >> (i * 8)) & 0xff);
}
}

View File

@@ -147,6 +147,7 @@
<ClInclude Include="ByteSwap.h" />
<ClInclude Include="ByteUnpack.h" />
<ClInclude Include="CFileStream.h" />
<ClInclude Include="CombinedTimestamp.h" />
<ClInclude Include="DataTypes.h" />
<ClInclude Include="DeflateCodec.h" />
<ClInclude Include="DialogManager.h" />

View File

@@ -465,6 +465,9 @@
<ClInclude Include="BitmapImage.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="CombinedTimestamp.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="CFileStream.cpp">