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:
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -216,4 +216,9 @@ public:
|
||||
size_t readBytes = fread(buffer, 1, (size_t)length, _file);
|
||||
return readBytes;
|
||||
}
|
||||
|
||||
const void* GetData() const override
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -49,6 +49,8 @@ interface IStream
|
||||
|
||||
virtual uint64_t TryRead(void* buffer, uint64_t length) abstract;
|
||||
|
||||
virtual const void* GetData() const abstract;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Helper methods
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -42,7 +42,7 @@ public:
|
||||
|
||||
MemoryStream& operator=(MemoryStream&& mv);
|
||||
|
||||
const void* GetData() const;
|
||||
const void* GetData() const override;
|
||||
void* GetDataCopy() const;
|
||||
void* TakeData();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user