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

📄 objistr.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    CContainerTypeInfo::CIterator iter;    bool old_element = containerType->InitIterator(iter, containerPtr);    while ( BeginContainerElement(elementType) ) {        if ( old_element ) {            elementType->ReadData(*this, containerType->GetElementPtr(iter));            old_element = containerType->NextElement(iter);        }        else {            containerType->AddElement(containerPtr, *this);        }        EndContainerElement();    }    if ( old_element ) {        containerType->EraseAllElements(iter);    }    END_OBJECT_FRAME();    EndContainer();    END_OBJECT_FRAME();}void CObjectIStream::SkipContainer(const CContainerTypeInfo* containerType){    BEGIN_OBJECT_FRAME2(eFrameArray, containerType);    BeginContainer(containerType);    TTypeInfo elementType = containerType->GetElementType();    BEGIN_OBJECT_FRAME2(eFrameArrayElement, elementType);    while ( BeginContainerElement(elementType) ) {        SkipObject(elementType);        EndContainerElement();    }    END_OBJECT_FRAME();    EndContainer();    END_OBJECT_FRAME();}void CObjectIStream::EndClass(void){}void CObjectIStream::EndClassMember(void){}void CObjectIStream::ReadClassRandom(const CClassTypeInfo* classType,                                     TObjectPtr classPtr){    BEGIN_OBJECT_FRAME2(eFrameClass, classType);    BeginClass(classType);    ReadClassRandomContentsBegin(classType);    TMemberIndex index;    while ( (index = BeginClassMember(classType)) != kInvalidMember ) {        ReadClassRandomContentsMember(classPtr);                EndClassMember();    }    ReadClassRandomContentsEnd();        EndClass();    END_OBJECT_FRAME();}void CObjectIStream::ReadClassSequential(const CClassTypeInfo* classType,                                         TObjectPtr classPtr){    TMemberIndex prevIndex = kInvalidMember;    BEGIN_OBJECT_FRAME2(eFrameClass, classType);    BeginClass(classType);        ReadClassSequentialContentsBegin(classType);    TMemberIndex index;    while ( (index = BeginClassMember(classType, *pos)) != kInvalidMember ) {        if ((prevIndex != kInvalidMember) && (prevIndex > index)) {            const CMemberInfo *mem_info = classType->GetMemberInfo(index);            if (mem_info->GetId().HaveNoPrefix()) {                UndoClassMember();                break;            }        }        prevIndex = index;        ReadClassSequentialContentsMember(classPtr);        EndClassMember();    }    ReadClassSequentialContentsEnd(classPtr);        EndClass();    END_OBJECT_FRAME();}void CObjectIStream::SkipClassRandom(const CClassTypeInfo* classType){    BEGIN_OBJECT_FRAME2(eFrameClass, classType);    BeginClass(classType);        SkipClassRandomContentsBegin(classType);    TMemberIndex index;    while ( (index = BeginClassMember(classType)) != kInvalidMember ) {        SkipClassRandomContentsMember();        EndClassMember();    }    SkipClassRandomContentsEnd();        EndClass();    END_OBJECT_FRAME();}void CObjectIStream::SkipClassSequential(const CClassTypeInfo* classType){    BEGIN_OBJECT_FRAME2(eFrameClass, classType);    BeginClass(classType);        SkipClassSequentialContentsBegin(classType);    TMemberIndex index;    while ( (index = BeginClassMember(classType, *pos)) != kInvalidMember ) {        SkipClassSequentialContentsMember();        EndClassMember();    }    SkipClassSequentialContentsEnd();        EndClass();    END_OBJECT_FRAME();}void CObjectIStream::BeginChoice(const CChoiceTypeInfo* /*choiceType*/){}void CObjectIStream::EndChoice(void){}void CObjectIStream::EndChoiceVariant(void){}void CObjectIStream::ReadChoice(const CChoiceTypeInfo* choiceType,                                TObjectPtr choicePtr){    BEGIN_OBJECT_FRAME2(eFrameChoice, choiceType);    BeginChoice(choiceType);    BEGIN_OBJECT_FRAME(eFrameChoiceVariant);    TMemberIndex index = BeginChoiceVariant(choiceType);    _ASSERT(index != kInvalidMember);    const CVariantInfo* variantInfo = choiceType->GetVariantInfo(index);    SetTopMemberId(variantInfo->GetId());    variantInfo->ReadVariant(*this, choicePtr);    EndChoiceVariant();    END_OBJECT_FRAME();    EndChoice();    END_OBJECT_FRAME();}void CObjectIStream::SkipChoice(const CChoiceTypeInfo* choiceType){    BEGIN_OBJECT_FRAME2(eFrameChoice, choiceType);    BeginChoice(choiceType);    BEGIN_OBJECT_FRAME(eFrameChoiceVariant);    TMemberIndex index = BeginChoiceVariant(choiceType);    if ( index == kInvalidMember )        ThrowError(fFormatError,"choice variant id expected");    const CVariantInfo* variantInfo = choiceType->GetVariantInfo(index);    SetTopMemberId(variantInfo->GetId());    variantInfo->SkipVariant(*this);    EndChoiceVariant();    END_OBJECT_FRAME();    EndChoice();    END_OBJECT_FRAME();}void CObjectIStream::ReadAlias(const CAliasTypeInfo* aliasType,                               TObjectPtr aliasPtr){    ReadNamedType(aliasType, aliasType->GetPointedType(),        aliasType->GetDataPtr(aliasPtr));}void CObjectIStream::SkipAlias(const CAliasTypeInfo* aliasType){    SkipNamedType(aliasType, aliasType->GetPointedType());}/////////////////////////////////////////////////////////////////////////// CObjectIStream::ByteBlock//CObjectIStream::ByteBlock::ByteBlock(CObjectIStream& in)    : m_Stream(in), m_KnownLength(false), m_Ended(false), m_Length(1){    in.BeginBytes(*this);}CObjectIStream::ByteBlock::~ByteBlock(void){    if ( !m_Ended ) {        try {            GetStream().Unended("byte block not fully read");        }        catch (...) {            ERR_POST("unended byte block");        }    }}void CObjectIStream::ByteBlock::End(void){    _ASSERT(!m_Ended);    if ( m_Length == 0 ) {        GetStream().EndBytes(*this);        m_Ended = true;    }}size_t CObjectIStream::ByteBlock::Read(void* dst, size_t needLength,                                       bool forceLength){    size_t length;    if ( KnownLength() ) {        if ( m_Length < needLength )            length = m_Length;        else            length = needLength;    }    else {        if ( m_Length == 0 )            length = 0;        else            length = needLength;    }        if ( length == 0 ) {        if ( forceLength && needLength != 0 )            GetStream().ThrowError(fReadError, "read fault");        return 0;    }    length = GetStream().ReadBytes(*this, static_cast<char*>(dst), length);    if ( KnownLength() )        m_Length -= length;    if ( forceLength && needLength != length )        GetStream().ThrowError(fReadError, "read fault");    return length;}/////////////////////////////////////////////////////////////////////////// CObjectIStream::CharBlock//CObjectIStream::CharBlock::CharBlock(CObjectIStream& in)    : m_Stream(in), m_KnownLength(false), m_Ended(false), m_Length(1){    in.BeginChars(*this);}CObjectIStream::CharBlock::~CharBlock(void){    if ( !m_Ended ) {        try {            GetStream().Unended("char block not fully read");        }        catch (...) {            ERR_POST("unended char block");        }    }}void CObjectIStream::CharBlock::End(void){    _ASSERT(!m_Ended);    if ( m_Length == 0 ) {        GetStream().EndChars(*this);        m_Ended = true;    }}size_t CObjectIStream::CharBlock::Read(char* dst, size_t needLength,                                       bool forceLength){    size_t length;    if ( KnownLength() ) {        if ( m_Length < needLength )            length = m_Length;        else            length = needLength;    }    else {        if ( m_Length == 0 )            length = 0;        else            length = needLength;    }        if ( length == 0 ) {        if ( forceLength && needLength != 0 )            GetStream().ThrowError(fReadError, "read fault");        return 0;    }    length = GetStream().ReadChars(*this, dst, length);    if ( KnownLength() )        m_Length -= length;    if ( forceLength && needLength != length )        GetStream().ThrowError(fReadError, "read fault");    return length;}void CObjectIStream::EndBytes(const ByteBlock& /*b*/){}void CObjectIStream::EndChars(const CharBlock& /*b*/){}Int1 CObjectIStream::ReadInt1(void){    Int4 data = ReadInt4();    Int1 ret = Int1(data);    if ( ret != data )        ThrowError(fOverflow, "integer overflow");    return ret;}Uint1 CObjectIStream::ReadUint1(void){    Uint4 data = ReadUint4();    Uint1 ret = Uint1(data);    if ( ret != data )        ThrowError(fOverflow, "integer overflow");    return ret;}Int2 CObjectIStream::ReadInt2(void){    Int4 data = ReadInt4();    Int2 ret = Int2(data);    if ( ret != data )        ThrowError(fOverflow, "integer overflow");    return ret;}Uint2 CObjectIStream::ReadUint2(void){    Uint4 data = ReadUint4();    Uint2 ret = Uint2(data);    if ( ret != data )        ThrowError(fOverflow, "integer overflow");    return ret;}Int4 CObjectIStream::ReadInt4(void){    Int8 data = ReadInt8();    Int4 ret = Int4(data);    if ( ret != data )        ThrowError(fOverflow, "integer overflow");    return ret;}Uint4 CObjectIStream::ReadUint4(void){    Uint8 data = ReadUint8();    Uint4 ret = Uint4(data);    if ( ret != data )        ThrowError(fOverflow, "integer overflow");    return ret;}float CObjectIStream::ReadFloat(void){    double data = ReadDouble();#if defined(FLT_MIN) && defined(FLT_MAX)    if ( data < FLT_MIN || data > FLT_MAX )        ThrowError(fOverflow, "float overflow");#endif    return float(data);}#if SIZEOF_LONG_DOUBLE != 0long double CObjectIStream::ReadLDouble(void){    return ReadDouble();}#endifchar* CObjectIStream::ReadCString(void){    string s;    ReadString(s);    return strdup(s.c_str());}void CObjectIStream::ReadStringStore(string& s){    ReadString(s);}void CObjectIStream::ReadString(string& s,                                CPackString& pack_string,                                EStringType type){    ReadString(s);    pack_string.Pack(s);}void CObjectIStream::SkipInt1(void){    SkipSNumber();}void CObjectIStream::SkipUint1(void){    SkipUNumber();}void CObjectIStream::SkipInt2(void){    SkipSNumber();}void CObjectIStream::SkipUint2(void){    SkipUNumber();}void CObjectIStream::SkipInt4(void){    SkipSNumber();}void CObjectIStream::SkipUint4(void){    SkipUNumber();}void CObjectIStream::SkipInt8(void){    SkipSNumber();}void CObjectIStream::SkipUint8(void){    SkipUNumber();}void CObjectIStream::SkipFloat(void){    SkipFNumber();}void CObjectIStream::SkipDouble(void){    SkipFNumber();}#if SIZEOF_LONG_DOUBLE != 0void CObjectIStream::SkipLDouble(void){    SkipFNumber();}#endifvoid CObjectIStream::SkipCString(void){    SkipString();}void CObjectIStream::SkipStringStore(void){    SkipString();}

⌨️ 快捷键说明

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