void ArchiveXML::DeserializeInstance(ObjectPtr& object) { // // If we don't have an object allocated for deserialization, pull one from the stream // if (!object.ReferencesObject()) { object = Allocate(); } // // We should now have an instance (unless data was skipped) // if (object.ReferencesObject()) { #ifdef REFLECT_ARCHIVE_VERBOSE m_Indent.Get(stdout); Log::Print(TXT("Deserializing %s\n"), object->GetClass()->m_Name); m_Indent.Push(); #endif object->PreDeserialize( NULL ); Data* data = SafeCast<Data>(object); if ( data ) { #pragma TODO("Make sure this string copy goes away when replace the stl stream APIs") tstring body ( m_Iterator.GetCurrent()->m_Body.GetData(), m_Iterator.GetCurrent()->m_Body.GetSize() ); tstringstream stringStream ( body ); TCharStream stream ( &stringStream, false ); m_Body = &stream; data->Deserialize(*this); m_Body = NULL; m_Iterator.Advance( true ); } else { DeserializeFields(object); } object->PostDeserialize( NULL ); #ifdef REFLECT_ARCHIVE_VERBOSE m_Indent.Pop(); #endif } }
void ArchiveBinary::DeserializeInstance(ObjectPtr& object) { // // If we don't have an object allocated for deserialization, pull one from the stream // if (!object.ReferencesObject()) { object = Allocate(); } // // We should now have an instance (unless data was skipped) // if (object.ReferencesObject()) { #ifdef REFLECT_ARCHIVE_VERBOSE m_Indent.Get(stdout); Log::Print(TXT("Deserializing %s\n"), object->GetClass()->m_Name); m_Indent.Push(); #endif object->PreDeserialize( NULL ); Data* data = SafeCast<Data>(object); if ( data ) { data->Deserialize(*this); } else { DeserializeFields(object); } object->PostDeserialize( NULL ); #ifdef REFLECT_ARCHIVE_VERBOSE m_Indent.Pop(); #endif } }