📄 objistr.hpp
字号:
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 + -