void SimpleObjectSortedMapData< KeyT, CompareKeyT, AllocatorT >::Serialize( ArchiveT& archive ) { DynArray< ObjectPtr > components; components.Reserve( m_Data->GetSize() * 2 ); { DataType::ConstIterator itr = m_Data->Begin(); DataType::ConstIterator end = m_Data->End(); for ( ; itr != end; ++itr ) { ObjectPtr elem = Registry::GetInstance()->CreateInstance( Reflect::GetDataClass< KeyT >() ); Data* ser = AssertCast< Data >( elem.Ptr() ); ser->ConnectData( const_cast< KeyT* >( &itr->First() ) ); HELIUM_VERIFY( components.New( ser ) ); HELIUM_VERIFY( components.New( itr->Second() ) ); } } archive.SerializeArray( components ); { DynArray< ObjectPtr >::Iterator itr = components.Begin(); DynArray< ObjectPtr >::Iterator end = components.End(); for ( ; itr != end; ++itr ) { Data* ser = AssertCast< Data >( *itr ); ser->Disconnect(); ++itr; // Skip over the object reference. // might be useful to cache the data object here } } }
void SimpleObjectStlMapData<KeyT>::Serialize(ArchiveT& archive) { std::vector< ObjectPtr > components; components.resize(m_Data->size() * 2); { DataType::const_iterator itr = m_Data->begin(); DataType::const_iterator end = m_Data->end(); for ( int i = 0; itr != end; ++itr ) { ObjectPtr elem = Registry::GetInstance()->CreateInstance( Reflect::GetDataClass<KeyT>() ); Data* ser = AssertCast<Data>(elem.Ptr()); ser->ConnectData((void*)&(itr->first)); components[i++] = ser; components[i++] = itr->second; } } archive.SerializeArray( components ); { std::vector< ObjectPtr >::iterator itr = components.begin(); std::vector< ObjectPtr >::iterator end = components.end(); for ( ; itr != end; ++itr ) { Data* ser = AssertCast<Data>(*itr); ser->Disconnect(); ++itr; // might be useful to cache the data object here } } }
void SimpleSortedSetData< KeyT, CompareKeyT, AllocatorT >::Serialize( ArchiveT& archive ) { DynArray< ObjectPtr > components; components.Reserve( m_Data->GetSize() ); { DataType::ConstIterator itr = m_Data->Begin(); DataType::ConstIterator end = m_Data->End(); for ( ; itr != end; ++itr ) { ObjectPtr dataElem = Registry::GetInstance()->CreateInstance( Reflect::GetDataClass< KeyT >() ); // downcast to data type Data* dataSer = AssertCast< Data >( dataElem ); // connect to our map data memory address dataSer->ConnectData( const_cast< KeyT* >( &( *itr ) ) ); // serialize to the archive stream HELIUM_VERIFY( components.New( dataSer ) ); } } archive.SerializeArray( components ); DynArray< ObjectPtr >::Iterator itr = components.Begin(); DynArray< ObjectPtr >::Iterator end = components.End(); for ( ; itr != end; ++itr ) { Data* ser = AssertCast< Data >( *itr ); ser->Disconnect(); // might be useful to cache the data object here } }
void ObjectStlSetData::Serialize(ArchiveT& archive) { std::vector< ObjectPtr > components; DataType::const_iterator itr = m_Data->begin(); DataType::const_iterator end = m_Data->end(); for ( ; itr != end; ++itr ) { components.push_back(*itr); } archive.SerializeArray( components ); }
void StructureDynArrayData::Serialize( ArchiveT& archive ) { const Structure *structure = GetInternalStructure(); DynArray< ObjectPtr > components; components.Resize( structure->m_DynArrayAdapter->GetSize(GetInternalPtr(structure)) ); for (size_t i = 0; i < components.GetSize(); ++i) { components[i] = structure->m_DynArrayAdapter->GetItem(GetInternalPtr(structure), i, m_Instance, m_Field); } archive.SerializeArray( components ); }
void ObjectDynArrayData::Serialize( ArchiveT& archive ) { archive.SerializeArray( *m_Data ); }