#include "ContentLoaderBase.h" #include const void* ContentLoaderBase::PTR_FOLLOWING = reinterpret_cast(-1); const void* ContentLoaderBase::PTR_INSERT = reinterpret_cast(-2); ContentLoaderBase::ContentLoaderBase(Zone& zone, ZoneInputStream& stream) : varXString(nullptr), m_zone(zone), m_memory(zone.Memory()), m_stream(stream) { } void ContentLoaderBase::LoadXString(const bool atStreamStart) const { assert(varXString != nullptr); if (atStreamStart) m_stream.Load(varXString); if (*varXString != nullptr) { if (*varXString == PTR_FOLLOWING) { *varXString = m_stream.Alloc(alignof(const char)); m_stream.LoadNullTerminated(const_cast(*varXString)); } else { *varXString = m_stream.ConvertOffsetToPointerNative(*varXString); } } } void ContentLoaderBase::LoadXStringArray(const bool atStreamStart, const size_t count) { assert(varXString != nullptr); if (atStreamStart) m_stream.Load(varXString, count); for (size_t index = 0; index < count; index++) { LoadXString(false); varXString++; } }