CSavedStateID: Make use of std::array

This commit is contained in:
Lioncash 2020-06-28 00:18:52 -04:00
parent 473e716cb7
commit 8fbc92b0e0

View File

@ -2,46 +2,39 @@
#define CSAVEDSTATEID_H #define CSAVEDSTATEID_H
#include <Common/Common.h> #include <Common/Common.h>
#include <array>
// GUID representing a value stored in the save file for MP3/DKCR // GUID representing a value stored in the save file for MP3/DKCR
class CSavedStateID class CSavedStateID
{ {
uint64 m[2]; std::array<uint64, 2> m{};
public: public:
CSavedStateID() constexpr CSavedStateID() = default;
constexpr CSavedStateID(uint64 Part1, uint64 Part2) : m{{Part1, Part2}}
{ {
m[0] = 0;
m[1] = 0;
} }
CSavedStateID(uint64 Part1, uint64 Part2) explicit CSavedStateID(IInputStream& rInput) : m{rInput.ReadULongLong(), rInput.ReadULongLong()}
{ {
m[0] = Part1;
m[1] = Part2;
}
explicit CSavedStateID(IInputStream& rInput)
{
m[0] = rInput.ReadLongLong();
m[1] = rInput.ReadLongLong();
} }
TString ToString() const TString ToString() const
{ {
uint32 Part1 = (m[0] >> 32) & 0xFFFFFFFF; const uint32 Part1 = (m[0] >> 32) & 0xFFFFFFFF;
uint32 Part2 = (m[0] >> 16) & 0x0000FFFF; const uint32 Part2 = (m[0] >> 16) & 0x0000FFFF;
uint32 Part3 = (m[0] >> 00) & 0x0000FFFF; const uint32 Part3 = (m[0] >> 00) & 0x0000FFFF;
uint32 Part4 = (m[1] >> 48) & 0x0000FFFF; const uint32 Part4 = (m[1] >> 48) & 0x0000FFFF;
uint32 Part5 = (m[1] >> 32) & 0x0000FFFF; const uint32 Part5 = (m[1] >> 32) & 0x0000FFFF;
uint32 Part6 = (m[1] >> 00) & 0xFFFFFFFF; const uint32 Part6 = (m[1] >> 00) & 0xFFFFFFFF;
return TString::Format("%08X-%04X-%04X-%04X-%04X%08X", Part1, Part2, Part3, Part4, Part5, Part6); return TString::Format("%08X-%04X-%04X-%04X-%04X%08X", Part1, Part2, Part3, Part4, Part5, Part6);
} }
void Write(IOutputStream& rOutput) void Write(IOutputStream& rOutput)
{ {
rOutput.WriteLongLong(m[0]); rOutput.WriteULongLong(m[0]);
rOutput.WriteLongLong(m[1]); rOutput.WriteULongLong(m[1]);
} }
void Serialize(IArchive& rArc) void Serialize(IArchive& rArc)
@ -54,21 +47,23 @@ public:
else else
{ {
TString Str; TString Str;
if (rArc.IsWriter()) Str = ToString(); if (rArc.IsWriter())
Str = ToString();
rArc.SerializePrimitive(Str, 0); rArc.SerializePrimitive(Str, 0);
if (rArc.IsReader()) *this = FromString(Str); if (rArc.IsReader())
*this = FromString(Str);
} }
} }
// Operators // Operators
bool operator==(const CSavedStateID& rkOther) const bool operator==(const CSavedStateID& rkOther) const
{ {
return (m[0] == rkOther.m[0] && m[1] == rkOther.m[1]); return m == rkOther.m;
} }
bool operator!=(const CSavedStateID& rkOther) const bool operator!=(const CSavedStateID& rkOther) const
{ {
return !(*this == rkOther); return !operator==(rkOther);
} }
bool operator<(const CSavedStateID& rkOther) const bool operator<(const CSavedStateID& rkOther) const