⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objostr.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    BEGIN_OBJECT_FRAME2(eFrameNamed, typeInfo);        WriteFileHeader(typeInfo);    WriteObject(object, typeInfo);    EndOfWrite();        END_OBJECT_FRAME();    if ( GetAutoSeparator() )        Separator(*this);}void CObjectOStream::Write(TConstObjectPtr object, const CTypeRef& type){    Write(object, type.Get());}void CObjectOStream::RegisterObject(TTypeInfo typeInfo){    if ( m_Objects )        m_Objects->RegisterObject(typeInfo);}void CObjectOStream::RegisterObject(TConstObjectPtr object,                                    TTypeInfo typeInfo){    if ( m_Objects )        m_Objects->RegisterObject(object, typeInfo);}void CObjectOStream::WriteSeparateObject(const CConstObjectInfo& object){    if ( m_Objects ) {        size_t firstObject = m_Objects->GetObjectCount();        WriteObject(object);        size_t lastObject = m_Objects->GetObjectCount();        m_Objects->ForgetObjects(firstObject, lastObject);    }    else {        WriteObject(object);    }}void CObjectOStream::WriteExternalObject(TConstObjectPtr objectPtr,                                         TTypeInfo typeInfo){    _TRACE("CObjectOStream::WriteExternalObject(" <<           NStr::PtrToString(objectPtr) << ", "           << typeInfo->GetName() << ')');    RegisterObject(objectPtr, typeInfo);    WriteObject(objectPtr, typeInfo);}bool CObjectOStream::Write(CByteSource& source){    m_Output.Write(*source.Open());    return true;}void CObjectOStream::WriteFileHeader(TTypeInfo /*type*/){    // do nothing by default}void CObjectOStream::WritePointer(TConstObjectPtr objectPtr,                                  TTypeInfo declaredTypeInfo){    _TRACE("WritePointer("<<NStr::PtrToString(objectPtr)<<", "           <<declaredTypeInfo->GetName()<<")");    if ( objectPtr == 0 ) {        _TRACE("WritePointer: "<<NStr::PtrToString(objectPtr)<<": null");        WriteNullPointer();        return;    }    TTypeInfo realTypeInfo = declaredTypeInfo->GetRealTypeInfo(objectPtr);    if ( m_Objects ) {        const CWriteObjectInfo* info =            m_Objects->RegisterObject(objectPtr, realTypeInfo);        if ( info ) {            // old object            WriteObjectReference(info->GetIndex());            return;        }    }    if ( declaredTypeInfo == realTypeInfo ) {        _TRACE("WritePointer: "<<NStr::PtrToString(objectPtr)<<": new");        WriteThis(objectPtr, realTypeInfo);    }    else {        _TRACE("WritePointer: "<<NStr::PtrToString(objectPtr)<<               ": new "<<realTypeInfo->GetName());        WriteOther(objectPtr, realTypeInfo);    }}void CObjectOStream::WriteThis(TConstObjectPtr object, TTypeInfo typeInfo){    WriteObject(object, typeInfo);}void CObjectOStream::WriteFloat(float data){    WriteDouble(data);}#if SIZEOF_LONG_DOUBLE != 0void CObjectOStream::WriteLDouble(long double data){    WriteDouble(data);}#endifvoid CObjectOStream::BeginNamedType(TTypeInfo /*namedTypeInfo*/){}void CObjectOStream::EndNamedType(void){}void CObjectOStream::WriteNamedType(TTypeInfo#ifndef VIRTUAL_MID_LEVEL_IO                                    namedTypeInfo#endif                                    ,                                    TTypeInfo objectType,                                    TConstObjectPtr objectPtr){#ifndef VIRTUAL_MID_LEVEL_IO    BEGIN_OBJECT_FRAME2(eFrameNamed, namedTypeInfo);    BeginNamedType(namedTypeInfo);#endif    WriteObject(objectPtr, objectType);#ifndef VIRTUAL_MID_LEVEL_IO    EndNamedType();    END_OBJECT_FRAME();#endif}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::WriteOther(TConstObjectPtr object,                                TTypeInfo typeInfo){    WriteOtherBegin(typeInfo);    WriteObject(object, typeInfo);    WriteOtherEnd(typeInfo);}void CObjectOStream::WriteOtherEnd(TTypeInfo /*typeInfo*/){}void CObjectOStream::EndContainer(void){}void CObjectOStream::BeginContainerElement(TTypeInfo /*elementType*/){}void CObjectOStream::EndContainerElement(void){}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::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::EndClass(void){}void CObjectOStream::EndClassMember(void){}void CObjectOStream::WriteClass(const CClassTypeInfo* classType,                                TConstObjectPtr classPtr){    BEGIN_OBJECT_FRAME2(eFrameClass, classType);    BeginClass(classType);        for ( CClassTypeInfo::CIterator i(classType); i.Valid(); ++i ) {        classType->GetMemberInfo(*i)->WriteMember(*this, classPtr);    }        EndClass();    END_OBJECT_FRAME();}void CObjectOStream::WriteClassMember(const CMemberId& memberId,                                      TTypeInfo memberType,                                      TConstObjectPtr memberPtr){    BEGIN_OBJECT_FRAME2(eFrameClassMember, memberId);    BeginClassMember(memberId);    WriteObject(memberPtr, memberType);    EndClassMember();    END_OBJECT_FRAME();}bool CObjectOStream::WriteClassMember(const CMemberId& memberId,                                      const CDelayBuffer& buffer){    if ( !buffer.HaveFormat(GetDataFormat()) )        return false;    BEGIN_OBJECT_FRAME2(eFrameClassMember, memberId);    BeginClassMember(memberId);    Write(buffer.GetSource());    EndClassMember();    END_OBJECT_FRAME();    return true;}void CObjectOStream::CopyClassRandom(const CClassTypeInfo* classType,                                     CObjectStreamCopier& copier){    BEGIN_OBJECT_2FRAMES_OF2(copier, eFrameClass, classType);    copier.In().BeginClass(classType);    BeginClass(classType);    vector<bool> 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::BeginChoice(const CChoiceTypeInfo* /*choiceType*/){}void CObjectOStream::EndChoice(void){}void CObjectOStream::EndChoiceVariant(void){}void CObjectOStream::WriteChoice(const CChoiceTypeInfo* choiceType,                                 TConstObjectPtr choicePtr){    BEGIN_OBJECT_FRAME2(eFrameChoice, choiceType);    BeginChoice(choiceType);    TMemberIndex index = choiceType->GetIndex(choicePtr);    const CVariantInfo* variantInfo = choiceType->GetVariantInfo(index);    BEGIN_OBJECT_FRAME2(eFrameChoiceVariant, variantInfo->GetId());    BeginChoiceVariant(choiceType, variantInfo->GetId());    variantInfo->WriteVariant(*this, choicePtr);    EndChoiceVariant();    END_OBJECT_FRAME();    EndChoice();    END_OBJECT_FRAME();}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();        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);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -