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

📄 objistrasn.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
        throw;    }}void CObjectIStreamAsn::SkipNull(void){    if ( SkipWhiteSpace() == 'N' &&         m_Input.PeekCharNoEOF(1) == 'U' &&         m_Input.PeekCharNoEOF(2) == 'L' &&         m_Input.PeekCharNoEOF(3) == 'L' &&         !IdChar(m_Input.PeekCharNoEOF(4)) ) {        m_Input.SkipChars(4);        return;    }    ThrowError(fFormatError, "NULL expected");}void CObjectIStreamAsn::SkipByteBlock(void){    Expect('\'', true);    for ( ;; ) {        char c = GetChar();        if ( c >= '0' && c <= '9' ) {            continue;        }        else if ( c >= 'A' && c <= 'Z' ) {            continue;        }        else if ( c >= 'a' && c <= 'z' ) {            continue;        }        else if ( c == '\'' ) {            break;        }        else if ( c == '\r' || c == '\n' ) {            SkipEndOfLine(c);        }        else {            m_Input.UngetChar(c);            ThrowError(fFormatError, "bad char in octet string: #"                + NStr::IntToString(c));        }    }    Expect('H', true);}void CObjectIStreamAsn::StartBlock(void){    Expect('{', true);    m_BlockStart = true;}bool CObjectIStreamAsn::NextElement(void){    char c = SkipWhiteSpace();    if ( m_BlockStart ) {        // first element        m_BlockStart = false;        return c != '}';    }    else {        // next element        if ( c == ',' ) {            m_Input.SkipChar();            return true;        }        else if ( c != '}' )            ThrowError(fFormatError, "',' or '}' expected");        return false;    }}void CObjectIStreamAsn::EndBlock(void){    Expect('}');}void CObjectIStreamAsn::BeginContainer(const CContainerTypeInfo* /*cType*/){    StartBlock();}void CObjectIStreamAsn::EndContainer(void){    EndBlock();}bool CObjectIStreamAsn::BeginContainerElement(TTypeInfo /*elementType*/){    return NextElement();}#ifdef VIRTUAL_MID_LEVEL_IOvoid CObjectIStreamAsn::ReadContainer(const CContainerTypeInfo* contType,                                      TObjectPtr contPtr){    StartBlock();        BEGIN_OBJECT_FRAME(eFrameArrayElement);    CContainerTypeInfo::CIterator iter;    bool old_element = contType->InitIterator(iter, contPtr);    TTypeInfo elementType = contType->GetElementType();    while ( NextElement() ) {        if ( old_element ) {            elementType->ReadData(*this, contType->GetElementPtr(iter));            old_element = contType->NextElement(iter);        }        else {            contType->AddElement(contPtr, *this);        }    }    if ( old_element ) {        contType->EraseAllElements(iter);    }    END_OBJECT_FRAME();    EndBlock();}void CObjectIStreamAsn::SkipContainer(const CContainerTypeInfo* contType){    StartBlock();    TTypeInfo elementType = contType->GetElementType();    BEGIN_OBJECT_FRAME(eFrameArrayElement);    while ( NextElement() ) {        SkipObject(elementType);    }    END_OBJECT_FRAME();    EndBlock();}#endifvoid CObjectIStreamAsn::BeginClass(const CClassTypeInfo* /*classInfo*/){    StartBlock();}void CObjectIStreamAsn::EndClass(void){    EndBlock();}void CObjectIStreamAsn::UnexpectedMember(const CLightString& id,                                         const CItemsInfo& items){    string message =        "\""+string(id)+"\": unexpected member, should be one of: ";    for ( CItemsInfo::CIterator i(items); i.Valid(); ++i ) {        message += '\"' + items.GetItemInfo(i)->GetId().ToString() + "\" ";    }    ThrowError(fFormatError, message);}TMemberIndexCObjectIStreamAsn::BeginClassMember(const CClassTypeInfo* classType){    if ( !NextElement() )        return kInvalidMember;    CLightString id = ReadMemberId(SkipWhiteSpace());    TMemberIndex index = GetMemberIndex(classType, id);    if ( index == kInvalidMember ) {        if (GetSkipUnknownMembers() == eSerialSkipUnknown_Yes) {            string value;            ReadAnyContent(value);            return BeginClassMember(classType);        } else {            UnexpectedMember(id, classType->GetMembers());        }    }    return index;}TMemberIndexCObjectIStreamAsn::BeginClassMember(const CClassTypeInfo* classType,                                    TMemberIndex pos){    if ( !NextElement() )        return kInvalidMember;    CLightString id = ReadMemberId(SkipWhiteSpace());    TMemberIndex index = GetMemberIndex(classType, id, pos);    if ( index == kInvalidMember ) {        if (GetSkipUnknownMembers() == eSerialSkipUnknown_Yes) {            string value;            ReadAnyContent(value);            return BeginClassMember(classType, pos);        } else {            UnexpectedMember(id, classType->GetMembers());        }    }    return index;}#ifdef VIRTUAL_MID_LEVEL_IOvoid CObjectIStreamAsn::ReadClassRandom(const CClassTypeInfo* classType,                                        TObjectPtr classPtr){    StartBlock();        ReadClassRandomContentsBegin(classType);    TMemberIndex index;    while ( (index = BeginClassMember(classType)) != kInvalidMember ) {        ReadClassRandomContentsMember(classPtr);    }    ReadClassRandomContentsEnd();        EndBlock();}void CObjectIStreamAsn::ReadClassSequential(const CClassTypeInfo* classType,                                            TObjectPtr classPtr){    StartBlock();        ReadClassSequentialContentsBegin(classType);    TMemberIndex index;    while ( (index = BeginClassMember(classType,*pos)) != kInvalidMember ) {        ReadClassSequentialContentsMember(classPtr);    }    ReadClassSequentialContentsEnd(classPtr);        EndBlock();}void CObjectIStreamAsn::SkipClassRandom(const CClassTypeInfo* classType){    StartBlock();        SkipClassRandomContentsBegin(classType);    TMemberIndex index;    while ( (index = BeginClassMember(classType)) != kInvalidMember ) {        SkipClassRandomContentsMember();    }    SkipClassRandomContentsEnd();        EndBlock();}void CObjectIStreamAsn::SkipClassSequential(const CClassTypeInfo* classType){    StartBlock();        SkipClassSequentialContentsBegin(classType);    TMemberIndex index;    while ( (index = BeginClassMember(classType,*pos)) != kInvalidMember ) {        SkipClassSequentialContentsMember();    }    SkipClassSequentialContentsEnd();        EndBlock();}#endifTMemberIndex CObjectIStreamAsn::BeginChoiceVariant(const CChoiceTypeInfo* choiceType){    CLightString id = ReadMemberId(SkipWhiteSpace());    if ( id.Empty() )        ThrowError(fFormatError, "choice variant id expected");    TMemberIndex index = GetChoiceIndex(choiceType, id);    if ( index == kInvalidMember )        UnexpectedMember(id, choiceType->GetVariants());    return index;}#ifdef VIRTUAL_MID_LEVEL_IOvoid CObjectIStreamAsn::ReadChoice(const CChoiceTypeInfo* choiceType,                                   TObjectPtr choicePtr){    TMemberIndex index = BeginChoiceVariant(choiceType);    const CVariantInfo* variantInfo = choiceType->GetVariantInfo(index);    BEGIN_OBJECT_FRAME2(eFrameChoiceVariant, variantInfo->GetId());    variantInfo->ReadVariant(*this, choicePtr);    END_OBJECT_FRAME();}void CObjectIStreamAsn::SkipChoice(const CChoiceTypeInfo* choiceType){    TMemberIndex index = BeginChoiceVariant(choiceType);    const CVariantInfo* variantInfo = choiceType->GetVariantInfo(index);    BEGIN_OBJECT_FRAME2(eFrameChoiceVariant, variantInfo->GetId());    variantInfo->SkipVariant(*this);    END_OBJECT_FRAME();}#endifvoid CObjectIStreamAsn::BeginBytes(ByteBlock& ){    Expect('\'', true);}int CObjectIStreamAsn::GetHexChar(void){    for ( ;; ) {        char c = GetChar();        if ( c >= '0' && c <= '9' ) {            return c - '0';        }        else if ( c >= 'A' && c <= 'F' ) {            return c - 'A' + 10;        }        else if ( c >= 'a' && c <= 'f' ) {            return c - 'a' + 10;        }        switch ( c ) {        case '\'':            return -1;        case '\r':        case '\n':            SkipEndOfLine(c);            break;        default:            m_Input.UngetChar(c);            ThrowError(fFormatError, "bad char in octet string: #"                + NStr::IntToString(c));        }    }}size_t CObjectIStreamAsn::ReadBytes(ByteBlock& block,                                    char* dst, size_t length){    size_t count = 0;    while ( length-- > 0 ) {        int c1 = GetHexChar();        if ( c1 < 0 ) {            block.EndOfBlock();            return count;        }        int c2 = GetHexChar();        if ( c2 < 0 ) {            *dst++ = c1 << 4;            count++;            block.EndOfBlock();            return count;        }        else {            *dst++ = (c1 << 4) | c2;            count++;        }    }    return count;}void CObjectIStreamAsn::EndBytes(const ByteBlock& ){    Expect('H');}void CObjectIStreamAsn::BeginChars(CharBlock& ){    Expect('\"', true);}size_t CObjectIStreamAsn::ReadChars(CharBlock& block,                                    char* dst, size_t length){    size_t count = 0;    try {        while (length-- > 0) {            char c = m_Input.GetChar();            switch ( c ) {            case '\r':            case '\n':                break;            case '\"':                if ( m_Input.PeekCharNoEOF() == '\"' ) {                    m_Input.SkipChar();                    dst[count++] = c;                }                else {                    // end of string                    // Check the string for non-printable characters                    EFixNonPrint fix_method = m_FixMethod;                    if ( fix_method != eFNP_Allow ) {                        size_t line = m_Input.GetLine();                        for (size_t i = 0;  i < count;  i++) {                            FixVisibleChar(dst[i], fix_method, line);                        }                    }                    block.EndOfBlock();                    return count;                }                break;            default:                // ok: append char                {                    dst[count++] = c;                }                break;            }        }    }    catch ( CEofException& ) {        UnendedString(m_Input.GetLine());        throw;    }    return count;}

⌨️ 快捷键说明

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