📄 serial.cpp
字号:
/* * =========================================================================== * PRODUCTION $Log: serial.cpp,v $ * PRODUCTION Revision 1000.1 2004/06/01 19:41:40 gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.27 * PRODUCTION * =========================================================================== *//* $Id: serial.cpp,v 1000.1 2004/06/01 19:41:40 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:* Serialization classes.** ---------------------------------------------------------------------------* $Log: serial.cpp,v $* Revision 1000.1 2004/06/01 19:41:40 gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.27** Revision 1.27 2004/05/17 21:03:03 gorelenk* Added include of PCH ncbi_pch.hpp** Revision 1.26 2003/08/14 20:03:58 vasilche* Avoid memory reallocation when reading over preallocated object.* Simplified CContainerTypeInfo iterators interface.** Revision 1.25 2003/04/10 20:13:39 vakatov* Rollback the "uninitialized member" verification -- it still needs to* be worked upon...** Revision 1.23 2003/03/06 21:48:41 grichenk* Removed type-info cleanup code** Revision 1.22 2002/11/14 21:01:11 gouriano* modified AddMember to use CClassTypeInfoBase** Revision 1.21 2002/11/05 17:45:10 grichenk* Reset object before reading** Revision 1.20 2002/10/25 15:05:44 vasilche* Moved more code to libxcser library.** Revision 1.19 2002/09/19 20:05:44 vasilche* Safe initialization of static mutexes** Revision 1.18 2002/09/05 21:22:51 vasilche* Added mutex for module names set** Revision 1.17 2001/08/24 13:48:02 grichenk* Prevented some memory leaks** Revision 1.16 2000/11/07 17:25:41 vasilche* Fixed encoding of XML:* removed unnecessary apostrophes in OCTET STRING* removed unnecessary content in NULL* Added module names to CTypeInfo and CEnumeratedTypeValues** Revision 1.15 2000/10/13 20:22:56 vasilche* Fixed warnings on 64 bit compilers.* Fixed missing typename in templates.** Revision 1.14 2000/09/26 17:38:23 vasilche* Fixed incomplete choiceptr implementation.* Removed temporary comments.** Revision 1.13 2000/09/18 20:00:25 vasilche* Separated CVariantInfo and CMemberInfo.* Implemented copy hooks.* All hooks now are stored in CTypeInfo/CMemberInfo/CVariantInfo.* Most type specific functions now are implemented via function pointers instead of virtual functions.** Revision 1.12 2000/09/01 13:16:20 vasilche* Implemented class/container/choice iterators.* Implemented CObjectStreamCopier for copying data without loading into memory.** Revision 1.11 2000/08/15 19:44:51 vasilche* Added Read/Write hooks:* CReadObjectHook/CWriteObjectHook for objects of specified type.* CReadClassMemberHook/CWriteClassMemberHook for specified members.* CReadChoiceVariantHook/CWriteChoiceVariant for specified choice variants.* CReadContainerElementHook/CWriteContainerElementsHook for containers.** Revision 1.10 2000/07/11 20:36:19 vasilche* File included in all generated headers made lighter.* Nonnecessary code moved to serialimpl.hpp.** Revision 1.9 2000/07/03 18:42:47 vasilche* Added interface to typeinfo via CObjectInfo and CConstObjectInfo.* Reduced header dependency.** Revision 1.8 2000/06/16 16:31:22 vasilche* Changed implementation of choices and classes info to allow use of the same classes in generated and user written classes.** Revision 1.7 2000/02/01 21:47:23 vasilche* Added CGeneratedChoiceTypeInfo for generated choice classes.* Added buffering to CObjectIStreamAsn.* Removed CMemberInfo subclasses.* Added support for DEFAULT/OPTIONAL members.** Revision 1.6 1999/12/28 21:04:25 vasilche* Removed three more implicit virtual destructors.** Revision 1.5 1999/12/17 19:05:04 vasilche* Simplified generation of GetTypeInfo methods.** Revision 1.4 1999/11/22 21:04:41 vasilche* Cleaned main interface headers. Now generated files should include serial/serialimpl.hpp and user code should include serial/serial.hpp which became might lighter.** Revision 1.3 1999/06/04 20:51:49 vasilche* First compilable version of serialization.** Revision 1.2 1999/05/19 19:56:57 vasilche* Commit just in case.** Revision 1.1 1999/03/25 19:12:04 vasilche* Beginning of serialization library.** ===========================================================================*/#include <ncbi_pch.hpp>#include <corelib/ncbistd.hpp>#include <corelib/ncbimtx.hpp>#include <serial/serial.hpp>#include <serial/serialimpl.hpp>#include <serial/serialbase.hpp>#include <serial/ptrinfo.hpp>#include <serial/classinfo.hpp>#include <serial/choice.hpp>#include <serial/objostr.hpp>#include <serial/objistr.hpp>#include <serial/memberlist.hpp>#include <corelib/ncbi_safe_static.hpp>BEGIN_NCBI_SCOPETTypeInfo CPointerTypeInfoGetTypeInfo(TTypeInfo type){ return CPointerTypeInfo::GetTypeInfo(type);}void Write(CObjectOStream& out, TConstObjectPtr object, const CTypeRef& type){ out.Write(object, type.Get());}void Read(CObjectIStream& in, TObjectPtr object, const CTypeRef& type){ //type.Get()->SetDefault(object); in.Read(object, type.Get());}DEFINE_STATIC_FAST_MUTEX(s_ModuleNameMutex);static const string& GetModuleName(const char* moduleName){ CFastMutexGuard GUARD(s_ModuleNameMutex); static CSafeStaticPtr< set<string> > s_ModuleNames; return *s_ModuleNames.Get().insert(moduleName).first;}void SetModuleName(CTypeInfo* info, const char* moduleName){ info->SetModuleName(GetModuleName(moduleName));}void SetModuleName(CEnumeratedTypeValues* info, const char* moduleName){ info->SetModuleName(GetModuleName(moduleName));}// add member functionsCMemberInfo* AddMember(CClassTypeInfoBase* info, const char* name, const void* member, const CTypeRef& r){ return info->AddMember(name, member, r);}CMemberInfo* AddMember(CClassTypeInfoBase* info, const char* name, const void* member, TTypeInfo t){ return AddMember(info, name, member, CTypeRef(t));}CMemberInfo* AddMember(CClassTypeInfoBase* info, const char* name, const void* member, TTypeInfoGetter f){ return AddMember(info, name, member, CTypeRef(f));}// two arguments:CMemberInfo* AddMember(CClassTypeInfoBase* info, const char* name, const void* member, TTypeInfoGetter1 f1, const CTypeRef& r){ return AddMember(info, name, member, CTypeRef(f1, r));}CMemberInfo* AddMember(CClassTypeInfoBase* info, const char* name, const void* member, TTypeInfoGetter1 f1, TTypeInfo t){ return AddMember(info, name, member, f1, CTypeRef(t));}CMemberInfo* AddMember(CClassTypeInfoBase* info, const char* name, const void* member, TTypeInfoGetter1 f1, TTypeInfoGetter f){ return AddMember(info, name, member, f1, CTypeRef(f));}// three arguments:CMemberInfo* AddMember(CClassTypeInfoBase* info, const char* name, const void* member, TTypeInfoGetter1 f2, TTypeInfoGetter1 f1, const CTypeRef& r){ return AddMember(info, name, member, f2, CTypeRef(f1, r));}CMemberInfo* AddMember(CClassTypeInfoBase* info, const char* name, const void* member, TTypeInfoGetter1 f2, TTypeInfoGetter1 f1, TTypeInfo t){ return AddMember(info, name, member, f2, f1, CTypeRef(t));}CMemberInfo* AddMember(CClassTypeInfoBase* info, const char* name, const void* member, TTypeInfoGetter1 f2, TTypeInfoGetter1 f1, TTypeInfoGetter f){ return AddMember(info, name, member, f2, f1, CTypeRef(f));}// four arguments:CMemberInfo* AddMember(CClassTypeInfoBase* info, const char* name, const void* member, TTypeInfoGetter1 f3, TTypeInfoGetter1 f2, TTypeInfoGetter1 f1, const CTypeRef& r){ return AddMember(info, name, member, f3, f2, CTypeRef(f1, r));}CMemberInfo* AddMember(CClassTypeInfoBase* info, const char* name, const void* member, TTypeInfoGetter1 f3,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -