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

📄 objistr.hpp

📁 ncbi源码
💻 HPP
📖 第 1 页 / 共 3 页
字号:
    virtual string GetStackTrace(void) const;    virtual string GetPosition(void) const;    size_t GetStreamOffset(void) const;    void   SetStreamOffset(size_t pos);    void ThrowError1(const char* file, int line,                     TFailFlags fail, const char* message);    void ThrowError1(const char* file, int line,                     TFailFlags fail, const string& message);#define ThrowError(flag, mess) ThrowError1(__FILE__, __LINE__,flag,mess)    enum EFlags {        fFlagNone                = 0,        eFlagNone                = fFlagNone,        fFlagAllowNonAsciiChars  = 1 << 0,        eFlagAllowNonAsciiChars  = fFlagAllowNonAsciiChars    };    typedef int TFlags;    TFlags GetFlags(void) const;    TFlags SetFlags(TFlags flags);    TFlags ClearFlags(TFlags flags);    class ByteBlock    {    public:        ByteBlock(CObjectIStream& in);        ~ByteBlock(void);        void End(void);        CObjectIStream& GetStream(void) const;        size_t Read(void* dst, size_t length, bool forceLength = false);        bool KnownLength(void) const;        size_t GetExpectedLength(void) const;        void SetLength(size_t length);        void EndOfBlock(void);            private:        CObjectIStream& m_Stream;        bool m_KnownLength;        bool m_Ended;        size_t m_Length;        friend class CObjectIStream;    };    class CharBlock    {    public:        CharBlock(CObjectIStream& in);        ~CharBlock(void);        void End(void);        CObjectIStream& GetStream(void) const;        size_t Read(char* dst, size_t length, bool forceLength = false);        bool KnownLength(void) const;        size_t GetExpectedLength(void) const;        void SetLength(size_t length);        void EndOfBlock(void);            private:        CObjectIStream& m_Stream;        bool m_KnownLength;        bool m_Ended;        size_t m_Length;        friend class CObjectIStream;    };#if HAVE_NCBI_C    // ASN.1 interface    class AsnIo    {    public:        AsnIo(CObjectIStream& in, const string& rootTypeName);        ~AsnIo(void);        void End(void);        CObjectIStream& GetStream(void) const;        size_t Read(char* data, size_t length);                operator asnio*(void);        asnio* operator->(void);        const string& GetRootTypeName(void) const;    private:        CObjectIStream& m_Stream;        bool m_Ended;        string m_RootTypeName;        asnio* m_AsnIo;            public:        size_t m_Count;    };    friend class AsnIo;public:#endif        // mid level I/O    // named type    MLIOVIR void ReadNamedType(TTypeInfo namedTypeInfo,                               TTypeInfo typeInfo, TObjectPtr object);    MLIOVIR void SkipNamedType(TTypeInfo namedTypeInfo,                               TTypeInfo typeInfo);    // container    MLIOVIR void ReadContainer(const CContainerTypeInfo* containerType,                               TObjectPtr containerPtr);    MLIOVIR void SkipContainer(const CContainerTypeInfo* containerType);        // class    MLIOVIR void ReadClassSequential(const CClassTypeInfo* classType,                                     TObjectPtr classPtr);    MLIOVIR void ReadClassRandom(const CClassTypeInfo* classType,                                 TObjectPtr classPtr);    MLIOVIR void SkipClassSequential(const CClassTypeInfo* classType);    MLIOVIR void SkipClassRandom(const CClassTypeInfo* classType);    // choice    MLIOVIR void ReadChoice(const CChoiceTypeInfo* choiceType,                            TObjectPtr choicePtr);    MLIOVIR void SkipChoice(const CChoiceTypeInfo* choiceType);    // alias    MLIOVIR void ReadAlias(const CAliasTypeInfo* aliasType,                           TObjectPtr aliasPtr);    MLIOVIR void SkipAlias(const CAliasTypeInfo* aliasType);    // low level I/O    // named type (alias)    virtual void BeginNamedType(TTypeInfo namedTypeInfo);    virtual void EndNamedType(void);    // container    virtual void BeginContainer(const CContainerTypeInfo* containerType) = 0;    virtual void EndContainer(void) = 0;    virtual bool BeginContainerElement(TTypeInfo elementType) = 0;    virtual void EndContainerElement(void);    // class    virtual void BeginClass(const CClassTypeInfo* classInfo) = 0;    virtual void EndClass(void);    virtual TMemberIndex BeginClassMember(const CClassTypeInfo* classType) = 0;    virtual TMemberIndex BeginClassMember(const CClassTypeInfo* classType,                                          TMemberIndex pos) = 0;    virtual void EndClassMember(void);    virtual void UndoClassMember(void) {}    // choice    virtual void BeginChoice(const CChoiceTypeInfo* choiceType);    virtual void EndChoice(void);    virtual TMemberIndex BeginChoiceVariant(const CChoiceTypeInfo* choiceType) = 0;    virtual void EndChoiceVariant(void);    // byte block    virtual void BeginBytes(ByteBlock& block) = 0;    virtual size_t ReadBytes(ByteBlock& block, char* buffer, size_t count) = 0;    virtual void EndBytes(const ByteBlock& block);    // char block    virtual void BeginChars(CharBlock& block) = 0;    virtual size_t ReadChars(CharBlock& block, char* buffer, size_t count) = 0;    virtual void EndChars(const CharBlock& block);    // report error about unended block    void Unended(const string& msg);    // report error about unended object stack frame    virtual void UnendedFrame(void);    void SetPathReadObjectHook( const string& path, CReadObjectHook*        hook);    void SetPathSkipObjectHook( const string& path, CSkipObjectHook*        hook);    void SetPathReadMemberHook( const string& path, CReadClassMemberHook*   hook);    void SetPathSkipMemberHook( const string& path, CSkipClassMemberHook*   hook);    void SetPathReadVariantHook(const string& path, CReadChoiceVariantHook* hook);    void SetPathSkipVariantHook(const string& path, CSkipChoiceVariantHook* hook);    // report error about class members    void DuplicatedMember(const CMemberInfo* memberInfo);    void ExpectedMember(const CMemberInfo* memberInfo);    void StartDelayBuffer(void);    CRef<CByteSource> EndDelayBuffer(void);    void EndDelayBuffer(CDelayBuffer& buffer,                        const CItemInfo* itemInfo, TObjectPtr objectPtr);    void SetDiscardCurrObject(bool discard=true)        {m_DiscardCurrObject = discard;}    bool GetDiscardCurrObject(void) const        {return m_DiscardCurrObject;}    bool HaveMoreData(void);protected:    friend class CObjectStreamCopier;    // low level readers    pair<TObjectPtr, TTypeInfo> ReadObjectInfo(void);    virtual EPointerType ReadPointerType(void) = 0;    virtual TObjectIndex ReadObjectPointer(void) = 0;    virtual string ReadOtherPointer(void) = 0;    virtual void ReadOtherPointerEnd(void);    void RegisterObject(TTypeInfo typeInfo);    void RegisterObject(TObjectPtr object, TTypeInfo typeInfo);    const CReadObjectInfo& GetRegisteredObject(TObjectIndex index);    virtual void x_SetPathHooks(bool set);public:    // open helpers    static CObjectIStream* Create(ESerialDataFormat format);    static CObjectIStream* Create(ESerialDataFormat format,                                  CByteSource& source);    static CObjectIStream* Create(ESerialDataFormat format,                                  CByteSourceReader& reader);private:    static CRef<CByteSource> GetSource(ESerialDataFormat format,                                       const string& fileName,                                       TSerialOpenFlags openFlags = 0);    static CRef<CByteSource> GetSource(CNcbiIstream& inStream,                                       bool deleteInStream = false);    static CObjectIStream* CreateObjectIStreamAsn(void);    static CObjectIStream* CreateObjectIStreamAsnBinary(void);    static CObjectIStream* CreateObjectIStreamXml(void);protected:    CIStreamBuffer m_Input;    bool m_DiscardCurrObject;    ESerialDataFormat   m_DataFormat;    private:    ESerialVerifyData   m_VerifyData;    static ESerialVerifyData ms_VerifyDataDefault;    static ESerialVerifyData x_GetVerifyDataDefault(void);    ESerialSkipUnknown m_SkipUnknown;    static ESerialSkipUnknown ms_SkipUnknownDefault;    static ESerialSkipUnknown x_GetSkipUnknownDefault(void);    AutoPtr<CReadObjectList> m_Objects;    TFailFlags m_Fail;    TFlags m_Flags;    CStreamObjectPathHook<CReadObjectHook*>                m_PathReadObjectHooks;    CStreamObjectPathHook<CSkipObjectHook*>                m_PathSkipObjectHooks;    CStreamPathHook<CMemberInfo*, CReadClassMemberHook*>   m_PathReadMemberHooks;    CStreamPathHook<CMemberInfo*, CSkipClassMemberHook*>   m_PathSkipMemberHooks;    CStreamPathHook<CVariantInfo*,CReadChoiceVariantHook*> m_PathReadVariantHooks;    CStreamPathHook<CVariantInfo*,CSkipChoiceVariantHook*> m_PathSkipVariantHooks;public:    // hook support    CLocalHookSet<CReadObjectHook> m_ObjectHookKey;    CLocalHookSet<CReadClassMemberHook> m_ClassMemberHookKey;    CLocalHookSet<CReadChoiceVariantHook> m_ChoiceVariantHookKey;    CLocalHookSet<CSkipObjectHook> m_ObjectSkipHookKey;    CLocalHookSet<CSkipClassMemberHook> m_ClassMemberSkipHookKey;    CLocalHookSet<CSkipChoiceVariantHook> m_ChoiceVariantSkipHookKey;};inlinebool GoodVisibleChar(char c);char ReplaceVisibleChar(char c, EFixNonPrint fix_method, size_t at_line);inlinevoid FixVisibleChar(char& c, EFixNonPrint fix_method, size_t at_line = 0);/// Guard class for CObjectIStream::StartDelayBuffer/EndDelayBuffer////// CObjectIStream::StartDelayBuffer() should be follwed by /// CObjectIStream::EndDelayBuffer() call. If it's not called we have a delay /// buffer leak. This class works as an guard (or auto pointer) to avoid call/// leaks.class NCBI_XSERIAL_EXPORT CStreamDelayBufferGuard {public:    /// Construct instance on a given CObjectIStream object.    /// Call istr.StartDelayBuffer()    ///    /// @param istr  guard protected instance    CStreamDelayBufferGuard(CObjectIStream& istr);    ~CStreamDelayBufferGuard();    /// Redirect call to protected CObjectIStream    /// After this call guarding is finished.    CRef<CByteSource> EndDelayBuffer(void);    /// Redirect call to protected CObjectIStream    /// After this call guarding is finished.    void EndDelayBuffer(CDelayBuffer&    buffer,                        const CItemInfo* itemInfo,                         TObjectPtr       objectPtr);    private:    CStreamDelayBufferGuard(const CStreamDelayBufferGuard&);    CStreamDelayBufferGuard& operator=(const CStreamDelayBufferGuard& );private:    CObjectIStream*  m_ObjectIStream;};/* @} */#include <serial/objistr.inl>END_NCBI_SCOPE#endif  /* OBJISTR__HPP *//* ---------------------------------------------------------------------------* $Log: objistr.hpp,v $* Revision 1000.5  2004/06/01 19:38:53  gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.103** Revision 1.103  2004/04/30 13:28:40  gouriano* Remove obsolete function declarations** Revision 1.102  2004/03/23 15:39:52  gouriano* Added setup options for skipping unknown data members** Revision 1.101  2004/03/05 20:28:37  gouriano* make it possible to skip unknown data fields** Revision 1.100  2004/02/09 18:21:52  gouriano* enforced checking environment vars when setting initialization* verification parameters** Revision 1.99  2004/01/22 20:47:25  gouriano* Added new exception error code (eMissingValue)** Revision 1.98  2004/01/05 14:24:08  gouriano* Added possibility to set serialization hooks by stack path** Revision 1.97  2003/12/31 21:02:20  gouriano* added possibility to seek (when possible) in CObjectIStream** Revision 1.96  2003/11/26 19:59:37  vasilche* GetPosition() and GetDataFormat() methods now are implemented

⌨️ 快捷键说明

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