void CObjectOStream::CopyContainer(const CContainerTypeInfo* cType, CObjectStreamCopier& copier) { BEGIN_OBJECT_2FRAMES_OF2(copier, eFrameArray, cType); copier.In().BeginContainer(cType); BeginContainer(cType); TTypeInfo elementType = cType->GetElementType(); BEGIN_OBJECT_2FRAMES_OF2(copier, eFrameArrayElement, elementType); while ( copier.In().BeginContainerElement(elementType) ) { BeginContainerElement(elementType); CopyObject(elementType, copier); EndContainerElement(); copier.In().EndContainerElement(); } END_OBJECT_2FRAMES_OF(copier); EndContainer(); copier.In().EndContainer(); END_OBJECT_2FRAMES_OF(copier); }
void CObjectOStream::WriteContainer(const CContainerTypeInfo* cType, TConstObjectPtr containerPtr) { BEGIN_OBJECT_FRAME2(eFrameArray, cType); BeginContainer(cType); CContainerTypeInfo::CConstIterator i; if ( cType->InitIterator(i, containerPtr) ) { TTypeInfo elementType = cType->GetElementType(); BEGIN_OBJECT_FRAME2(eFrameArrayElement, elementType); do { BeginContainerElement(elementType); WriteObject(cType->GetElementPtr(i), elementType); EndContainerElement(); } while ( cType->NextElement(i) ); END_OBJECT_FRAME(); } EndContainer(); END_OBJECT_FRAME(); }
void CObjectOStream::WriteContainerElement(const CConstObjectInfo& element) { BeginContainerElement(element.GetTypeInfo()); WriteObject(element); EndContainerElement(); }
void CObjectOStream::WriteContainer(const CContainerTypeInfo* cType, TConstObjectPtr containerPtr) { BEGIN_OBJECT_FRAME2(eFrameArray, cType); BeginContainer(cType); CContainerTypeInfo::CConstIterator i; if ( cType->InitIterator(i, containerPtr) ) { TTypeInfo elementType = cType->GetElementType(); BEGIN_OBJECT_FRAME2(eFrameArrayElement, elementType); const CPointerTypeInfo* pointerType = dynamic_cast<const CPointerTypeInfo*>(elementType); do { TConstObjectPtr elementPtr = cType->GetElementPtr(i); if ( pointerType && !pointerType->GetObjectPointer(elementPtr) ) { if ( GetVerifyData() == eSerialVerifyData_Yes ) { ThrowError(fUnassigned, "NULL element while writing container "+ cType->GetName()); } continue; } BeginContainerElement(elementType); WriteObject(elementPtr, elementType); EndContainerElement(); } while ( cType->NextElement(i) ); END_OBJECT_FRAME(); } EndContainer(); END_OBJECT_FRAME(); }