StateWrapper: Track save state version

This commit is contained in:
Connor McLaughlin
2020-10-12 20:46:59 +10:00
parent 893268bba5
commit 69b2c3fc2d
4 changed files with 26 additions and 8 deletions

View File

@ -5,7 +5,10 @@
#include <cstring>
Log_SetChannel(StateWrapper);
StateWrapper::StateWrapper(ByteStream* stream, Mode mode) : m_stream(stream), m_mode(mode) {}
StateWrapper::StateWrapper(ByteStream* stream, Mode mode, u32 version)
: m_stream(stream), m_mode(mode), m_version(version)
{
}
StateWrapper::~StateWrapper() = default;

View File

@ -20,7 +20,7 @@ public:
Write
};
StateWrapper(ByteStream* stream, Mode mode);
StateWrapper(ByteStream* stream, Mode mode, u32 version);
StateWrapper(const StateWrapper&) = delete;
~StateWrapper();
@ -30,6 +30,7 @@ public:
bool IsWriting() const { return (m_mode == Mode::Write); }
Mode GetMode() const { return m_mode; }
void SetMode(Mode mode) { m_mode = mode; }
u32 GetVersion() const { return m_version; }
/// Overload for integral or floating-point types. Writes bytes as-is.
template<typename T, std::enable_if_t<std::is_integral_v<T> || std::is_floating_point_v<T>, int> = 0>
@ -175,8 +176,21 @@ public:
bool DoMarker(const char* marker);
template<typename T>
void DoEx(T* data, u32 version_introduced, T default_value)
{
if (m_version < version_introduced)
{
*data = std::move(default_value);
return;
}
Do(data);
}
private:
ByteStream* m_stream;
Mode m_mode;
u32 m_version;
bool m_error = false;
};