diff --git a/src/openrct2/Cheats.cpp b/src/openrct2/Cheats.cpp index e458285e6b..7b9f239043 100644 --- a/src/openrct2/Cheats.cpp +++ b/src/openrct2/Cheats.cpp @@ -95,7 +95,7 @@ void CheatsSerialise(DataSerialiser& ds) if (ds.IsSaving()) { - MemoryStream& stream = ds.GetStream(); + IStream& stream = ds.GetStream(); // Temporarily write 0, will be updated after every cheat is written. uint64_t countOffset = stream.GetPosition(); diff --git a/src/openrct2/actions/GameAction.cpp b/src/openrct2/actions/GameAction.cpp index b6789b86e5..8a2d5bc99c 100644 --- a/src/openrct2/actions/GameAction.cpp +++ b/src/openrct2/actions/GameAction.cpp @@ -106,7 +106,7 @@ namespace GameActions action->Serialise(dsOut); // Serialise into new action. - MemoryStream& stream = dsOut.GetStream(); + IStream& stream = dsOut.GetStream(); stream.SetPosition(0); DataSerialiser dsIn(false, stream); diff --git a/src/openrct2/core/DataSerialiser.h b/src/openrct2/core/DataSerialiser.h index 367567d6f9..7549b2df34 100644 --- a/src/openrct2/core/DataSerialiser.h +++ b/src/openrct2/core/DataSerialiser.h @@ -17,23 +17,23 @@ class DataSerialiser { private: MemoryStream _stream; - IStream* _activeStream = nullptr; + IStream& _activeStream; bool _isSaving = false; bool _isLogging = false; public: DataSerialiser(bool isSaving) - : _isSaving(isSaving) + : _activeStream(_stream) + , _isSaving(isSaving) , _isLogging(false) { - _activeStream = &_stream; } DataSerialiser(bool isSaving, IStream& stream, bool isLogging = false) - : _isSaving(isSaving) + : _activeStream(stream) + , _isSaving(isSaving) , _isLogging(isLogging) { - _activeStream = &stream; } bool IsSaving() const @@ -46,9 +46,9 @@ public: return !_isSaving; } - MemoryStream& GetStream() + IStream& GetStream() { - return _stream; + return _activeStream; } template DataSerialiser& operator<<(const T& data) @@ -56,13 +56,13 @@ public: if (!_isLogging) { if (_isSaving) - DataSerializerTraits::encode(_activeStream, data); + DataSerializerTraits::encode(&_activeStream, data); else - DataSerializerTraits::decode(_activeStream, const_cast(data)); + DataSerializerTraits::decode(&_activeStream, const_cast(data)); } else { - DataSerializerTraits::log(_activeStream, data); + DataSerializerTraits::log(&_activeStream, data); } return *this; @@ -73,13 +73,13 @@ public: if (!_isLogging) { if (_isSaving) - DataSerializerTraits>::encode(_activeStream, data); + DataSerializerTraits>::encode(&_activeStream, data); else - DataSerializerTraits>::decode(_activeStream, data); + DataSerializerTraits>::decode(&_activeStream, data); } else { - DataSerializerTraits>::log(_activeStream, data); + DataSerializerTraits>::log(&_activeStream, data); } return *this; diff --git a/src/openrct2/core/FileStream.hpp b/src/openrct2/core/FileStream.hpp index 0839b9994f..0fb34679e7 100644 --- a/src/openrct2/core/FileStream.hpp +++ b/src/openrct2/core/FileStream.hpp @@ -216,4 +216,9 @@ public: size_t readBytes = fread(buffer, 1, (size_t)length, _file); return readBytes; } + + const void* GetData() const override + { + return nullptr; + } }; diff --git a/src/openrct2/core/IStream.hpp b/src/openrct2/core/IStream.hpp index c578aaf7b9..0ded91b216 100644 --- a/src/openrct2/core/IStream.hpp +++ b/src/openrct2/core/IStream.hpp @@ -49,6 +49,8 @@ interface IStream virtual uint64_t TryRead(void* buffer, uint64_t length) abstract; + virtual const void* GetData() const abstract; + /////////////////////////////////////////////////////////////////////////// // Helper methods /////////////////////////////////////////////////////////////////////////// diff --git a/src/openrct2/core/MemoryStream.h b/src/openrct2/core/MemoryStream.h index e1ac6870fb..1401d1a87b 100644 --- a/src/openrct2/core/MemoryStream.h +++ b/src/openrct2/core/MemoryStream.h @@ -42,7 +42,7 @@ public: MemoryStream& operator=(MemoryStream&& mv); - const void* GetData() const; + const void* GetData() const override; void* GetDataCopy() const; void* TakeData();