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 CAliasTypeInfoFunctions::CopyAliasDefault(CObjectStreamCopier& copier, TTypeInfo objectType) { const CAliasTypeInfo* aliasType = CTypeConverter<CAliasTypeInfo>::SafeCast(objectType); copier.CopyAlias(aliasType); }
void CContainerTypeInfo::CopyContainer(CObjectStreamCopier& copier, TTypeInfo objectType) { const CContainerTypeInfo* containerType = CTypeConverter<CContainerTypeInfo>::SafeCast(objectType); copier.CopyContainer(containerType); }
void CPointerTypeInfo::CopyPointer(CObjectStreamCopier& copier, TTypeInfo objectType) { const CPointerTypeInfo* pointerType = CTypeConverter<CPointerTypeInfo>::SafeCast(objectType); copier.CopyPointer(pointerType->GetPointedType()); }
virtual void CopyObject(CObjectStreamCopier& copier, const CObjectTypeInfo& passed_info) { cout << copier.In().GetStackPath() << endl; #if 1 DefaultCopy(copier, passed_info); #else #if 1 // or skip the object copier.In().SkipObject(passed_info.GetTypeInfo()); #endif #if 0 // or read object CSeq_annot annot; copier.In().ReadObject(&annot, CSeq_annot::GetTypeInfo()); cout << MSerial_AsnText << annot << endl; // and maybe write it as well copier.Out().WriteObject(&annot, CSeq_annot::GetTypeInfo()); #endif #if 0 // or read object and write it CObjectInfo oi(passed_info.GetTypeInfo()); copier.In().ReadObject(oi); copier.Out().WriteObject(oi); #endif // typeinfo of the object (Seq-annot) TTypeInfo ti = passed_info.GetTypeInfo(); #endif }
void CTypeInfoFunctions::CopyWithHook(CObjectStreamCopier& stream, TTypeInfo objectType) { CCopyObjectHook* hook = objectType->m_CopyHookData.GetHook(stream.m_ObjectHookKey); if (!hook) { hook = objectType->m_CopyHookData.GetPathHook(stream.In()); } if ( hook ) hook->CopyObject(stream, objectType); else objectType->DefaultCopyData(stream); }
void CObjectOStream::CopyClassRandom(const CClassTypeInfo* classType, CObjectStreamCopier& copier) { BEGIN_OBJECT_2FRAMES_OF2(copier, eFrameClass, classType); copier.In().BeginClass(classType); BeginClass(classType); vector<Uint1> read(classType->GetMembers().LastIndex() + 1); BEGIN_OBJECT_2FRAMES_OF(copier, eFrameClassMember); TMemberIndex index; while ( (index = copier.In().BeginClassMember(classType)) != kInvalidMember ) { const CMemberInfo* memberInfo = classType->GetMemberInfo(index); copier.In().SetTopMemberId(memberInfo->GetId()); SetTopMemberId(memberInfo->GetId()); copier.SetPathHooks(*this, true); if ( read[index] ) { copier.In().DuplicatedMember(memberInfo); } else { read[index] = true; BeginClassMember(memberInfo->GetId()); memberInfo->CopyMember(copier); EndClassMember(); } copier.SetPathHooks(*this, false); copier.In().EndClassMember(); } END_OBJECT_2FRAMES_OF(copier); // init all absent members for ( CClassTypeInfo::CIterator i(classType); i.Valid(); ++i ) { if ( !read[*i] ) { classType->GetMemberInfo(*i)->CopyMissingMember(copier); } } EndClass(); copier.In().EndClass(); END_OBJECT_2FRAMES_OF(copier); }
void CObjectOStream::CopyClassSequential(const CClassTypeInfo* classType, CObjectStreamCopier& copier) { BEGIN_OBJECT_2FRAMES_OF2(copier, eFrameClass, classType); copier.In().BeginClass(classType); BeginClass(classType); CClassTypeInfo::CIterator pos(classType); BEGIN_OBJECT_2FRAMES_OF(copier, eFrameClassMember); TMemberIndex index; while ( (index = copier.In().BeginClassMember(classType, *pos)) != kInvalidMember ) { const CMemberInfo* memberInfo = classType->GetMemberInfo(index); copier.In().SetTopMemberId(memberInfo->GetId()); SetTopMemberId(memberInfo->GetId()); copier.SetPathHooks(*this, true); for ( TMemberIndex i = *pos; i < index; ++i ) { // init missing member classType->GetMemberInfo(i)->CopyMissingMember(copier); } BeginClassMember(memberInfo->GetId()); memberInfo->CopyMember(copier); pos.SetIndex(index + 1); EndClassMember(); copier.SetPathHooks(*this, false); copier.In().EndClassMember(); } END_OBJECT_2FRAMES_OF(copier); // init all absent members for ( ; pos.Valid(); ++pos ) { classType->GetMemberInfo(*pos)->CopyMissingMember(copier); } EndClass(); copier.In().EndClass(); END_OBJECT_2FRAMES_OF(copier); }
void CObjectOStream::CopyNamedType(TTypeInfo namedTypeInfo, TTypeInfo objectType, CObjectStreamCopier& copier) { #ifndef VIRTUAL_MID_LEVEL_IO BEGIN_OBJECT_2FRAMES_OF2(copier, eFrameNamed, namedTypeInfo); copier.In().BeginNamedType(namedTypeInfo); BeginNamedType(namedTypeInfo); CopyObject(objectType, copier); EndNamedType(); copier.In().EndNamedType(); END_OBJECT_2FRAMES_OF(copier); #else BEGIN_OBJECT_FRAME_OF2(copier.In(), eFrameNamed, namedTypeInfo); copier.In().BeginNamedType(namedTypeInfo); CopyObject(objectType, copier); copier.In().EndNamedType(); END_OBJECT_FRAME_OF(copier.In()); #endif }
void CObjectOStream::CopyChoice(const CChoiceTypeInfo* choiceType, CObjectStreamCopier& copier) { BEGIN_OBJECT_2FRAMES_OF2(copier, eFrameChoice, choiceType); BeginChoice(choiceType); copier.In().BeginChoice(choiceType); BEGIN_OBJECT_2FRAMES_OF(copier, eFrameChoiceVariant); TMemberIndex index = copier.In().BeginChoiceVariant(choiceType); if ( index == kInvalidMember ) { copier.ThrowError(CObjectIStream::fFormatError, "choice variant id expected"); } const CVariantInfo* variantInfo = choiceType->GetVariantInfo(index); if (variantInfo->GetId().IsAttlist()) { const CMemberInfo* memberInfo = dynamic_cast<const CMemberInfo*>( choiceType->GetVariants().GetItemInfo(index)); BeginClassMember(memberInfo->GetId()); memberInfo->CopyMember(copier); EndClassMember(); copier.In().EndChoiceVariant(); index = copier.In().BeginChoiceVariant(choiceType); if ( index == kInvalidMember ) copier.ThrowError(CObjectIStream::fFormatError, "choice variant id expected"); variantInfo = choiceType->GetVariantInfo(index); } copier.In().SetTopMemberId(variantInfo->GetId()); copier.Out().SetTopMemberId(variantInfo->GetId()); copier.SetPathHooks(copier.Out(), true); BeginChoiceVariant(choiceType, variantInfo->GetId()); variantInfo->CopyVariant(copier); EndChoiceVariant(); copier.SetPathHooks(copier.Out(), false); copier.In().EndChoiceVariant(); END_OBJECT_2FRAMES_OF(copier); copier.In().EndChoice(); EndChoice(); END_OBJECT_2FRAMES_OF(copier); }
void CChoiceTypeInfoFunctions::CopyChoiceDefault(CObjectStreamCopier& copier, TTypeInfo objectType) { copier.CopyChoice(CTypeConverter<CChoiceTypeInfo>::SafeCast(objectType)); }
static void Copy(CObjectStreamCopier& copier, TTypeInfo ) { copier.In().ReadNull(); copier.Out().WriteNull(); }