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

📄 objostrasn.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    StartBlock();}void CObjectOStreamAsn::EndContainer(void){    EndBlock();}void CObjectOStreamAsn::BeginContainerElement(TTypeInfo /*elementType*/){    NextElement();}#ifdef VIRTUAL_MID_LEVEL_IOvoid CObjectOStreamAsn::WriteContainer(const CContainerTypeInfo* cType,                                       TConstObjectPtr containerPtr){    BEGIN_OBJECT_FRAME2(eFrameArray, cType);    StartBlock();        CContainerTypeInfo::CConstIterator i;    if ( cType->InitIterator(i, containerPtr) ) {        TTypeInfo elementType = cType->GetElementType();        BEGIN_OBJECT_FRAME2(eFrameArrayElement, elementType);        do {            if (elementType->GetTypeFamily() == eTypeFamilyPointer) {                const CPointerTypeInfo* pointerType =                    CTypeConverter<CPointerTypeInfo>::SafeCast(elementType);                _ASSERT(pointerType->GetObjectPointer(cType->GetElementPtr(i)));                if ( !pointerType->GetObjectPointer(cType->GetElementPtr(i)) ) {                    ERR_POST(Warning << " NULL pointer found in container: skipping");                    continue;                }            }            NextElement();            WriteObject(cType->GetElementPtr(i), elementType);        } while ( cType->NextElement(i) );                END_OBJECT_FRAME();    }    EndBlock();    END_OBJECT_FRAME();}void CObjectOStreamAsn::CopyContainer(const CContainerTypeInfo* cType,                                      CObjectStreamCopier& copier){    BEGIN_OBJECT_FRAME_OF2(copier.In(), eFrameArray, cType);    copier.In().BeginContainer(cType);    StartBlock();    TTypeInfo elementType = cType->GetElementType();    BEGIN_OBJECT_2FRAMES_OF2(copier, eFrameArrayElement, elementType);    while ( copier.In().BeginContainerElement(elementType) ) {        NextElement();        CopyObject(elementType, copier);        copier.In().EndContainerElement();    }    END_OBJECT_2FRAMES_OF(copier);        EndBlock();    copier.In().EndContainer();    END_OBJECT_FRAME_OF(copier.In());}#endifvoid CObjectOStreamAsn::WriteMemberId(const CMemberId& id){    if ( !id.GetName().empty() ) {        m_Output.PutString(id.GetName());        m_Output.PutChar(' ');    }    else if ( id.HaveExplicitTag() ) {        m_Output.PutString("[" + NStr::IntToString(id.GetTag()) + "] ");    }}void CObjectOStreamAsn::BeginClass(const CClassTypeInfo* /*classInfo*/){    StartBlock();}void CObjectOStreamAsn::EndClass(void){    EndBlock();}void CObjectOStreamAsn::BeginClassMember(const CMemberId& id){    NextElement();    WriteMemberId(id);}#ifdef VIRTUAL_MID_LEVEL_IOvoid CObjectOStreamAsn::WriteClass(const CClassTypeInfo* classType,                                   TConstObjectPtr classPtr){    StartBlock();        for ( CClassTypeInfo::CIterator i(classType); i.Valid(); ++i ) {        classType->GetMemberInfo(*i)->WriteMember(*this, classPtr);    }        EndBlock();}void CObjectOStreamAsn::WriteClassMember(const CMemberId& memberId,                                         TTypeInfo memberType,                                         TConstObjectPtr memberPtr){    NextElement();    BEGIN_OBJECT_FRAME2(eFrameClassMember, memberId);        WriteMemberId(memberId);        WriteObject(memberPtr, memberType);    END_OBJECT_FRAME();}bool CObjectOStreamAsn::WriteClassMember(const CMemberId& memberId,                                         const CDelayBuffer& buffer){    if ( !buffer.HaveFormat(eSerial_AsnText) )        return false;    NextElement();    BEGIN_OBJECT_FRAME2(eFrameClassMember, memberId);        WriteMemberId(memberId);        Write(buffer.GetSource());    END_OBJECT_FRAME();    return true;}void CObjectOStreamAsn::CopyClassRandom(const CClassTypeInfo* classType,                                        CObjectStreamCopier& copier){    BEGIN_OBJECT_FRAME_OF2(copier.In(), eFrameClass, classType);    copier.In().BeginClass(classType);    StartBlock();    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());        if ( read[index] ) {            copier.DuplicatedMember(memberInfo);        }        else {            read[index] = true;            NextElement();            WriteMemberId(memberInfo->GetId());            memberInfo->CopyMember(copier);        }                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);        }    }    EndBlock();    copier.In().EndClass();    END_OBJECT_FRAME_OF(copier.In());}void CObjectOStreamAsn::CopyClassSequential(const CClassTypeInfo* classType,                                            CObjectStreamCopier& copier){    BEGIN_OBJECT_FRAME_OF2(copier.In(), eFrameClass, classType);    copier.In().BeginClass(classType);    StartBlock();    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());        for ( TMemberIndex i = *pos; i < index; ++i ) {            // init missing member            classType->GetMemberInfo(i)->CopyMissingMember(copier);        }        NextElement();        WriteMemberId(memberInfo->GetId());                memberInfo->CopyMember(copier);                pos.SetIndex(index + 1);        copier.In().EndClassMember();    }    END_OBJECT_2FRAMES_OF(copier);    // init all absent members    for ( ; pos.Valid(); ++pos ) {        classType->GetMemberInfo(*pos)->CopyMissingMember(copier);    }    EndBlock();    copier.In().EndClass();    END_OBJECT_FRAME_OF(copier.In());}#endifvoid CObjectOStreamAsn::BeginChoiceVariant(const CChoiceTypeInfo* ,                                           const CMemberId& id){    WriteMemberId(id);}#ifdef VIRTUAL_MID_LEVEL_IOvoid CObjectOStreamAsn::WriteChoice(const CChoiceTypeInfo* choiceType,                                    TConstObjectPtr choicePtr){    TMemberIndex index = choiceType->GetIndex(choicePtr);    const CVariantInfo* variantInfo = choiceType->GetVariantInfo(index);    BEGIN_OBJECT_FRAME2(eFrameChoiceVariant, variantInfo->GetId());    WriteMemberId(variantInfo->GetId());        variantInfo->WriteVariant(*this, choicePtr);    END_OBJECT_FRAME();}void CObjectOStreamAsn::CopyChoice(const CChoiceTypeInfo* choiceType,                                   CObjectStreamCopier& copier){    BEGIN_OBJECT_FRAME_OF2(copier.In(), eFrameChoice, 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);    copier.In().SetTopMemberId(variantInfo->GetId());    copier.Out().SetTopMemberId(variantInfo->GetId());    WriteMemberId(variantInfo->GetId());    variantInfo->CopyVariant(copier);    copier.In().EndChoiceVariant();    END_OBJECT_2FRAMES_OF(copier);    copier.In().EndChoice();    END_OBJECT_FRAME_OF(copier.In());}#endifvoid CObjectOStreamAsn::BeginBytes(const ByteBlock& ){    m_Output.PutChar('\'');}static const char HEX[] = "0123456789ABCDEF";void CObjectOStreamAsn::WriteBytes(const ByteBlock& ,                                   const char* bytes, size_t length){    while ( length-- > 0 ) {        char c = *bytes++;        m_Output.WrapAt(78, false);        m_Output.PutChar(HEX[(c >> 4) & 0xf]);        m_Output.PutChar(HEX[c & 0xf]);    }}void CObjectOStreamAsn::EndBytes(const ByteBlock& ){    m_Output.WrapAt(78, false);    m_Output.PutString("\'H");}void CObjectOStreamAsn::BeginChars(const CharBlock& ){    m_Output.PutChar('"');}void CObjectOStreamAsn::WriteChars(const CharBlock& ,                                   const char* chars, size_t length){    while ( length > 0 ) {        char c = *chars++;        FixVisibleChar(c, m_FixMethod, m_Output.GetLine());        --length;        m_Output.WrapAt(78, true);        m_Output.PutChar(c);        if ( c == '"' )            m_Output.PutChar('"');    }}void CObjectOStreamAsn::EndChars(const CharBlock& ){    m_Output.WrapAt(78, false);    m_Output.PutChar('"');}void CObjectOStreamAsn::WriteSeparator(void){    m_Output.PutString(GetSeparator());    FlushBuffer();}END_NCBI_SCOPE

⌨️ 快捷键说明

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