Add written variable for zone writing code to be able to differ between written data and original data

This commit is contained in:
Jan
2021-05-08 16:41:42 +02:00
parent acc11a1609
commit a8c62de081
7 changed files with 159 additions and 76 deletions

View File

@ -5,7 +5,8 @@
AssetWriter::AssetWriter(XAssetInfoGeneric* asset, Zone* zone, IZoneOutputStream* stream)
: ContentWriterBase(zone, stream),
m_asset(asset),
varScriptString(nullptr)
varScriptString(nullptr),
varScriptStringWritten(nullptr)
{
}
@ -22,12 +23,15 @@ scr_string_t AssetWriter::UseScriptString(const scr_string_t scrString) const
void AssetWriter::WriteScriptStringArray(const bool atStreamStart, const size_t count)
{
assert(varScriptString != nullptr);
if (atStreamStart)
varScriptString = m_stream->Write<scr_string_t>(varScriptString, count);
{
assert(varScriptString != nullptr);
varScriptStringWritten = m_stream->Write<scr_string_t>(varScriptString, count);
}
auto* ptr = varScriptString;
assert(varScriptStringWritten != nullptr);
auto* ptr = varScriptStringWritten;
for (size_t index = 0; index < count; index++)
{
*ptr = UseScriptString(*ptr);

View File

@ -12,6 +12,7 @@ protected:
XAssetInfoGeneric* m_asset;
scr_string_t* varScriptString;
scr_string_t* varScriptStringWritten;
AssetWriter(XAssetInfoGeneric* asset, Zone* zone, IZoneOutputStream* stream);

View File

@ -4,6 +4,7 @@
ContentWriterBase::ContentWriterBase()
: varXString(nullptr),
varXStringWritten(nullptr),
m_zone(nullptr),
m_stream(nullptr)
{
@ -11,6 +12,7 @@ ContentWriterBase::ContentWriterBase()
ContentWriterBase::ContentWriterBase(Zone* zone, IZoneOutputStream* stream)
: varXString(nullptr),
varXStringWritten(nullptr),
m_zone(zone),
m_stream(stream)
{
@ -18,31 +20,37 @@ ContentWriterBase::ContentWriterBase(Zone* zone, IZoneOutputStream* stream)
void ContentWriterBase::WriteXString(const bool atStreamStart)
{
assert(varXString != nullptr);
if (atStreamStart)
varXString = m_stream->Write<const char*>(varXString);
{
assert(varXString != nullptr);
varXStringWritten = m_stream->Write<const char*>(varXString);
}
if (m_stream->ReusableShouldWrite(varXString))
assert(varXStringWritten != nullptr);
if (m_stream->ReusableShouldWrite(varXStringWritten))
{
m_stream->Align(alignof(const char));
m_stream->ReusableAddOffset(*varXString);
m_stream->WriteNullTerminated(*varXString);
m_stream->ReusableAddOffset(*varXStringWritten);
m_stream->WriteNullTerminated(*varXStringWritten);
m_stream->MarkFollowing(*varXString);
m_stream->MarkFollowing(*varXStringWritten);
}
}
void ContentWriterBase::WriteXStringArray(const bool atStreamStart, const size_t count)
{
assert(varXString != nullptr);
if (atStreamStart)
varXString = m_stream->Write<const char*>(varXString, count);
{
assert(varXString != nullptr);
varXStringWritten = m_stream->Write<const char*>(varXString, count);
}
assert(varXStringWritten != nullptr);
for (size_t index = 0; index < count; index++)
{
WriteXString(false);
varXString++;
varXStringWritten++;
}
}

View File

@ -7,6 +7,7 @@ class ContentWriterBase
{
protected:
const char** varXString;
const char** varXStringWritten;
Zone* m_zone;
IZoneOutputStream* m_stream;