1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-28 17:24:47 +01:00

Fix DataSerialiser returning the wrong stream object

This commit is contained in:
Matt
2019-07-27 15:49:06 +02:00
parent 0ff9d3af12
commit 8ab0ca4f8f
6 changed files with 23 additions and 16 deletions

View File

@@ -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();

View File

@@ -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);

View File

@@ -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<typename T> DataSerialiser& operator<<(const T& data)
@@ -56,13 +56,13 @@ public:
if (!_isLogging)
{
if (_isSaving)
DataSerializerTraits<T>::encode(_activeStream, data);
DataSerializerTraits<T>::encode(&_activeStream, data);
else
DataSerializerTraits<T>::decode(_activeStream, const_cast<T&>(data));
DataSerializerTraits<T>::decode(&_activeStream, const_cast<T&>(data));
}
else
{
DataSerializerTraits<T>::log(_activeStream, data);
DataSerializerTraits<T>::log(&_activeStream, data);
}
return *this;
@@ -73,13 +73,13 @@ public:
if (!_isLogging)
{
if (_isSaving)
DataSerializerTraits<DataSerialiserTag<T>>::encode(_activeStream, data);
DataSerializerTraits<DataSerialiserTag<T>>::encode(&_activeStream, data);
else
DataSerializerTraits<DataSerialiserTag<T>>::decode(_activeStream, data);
DataSerializerTraits<DataSerialiserTag<T>>::decode(&_activeStream, data);
}
else
{
DataSerializerTraits<DataSerialiserTag<T>>::log(_activeStream, data);
DataSerializerTraits<DataSerialiserTag<T>>::log(&_activeStream, data);
}
return *this;

View File

@@ -216,4 +216,9 @@ public:
size_t readBytes = fread(buffer, 1, (size_t)length, _file);
return readBytes;
}
const void* GetData() const override
{
return nullptr;
}
};

View File

@@ -49,6 +49,8 @@ interface IStream
virtual uint64_t TryRead(void* buffer, uint64_t length) abstract;
virtual const void* GetData() const abstract;
///////////////////////////////////////////////////////////////////////////
// Helper methods
///////////////////////////////////////////////////////////////////////////

View File

@@ -42,7 +42,7 @@ public:
MemoryStream& operator=(MemoryStream&& mv);
const void* GetData() const;
const void* GetData() const override;
void* GetDataCopy() const;
void* TakeData();