mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-01-13 20:21:48 +00:00
refactor: return ZoneOutputOffset when writing via ZoneOutputStream
This commit is contained in:
@@ -60,15 +60,18 @@ void ContentWriter::WriteScriptStringList(const bool atStreamStart)
|
||||
m_stream->PushBlock(XFILE_BLOCK_VIRTUAL);
|
||||
|
||||
if (atStreamStart)
|
||||
varScriptStringList = m_stream->Write(varScriptStringList);
|
||||
varScriptStringListWritten = m_stream->Write(varScriptStringList);
|
||||
|
||||
if (varScriptStringList->strings != nullptr)
|
||||
{
|
||||
m_stream->Align(alignof(const char*));
|
||||
m_stream->Align(4);
|
||||
varXString = varScriptStringList->strings;
|
||||
WriteXStringArray(true, varScriptStringList->count);
|
||||
|
||||
m_stream->MarkFollowing(varScriptStringList->strings);
|
||||
#ifdef ARCH_x86
|
||||
static_assert(offsetof(ScriptStringList, strings) == 4u);
|
||||
#endif
|
||||
m_stream->MarkFollowing(varScriptStringListWritten.WithInnerOffset(4));
|
||||
}
|
||||
|
||||
m_stream->PopBlock();
|
||||
@@ -90,7 +93,7 @@ void ContentWriter::WriteXAsset(const bool atStreamStart)
|
||||
assert(varXAsset != nullptr);
|
||||
|
||||
if (atStreamStart)
|
||||
varXAsset = m_stream->Write(varXAsset);
|
||||
varXAssetWritten = m_stream->Write(varXAsset);
|
||||
|
||||
switch (varXAsset->type)
|
||||
{
|
||||
@@ -143,12 +146,17 @@ void ContentWriter::WriteXAssetArray(const bool atStreamStart, const size_t coun
|
||||
assert(varXAsset != nullptr);
|
||||
|
||||
if (atStreamStart)
|
||||
varXAsset = m_stream->Write(varXAsset, count);
|
||||
varXAssetWritten = m_stream->Write(varXAsset, count);
|
||||
|
||||
for (size_t index = 0; index < count; index++)
|
||||
{
|
||||
WriteXAsset(false);
|
||||
varXAsset++;
|
||||
|
||||
#ifdef ARCH_x86
|
||||
static_assert(sizeof(XAsset) == 8u);
|
||||
#endif
|
||||
varXAssetWritten.Inc(8u);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,17 +171,26 @@ void ContentWriter::WriteContent(ZoneOutputStream& stream)
|
||||
|
||||
CreateXAssetList(assetList, memory);
|
||||
|
||||
varXAssetList = static_cast<XAssetList*>(m_stream->WriteDataRaw(&assetList, sizeof(assetList)));
|
||||
varXAssetList = &assetList;
|
||||
varXAssetListWritten = m_stream->WriteDataRaw(&assetList, sizeof(assetList));
|
||||
|
||||
#ifdef ARCH_x86
|
||||
static_assert(offsetof(XAssetList, stringList) == 0u);
|
||||
#endif
|
||||
varScriptStringList = &varXAssetList->stringList;
|
||||
varScriptStringListWritten = varXAssetListWritten.WithInnerOffset(0);
|
||||
WriteScriptStringList(false);
|
||||
|
||||
if (varXAssetList->assets != nullptr)
|
||||
{
|
||||
m_stream->Align(alignof(XAsset));
|
||||
m_stream->Align(4);
|
||||
varXAsset = varXAssetList->assets;
|
||||
WriteXAssetArray(true, varXAssetList->assetCount);
|
||||
m_stream->MarkFollowing(varXAssetList->assets);
|
||||
|
||||
#ifdef ARCH_x86
|
||||
static_assert(offsetof(XAssetList, assets) == 12u);
|
||||
#endif
|
||||
m_stream->MarkFollowing(varXAssetListWritten.WithInnerOffset(12));
|
||||
}
|
||||
|
||||
m_stream->PopBlock();
|
||||
|
||||
Reference in New Issue
Block a user