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

📄 objostr.hpp

📁 ncbi源码
💻 HPP
📖 第 1 页 / 共 2 页
字号:
/* * =========================================================================== * PRODUCTION $Log: objostr.hpp,v $ * PRODUCTION Revision 1000.4  2004/06/01 19:39:02  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.86 * PRODUCTION * =========================================================================== */#ifndef OBJOSTR__HPP#define OBJOSTR__HPP/*  $Id: objostr.hpp,v 1000.4 2004/06/01 19:39:02 gouriano Exp $* ===========================================================================**                            PUBLIC DOMAIN NOTICE*               National Center for Biotechnology Information**  This software/database is a "United States Government Work" under the*  terms of the United States Copyright Act.  It was written as part of*  the author's official duties as a United States Government employee and*  thus cannot be copyrighted.  This software/database is freely available*  to the public for use. The National Library of Medicine and the U.S.*  Government have not placed any restriction on its use or reproduction.**  Although all reasonable efforts have been taken to ensure the accuracy*  and reliability of the software and data, the NLM and the U.S.*  Government do not and cannot warrant the performance or results that*  may be obtained by using this software or data. The NLM and the U.S.*  Government disclaim all warranties, express or implied, including*  warranties of performance, merchantability or fitness for any particular*  purpose.**  Please cite the author in any work or product based on this material.** ===========================================================================** Author: Eugene Vasilchenko** File Description:*   !!! PUT YOUR DESCRIPTION HERE !!!*/#include <corelib/ncbistd.hpp>#include <corelib/ncbifloat.h>#include <corelib/ncbiobj.hpp>#include <corelib/ncbiutil.hpp>#include <serial/serialdef.hpp>#include <serial/typeinfo.hpp>#include <util/strbuffer.hpp>#include <serial/objlist.hpp>#include <serial/objstack.hpp>#include <serial/hookdatakey.hpp>#include <serial/objhook.hpp>#include <serial/pathhook.hpp>/** @addtogroup ObjStreamSupport * * @{ */struct asnio;BEGIN_NCBI_SCOPEclass CMemberId;class CDelayBuffer;class CConstObjectInfo;class CConstObjectInfoMI;class CWriteObjectHook;class CWriteClassMembersHook;class CWriteChoiceVariantHook;class CContainerTypeInfo;class CClassTypeInfo;class CChoiceTypeInfo;class CObjectStreamCopier;class CAliasTypeInfo;class CWriteObjectInfo;class CWriteObjectList;class NCBI_XSERIAL_EXPORT CObjectOStream : public CObjectStack{public:    typedef size_t TObjectIndex;    // open methods    static CObjectOStream* Open(ESerialDataFormat format,                                const string& fileName,                                TSerialOpenFlags openFlags = 0);    static CObjectOStream* Open(const string& fileName,                                ESerialDataFormat format);    static CObjectOStream* Open(ESerialDataFormat format,                                CNcbiOstream& outStream,                                bool deleteOutStream = false);    void Close(void);    void ResetLocalHooks(void);    // when enabled, stream verifies data on output    // and throws CUnassignedMember exception    // for this particular stream    void SetVerifyData(ESerialVerifyData verify);    ESerialVerifyData GetVerifyData(void) const;    // for streams created by the current thread    static  void SetVerifyDataThread(ESerialVerifyData verify);    // for streams created by the current process    static  void SetVerifyDataGlobal(ESerialVerifyData verify);    void SetUseIndentation(bool set);    bool GetUseIndentation(void) const;    // constructorsprotected:    CObjectOStream(ESerialDataFormat format,                   CNcbiOstream& out, bool deleteOut = false);public:    virtual ~CObjectOStream(void);    // get data format    ESerialDataFormat GetDataFormat(void) const;    // USER INTERFACE    // flush buffer    void FlushBuffer(void);    // flush buffer and underlying stream    void Flush(void);    // root writer    void Write(const CConstObjectInfo& object);    void Write(TConstObjectPtr object, TTypeInfo type);    void Write(TConstObjectPtr object, const CTypeRef& type);    // subtree writer    void WriteObject(const CConstObjectInfo& object);    void WriteObject(TConstObjectPtr object, TTypeInfo typeInfo);    void CopyObject(TTypeInfo objectType,                    CObjectStreamCopier& copier);        void WriteSeparateObject(const CConstObjectInfo& object);    // internal writer    void WriteExternalObject(TConstObjectPtr object, TTypeInfo typeInfo);    // member interface    void WriteClassMember(const CConstObjectInfoMI& member);    // choice variant interface    void WriteChoiceVariant(const CConstObjectInfoCV& member);    // Separator management    string GetSeparator(void) const;    void SetSeparator(const string sep);    // Controls auto-output of the separator after each object. By default    // this flag is true for text ASN.1 streams only.    bool GetAutoSeparator(void);    void SetAutoSeparator(bool value);    CObjectOStream& operator<< (CObjectOStream& (*mod)(CObjectOStream& os));    friend CObjectOStream& Separator(CObjectOStream& os);    // END OF USER INTERFACE    // low level writers    // root object    virtual void WriteFileHeader(TTypeInfo type);    virtual void EndOfWrite(void);    // std C types readers    // bool    void WriteStd(const bool& data);    // char    void WriteStd(const char& data);    // integer number    void WriteStd(const signed char& data);    void WriteStd(const unsigned char& data);    void WriteStd(const short& data);    void WriteStd(const unsigned short& data);    void WriteStd(const int& data);    void WriteStd(const unsigned int& data);#if SIZEOF_LONG == 4    void WriteStd(const long& data);    void WriteStd(const unsigned long& data);#endif    void WriteStd(const Int8& data);    void WriteStd(const Uint8& data);    // float number    void WriteStd(const float& data);    void WriteStd(const double& data);#if SIZEOF_LONG_DOUBLE != 0    void WriteStd(const long double& data);#endif    // string    void WriteStd(const string& data);    void WriteStd(const CStringUTF8& data);    // C string; VisualAge can't cope with refs here.    void WriteStd(const char* const data);    void WriteStd(char* const data);    // primitive writers    // bool    virtual void WriteBool(bool data) = 0;    // char    virtual void WriteChar(char data) = 0;    // integer numbers    virtual void WriteInt4(Int4 data) = 0;    virtual void WriteUint4(Uint4 data) = 0;    virtual void WriteInt8(Int8 data) = 0;    virtual void WriteUint8(Uint8 data) = 0;    // float numbers    virtual void WriteFloat(float data);    virtual void WriteDouble(double data) = 0;#if SIZEOF_LONG_DOUBLE != 0    virtual void WriteLDouble(long double data);#endif    // string    virtual void WriteString(const string& str,                             EStringType type = eStringTypeVisible) = 0;    virtual void CopyString(CObjectIStream& in) = 0;    // StringStore    virtual void WriteStringStore(const string& data) = 0;    virtual void CopyStringStore(CObjectIStream& in) = 0;    // C string    virtual void WriteCString(const char* str) = 0;    // NULL    virtual void WriteNull(void) = 0;    // enum    virtual void WriteEnum(const CEnumeratedTypeValues& values,                           TEnumValueType value) = 0;    virtual void CopyEnum(const CEnumeratedTypeValues& values,                          CObjectIStream& in) = 0;    // any content object    virtual void WriteAnyContentObject(const CAnyContentObject& obj) = 0;    virtual void CopyAnyContentObject(CObjectIStream& in) = 0;    // delayed buffer    virtual bool Write(CByteSource& source);    // low level readers:    enum EFailFlags {        fNoError       = 0,             eNoError     = fNoError,        fEOF           = 1 << 0,        eEOF         = fEOF,        fWriteError    = 1 << 1,        eWriteError  = fWriteError,        fFormatError   = 1 << 2,        eFormatError = fFormatError,        fOverflow      = 1 << 3,        eOverflow    = fOverflow,        fInvalidData   = 1 << 4,        eInvalidData = fInvalidData,        fIllegalCall   = 1 << 5,        eIllegalCall = fIllegalCall,        fFail          = 1 << 6,        eFail        = fFail,        fNotOpen       = 1 << 7,        eNotOpen     = fNotOpen,        fUnassigned    = 1 << 8,        eUnassigned  = fUnassigned    };    typedef int TFailFlags;    bool fail(void) const;    TFailFlags GetFailFlags(void) const;    TFailFlags SetFailFlagsNoError(TFailFlags flags);    TFailFlags SetFailFlags(TFailFlags flags, const char* message);    TFailFlags ClearFailFlags(TFailFlags flags);    bool InGoodState(void);    virtual string GetStackTrace(void) const;    virtual string GetPosition(void) const;    size_t GetStreamOffset(void) const;    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);    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)    class ByteBlock;    friend class ByteBlock;    class ByteBlock    {    public:        ByteBlock(CObjectOStream& out, size_t length);        ~ByteBlock(void);        CObjectOStream& GetStream(void) const;        size_t GetLength(void) const;        void Write(const void* bytes, size_t length);        void End(void);    private:        CObjectOStream& m_Stream;        size_t m_Length;        bool m_Ended;    };    class CharBlock;    friend class CharBlock;    class NCBI_XSERIAL_EXPORT CharBlock    {    public:        CharBlock(CObjectOStream& out, size_t length);        ~CharBlock(void);        CObjectOStream& GetStream(void) const;        size_t GetLength(void) const;        void Write(const char* chars, size_t length);        void End(void);    private:        CObjectOStream& m_Stream;        size_t m_Length;        bool m_Ended;    };#if HAVE_NCBI_C    class AsnIo    {    public:        AsnIo(CObjectOStream& out, const string& rootTypeName);        ~AsnIo(void);        CObjectOStream& GetStream(void) const;        void Write(const char* data, size_t length);        void End(void);        operator asnio*(void);        asnio* operator->(void);        const string& GetRootTypeName(void) const;    private:        CObjectOStream& m_Stream;        string m_RootTypeName;        asnio* m_AsnIo;        bool m_Ended;    public:        size_t m_Count;    };    friend class AsnIo;public:#endif    // mid level I/O    // named type (alias)    MLIOVIR void WriteNamedType(TTypeInfo namedTypeInfo,                                TTypeInfo typeInfo, TConstObjectPtr object);    // container    MLIOVIR void WriteContainer(const CContainerTypeInfo* containerType,                                TConstObjectPtr containerPtr);    void WriteContainerElement(const CConstObjectInfo& element);    // class    void WriteClassRandom(const CClassTypeInfo* classType,                          TConstObjectPtr classPtr);    void WriteClassSequential(const CClassTypeInfo* classType,                              TConstObjectPtr classPtr);    MLIOVIR void WriteClass(const CClassTypeInfo* objectType,                            TConstObjectPtr objectPtr);    MLIOVIR void WriteClassMember(const CMemberId& memberId,                                  TTypeInfo memberType,                                  TConstObjectPtr memberPtr);    MLIOVIR bool WriteClassMember(const CMemberId& memberId,                                  const CDelayBuffer& buffer);    // choice    MLIOVIR void WriteChoice(const CChoiceTypeInfo* choiceType,                             TConstObjectPtr choicePtr);    // alias    MLIOVIR void WriteAlias(const CAliasTypeInfo* aliasType,                            TConstObjectPtr aliasPtr);    // COPY    // named type (alias)    MLIOVIR void CopyNamedType(TTypeInfo namedTypeInfo,                               TTypeInfo typeInfo,                               CObjectStreamCopier& copier);    // container    MLIOVIR void CopyContainer(const CContainerTypeInfo* containerType,                               CObjectStreamCopier& copier);    // class    MLIOVIR void CopyClassRandom(const CClassTypeInfo* objectType,                                 CObjectStreamCopier& copier);    MLIOVIR void CopyClassSequential(const CClassTypeInfo* objectType,                                     CObjectStreamCopier& copier);    // choice    MLIOVIR void CopyChoice(const CChoiceTypeInfo* choiceType,                            CObjectStreamCopier& copier);    // alias    MLIOVIR void CopyAlias(const CAliasTypeInfo* AliasType,                            CObjectStreamCopier& copier);    // low level I/O    // named type    virtual void BeginNamedType(TTypeInfo namedTypeInfo);    virtual void EndNamedType(void);    // container    virtual void BeginContainer(const CContainerTypeInfo* containerType) = 0;    virtual void EndContainer(void);    virtual void BeginContainerElement(TTypeInfo elementType);    virtual void EndContainerElement(void);

⌨️ 快捷键说明

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