📄 serialbase.hpp
字号:
public: CStdAliasBase(void) { this->m_Data = 0; } explicit CStdAliasBase(const TStd& value) : TParent(value) {}};template <class TString>class CStringAliasBase : public CAliasBase<TString>{ typedef CAliasBase<TString> TParent; typedef CStringAliasBase<TString> TThis;public: CStringAliasBase(void) { } explicit CStringAliasBase(const TString& value) : TParent(value) {}};///////////////////////////////////////////////////////////////////////// Assignment and comparison for serializable objects//template <class C>C& SerialAssign(C& dest, const C& src, ESerialRecursionMode how = eRecursive){ if ( typeid(src) != typeid(dest) ) { ERR_POST(Fatal << "SerialAssign() -- Assignment of incompatible types: " << typeid(dest).name() << " = " << typeid(src).name()); } C::GetTypeInfo()->Assign(&dest, &src, how); return dest;}template <class C>bool SerialEquals(const C& object1, const C& object2, ESerialRecursionMode how = eRecursive){ if ( typeid(object1) != typeid(object2) ) { ERR_POST(Fatal << "SerialAssign() -- Can not compare types: " << typeid(object1).name() << " == " << typeid(object2).name()); } return C::GetTypeInfo()->Equals(&object1, &object2, how);}// create on heap a clone of the source objecttemplate <typename C>C* SerialClone(const C& src){ typename C::TTypeInfo type = C::GetTypeInfo(); TObjectPtr obj = type->Create(); type->Assign(obj, &src); return static_cast<C*>(obj);}///////////////////////////////////////////////////////////////////////////////// I/O stream manipulators and helpers for serializable objects//// FormattingNCBI_XSERIAL_EXPORT CNcbiIos& MSerial_AsnText(CNcbiIos& io);NCBI_XSERIAL_EXPORT CNcbiIos& MSerial_AsnBinary(CNcbiIos& io);NCBI_XSERIAL_EXPORT CNcbiIos& MSerial_Xml(CNcbiIos& io);// Class member assignment verificationNCBI_XSERIAL_EXPORT CNcbiIos& MSerial_VerifyDefault(CNcbiIos& io);NCBI_XSERIAL_EXPORT CNcbiIos& MSerial_VerifyNo(CNcbiIos& io);NCBI_XSERIAL_EXPORT CNcbiIos& MSerial_VerifyYes(CNcbiIos& io);NCBI_XSERIAL_EXPORT CNcbiIos& MSerial_VerifyDefValue(CNcbiIos& io);// Input/outputNCBI_XSERIAL_EXPORT CNcbiOstream& operator<< (CNcbiOstream& str, const CSerialObject& obj);NCBI_XSERIAL_EXPORT CNcbiIstream& operator>> (CNcbiIstream& str, CSerialObject& obj);END_NCBI_SCOPE// these methods must be defined in root namespace so they have prefix NCBISER// default functions do nothingtemplate<class CInfo>inlinevoid NCBISERSetPostRead(const void* /*object*/, CInfo* /*info*/){}template<class CInfo>inlinevoid NCBISERSetPreWrite(const void* /*object*/, CInfo* /*info*/){}// define for declaring specific function#define NCBISER_HAVE_POST_READ(Class) \template<class CInfo> \inline \void NCBISERSetPostRead(const Class* /*object*/, CInfo* info) \{ \ NCBI_NS_NCBI::SetPostRead \ (info, &NCBI_NS_NCBI::CClassPostReadPreWrite<Class>::PostRead);\}#define NCBISER_HAVE_PRE_WRITE(Class) \template<class CInfo> \inline \void NCBISERSetPreWrite(const Class* /*object*/, CInfo* info) \{ \ NCBI_NS_NCBI::SetPreWrite \ (info, &NCBI_NS_NCBI::CClassPostReadPreWrite<Class>::PreWrite);\}#define DECLARE_INTERNAL_TYPE_INFO() \ typedef const NCBI_NS_NCBI::CTypeInfo* TTypeInfo; \ virtual TTypeInfo GetThisTypeInfo(void) const { return GetTypeInfo(); } \ static TTypeInfo GetTypeInfo(void)#define ENUM_METHOD_NAME(EnumName) \ NCBI_NAME2(GetTypeInfo_enum_,EnumName)#define DECLARE_ENUM_INFO(EnumName) \ const NCBI_NS_NCBI::CEnumeratedTypeValues* ENUM_METHOD_NAME(EnumName)(void)#define DECLARE_INTERNAL_ENUM_INFO(EnumName) \ static DECLARE_ENUM_INFO(EnumName)#define DECLARE_STD_ALIAS_TYPE_INFO() \ static const NCBI_NS_NCBI::CTypeInfo* GetTypeInfo(void)#if HAVE_NCBI_C#define ASN_STRUCT_NAME(AsnStructName) NCBI_NAME2(struct_, AsnStructName)#define ASN_STRUCT_METHOD_NAME(AsnStructName) \ NCBI_NAME2(GetTypeInfo_struct_,AsnStructName)#define DECLARE_ASN_TYPE_INFO(AsnStructName) \ const NCBI_NS_NCBI::CTypeInfo* ASN_STRUCT_METHOD_NAME(AsnStructName)(void)#define DECLARE_ASN_STRUCT_INFO(AsnStructName) \ struct ASN_STRUCT_NAME(AsnStructName); \ DECLARE_ASN_TYPE_INFO(AsnStructName); \ inline \ const NCBI_NS_NCBI::CTypeInfo* \ GetAsnStructTypeInfo(const ASN_STRUCT_NAME(AsnStructName)* ) \ { \ return ASN_STRUCT_METHOD_NAME(AsnStructName)(); \ } \ struct ASN_STRUCT_NAME(AsnStructName)#define DECLARE_ASN_CHOICE_INFO(AsnChoiceName) \ DECLARE_ASN_TYPE_INFO(AsnChoiceName)#endif#endif /* SERIALBASE__HPP *//* @} *//* ---------------------------------------------------------------------------* $Log: serialbase.hpp,v $* Revision 1000.3 2004/06/01 19:39:07 gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.32** Revision 1.32 2004/05/22 20:19:17 jcherry* Made CAliasBase::TThis typedef public** Revision 1.31 2004/04/26 16:40:59 ucko* Tweak for GCC 3.4 compatibility.** Revision 1.30 2004/03/25 15:56:28 gouriano* Added possibility to copy and compare serial object non-recursively** Revision 1.29 2004/02/02 14:39:52 vasilche* Removed call to string::resize(0) in constructor - it's empty by default.** Revision 1.28 2004/01/20 14:58:46 dicuccio* FIxed use of export specifiers - located before return type of function** Revision 1.27 2004/01/16 21:50:41 gouriano* added export specifiers to i/o manipulators** Revision 1.25 2003/11/13 14:06:44 gouriano* Elaborated data verification on read/write/get to enable skipping mandatory class data members** Revision 1.24 2003/10/21 13:48:47 grichenk* Redesigned type aliases in serialization library.* Fixed the code (removed CRef-s, added explicit* initializers etc.)** Revision 1.23 2003/09/22 20:57:07 gouriano* Changed base type of AnyContent object to CSerialObject** Revision 1.22 2003/09/16 14:49:15 gouriano* Enhanced AnyContent objects to support XML namespaces and attribute info items.** Revision 1.21 2003/08/25 15:58:32 gouriano* added possibility to use namespaces in XML i/o streams** Revision 1.20 2003/08/13 15:47:02 gouriano* implemented serialization of AnyContent objects** Revision 1.19 2003/04/29 18:29:06 gouriano* object data member initialization verification** Revision 1.18 2003/04/15 16:18:48 siyan* Added doxygen support** Revision 1.17 2003/03/28 18:52:04 dicuccio* Added Win32 exports for postread/postwrite set hooks** Revision 1.16 2003/03/25 13:08:42 dicuccio* Added missing NCBI_NS_NCBI:: in PostRead()/PostWrite() macros** Revision 1.15 2003/03/11 18:00:08 gouriano* reimplement CInvalidChoiceSelection exception** Revision 1.14 2002/12/23 18:38:51 dicuccio* Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.* Moved all CVS logs to the end.** Revision 1.13 2002/05/29 21:18:43 gouriano* added debug dump** Revision 1.12 2002/05/22 14:03:37 grichenk* CSerialUserOp -- added prefix UserOp_ to Assign() and Equals()** Revision 1.11 2002/05/15 20:22:02 grichenk* Added CSerialObject -- base class for all generated ASN.1 classes** Revision 1.10 2001/07/25 19:15:27 grichenk* Added comments. Added type checking before dynamic cast.** Revision 1.9 2001/07/16 16:22:47 grichenk* Added CSerialUserOp class to create Assign() and Equals() methods for* user-defind classes.* Added SerialAssign<>() and SerialEquals<>() functions.** Revision 1.8 2000/12/15 21:28:49 vasilche* Moved some typedefs/enums from corelib/ncbistd.hpp.* Added flags to CObjectIStream/CObjectOStream: eFlagAllowNonAsciiChars.* TByte typedef replaced by Uint1.** Revision 1.7 2000/07/12 13:30:56 vasilche* Typo in function prototype.** Revision 1.6 2000/07/11 20:34:51 vasilche* File included in all generated headers made lighter.* Nonnecessary code moved to serialimpl.hpp.** Revision 1.5 2000/07/10 17:59:30 vasilche* Moved macros needed in headers to serialbase.hpp.* Use DECLARE_ENUM_INFO in generated code.** Revision 1.4 2000/06/16 16:31:07 vasilche* Changed implementation of choices and classes info to allow use of the same classes in generated and user written classes.** Revision 1.3 2000/05/04 16:21:36 vasilche* Fixed bug in choice reset.** Revision 1.2 2000/04/28 16:58:03 vasilche* Added classes CByteSource and CByteSourceReader for generic reading.* Added delayed reading of choice variants.** Revision 1.1 2000/04/03 18:47:09 vasilche* Added main include file for generated headers.* serialimpl.hpp is included in generated sources with GetTypeInfo methods** ===========================================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -