📄 serialimpl.hpp
字号:
{ return CreateEnumeratedTypeInfo(*member, enumInfo);}NCBI_XSERIAL_EXPORT SSystemMutex& GetTypeInfoMutex(void);// internal macros for implementing BEGIN_*_INFO and ADD_*_MEMBER#define DECLARE_BASE_OBJECT(ClassName) ClassName* base = 0#define BASE_OBJECT() static_cast<const CClass_Base*>(base)#define MEMBER_PTR(MemberName) &BASE_OBJECT()->MemberName#define CLASS_PTR(ClassName) static_cast<const ClassName*>(BASE_OBJECT())#define BEGIN_BASE_TYPE_INFO(ClassName,BaseClassName,Method,InfoType,Code) \const NCBI_NS_NCBI::CTypeInfo* Method(void) \{ \ typedef ClassName CClass; \ typedef BaseClassName CClass_Base; \ static InfoType* volatile s_info = 0; \ InfoType* info = s_info; \ if ( !info ) { \ NCBI_NS_NCBI::CMutexGuard GUARD(NCBI_NS_NCBI::GetTypeInfoMutex()); \ info = s_info; \ if ( !info ) { \ DECLARE_BASE_OBJECT(CClass); \ info = Code; \ NCBI_NS_NCBI::RegisterTypeInfoObject(info);#define BEGIN_TYPE_INFO(ClassName, Method, InfoType, Code) \ BEGIN_BASE_TYPE_INFO(ClassName, ClassName, Method, InfoType, Code) #define END_TYPE_INFO \ s_info = info; \ } \ } \ return info; \}// macros for specifying differents members#define SERIAL_MEMBER(MemberName,TypeMacro,TypeMacroArgs) \ NCBI_NS_NCBI::Check<SERIAL_TYPE(TypeMacro)TypeMacroArgs >::Ptr(MEMBER_PTR(MemberName)), SERIAL_REF(TypeMacro)TypeMacroArgs#define SERIAL_STD_MEMBER(MemberName) \ MEMBER_PTR(MemberName),NCBI_NS_NCBI::GetStdTypeInfoGetter(MEMBER_PTR(MemberName))#define SERIAL_CLASS_MEMBER(MemberName) \ MEMBER_PTR(MemberName),&MEMBER_PTR(MemberName).GetTypeInfo#define SERIAL_ENUM_MEMBER(MemberName,EnumName) \ MEMBER_PTR(MemberName), NCBI_NS_NCBI::EnumTypeInfo(MEMBER_PTR(MemberName), ENUM_METHOD_NAME(EnumName)())#define SERIAL_ENUM_IN_MEMBER(MemberName,CppContext,EnumName) \ MEMBER_PTR(MemberName), NCBI_NS_NCBI::EnumTypeInfo(MEMBER_PTR(MemberName),CppContext ENUM_METHOD_NAME(EnumName)())#define SERIAL_REF_MEMBER(MemberName,ClassName) \ SERIAL_MEMBER(MemberName,STL_CRef,(CLASS,(ClassName)))#define SERIAL_PTR_CHOICE_VARIANT(MemberName,TypeMacro,TypeMacroArgs) \ NCBI_NS_NCBI::Check<SERIAL_TYPE(TypeMacro)TypeMacroArgs >::PtrPtr(MEMBER_PTR(MemberName)), SERIAL_REF(TypeMacro)TypeMacroArgs#define SERIAL_REF_CHOICE_VARIANT(MemberName,ClassName) \ NCBI_NS_NCBI::Check<SERIAL_TYPE(CLASS)(ClassName)>::ObjectPtrPtr(MEMBER_PTR(MemberName)), SERIAL_REF(CLASS)(ClassName)#define SERIAL_BASE_CLASS(ClassName) \ CLASS_PTR(ClassName),&(CLASS_PTR(ClassName)->GetTypeInfo)// ADD_NAMED_*_MEMBER macros #define ADD_NAMED_NULL_MEMBER(MemberAlias,TypeMacro,TypeMacroArgs) \ NCBI_NS_NCBI::AddMember(info,MemberAlias, \ 0,SERIAL_REF(TypeMacro)TypeMacroArgs)#define ADD_NAMED_MEMBER(MemberAlias,MemberName,TypeMacro,TypeMacroArgs) \ NCBI_NS_NCBI::AddMember(info,MemberAlias, \ SERIAL_MEMBER(MemberName,TypeMacro,TypeMacroArgs))#define ADD_NAMED_STD_MEMBER(MemberAlias,MemberName) \ NCBI_NS_NCBI::AddMember(info,MemberAlias, \ SERIAL_STD_MEMBER(MemberName))#define ADD_NAMED_CLASS_MEMBER(MemberAlias,MemberName) \ NCBI_NS_NCBI::AddMember(info,MemberAlias, \ SERIAL_CLASS_MEMBER(MemberName))#define ADD_NAMED_ENUM_MEMBER(MemberAlias,MemberName,EnumName) \ NCBI_NS_NCBI::AddMember(info,MemberAlias, \ SERIAL_ENUM_MEMBER(MemberName,EnumName))#define ADD_NAMED_ENUM_IN_MEMBER(MemberAlias,MemberName,CppContext,EnumName) \ NCBI_NS_NCBI::AddMember(info,MemberAlias, \ SERIAL_ENUM_IN_MEMBER(MemberName,CppContext,EnumName))#define ADD_NAMED_REF_MEMBER(MemberAlias,MemberName,ClassName) \ NCBI_NS_NCBI::AddMember(info,MemberAlias, \ SERIAL_REF_MEMBER(MemberName,ClassName))#define ADD_NAMED_BASE_CLASS(MemberAlias,ClassName) \ NCBI_NS_NCBI::AddMember(info,MemberAlias, \ SERIAL_BASE_CLASS(ClassName))// ADD_*_MEMBER macros #define ADD_MEMBER(MemberName,TypeMacro,TypeMacroArgs) \ ADD_NAMED_MEMBER(#MemberName,MemberName,TypeMacro,TypeMacroArgs)#define ADD_STD_MEMBER(MemberName) \ ADD_NAMED_STD_MEMBER(#MemberName,MemberName)#define ADD_CLASS_MEMBER(MemberName) \ ADD_NAMED_CLASS_MEMBER(#MemberName,MemberName)#define ADD_ENUM_MEMBER(MemberName,EnumName) \ ADD_NAMED_ENUM_MEMBER(#MemberName,MemberName,EnumName)#define ADD_ENUM_IN_MEMBER(MemberName,CppContext,EnumName) \ ADD_NAMED_ENUM_MEMBER(#MemberName,MemberName,CppContext,EnumName)#define ADD_REF_MEMBER(MemberName,ClassName) \ ADD_NAMED_REF_MEMBER(#MemberName,MemberName,ClassName)// ADD_NAMED_*_CHOICE_VARIANT macros #define ADD_NAMED_NULL_CHOICE_VARIANT(MemberAlias,TypeMacro,TypeMacroArgs) \ NCBI_NS_NCBI::AddVariant(info,MemberAlias, \ 0,SERIAL_REF(TypeMacro)TypeMacroArgs)#define ADD_NAMED_CHOICE_VARIANT(MemberAlias,MemberName,TypeMacro,TypeMacroArgs) \ NCBI_NS_NCBI::AddVariant(info,MemberAlias, \ SERIAL_MEMBER(MemberName,TypeMacro,TypeMacroArgs))#define ADD_NAMED_STD_CHOICE_VARIANT(MemberAlias,MemberName) \ NCBI_NS_NCBI::AddVariant(info,MemberAlias, \ SERIAL_STD_MEMBER(MemberName))#define ADD_NAMED_ENUM_CHOICE_VARIANT(MemberAlias,MemberName,EnumName) \ NCBI_NS_NCBI::AddVariant(info,MemberAlias, \ SERIAL_ENUM_MEMBER(MemberName,EnumName))#define ADD_NAMED_ENUM_IN_CHOICE_VARIANT(MemberAlias,MemberName,CppContext,EnumName) \ NCBI_NS_NCBI::AddVariant(info,MemberAlias, \ SERIAL_ENUM_IN_MEMBER(MemberName,CppContext,EnumName))#define ADD_NAMED_PTR_CHOICE_VARIANT(MemberAlias,MemberName,TypeMacro,TypeMacroArgs) \ NCBI_NS_NCBI::AddVariant(info,MemberAlias, \ SERIAL_PTR_CHOICE_VARIANT(MemberName,TypeMacro,TypeMacroArgs))->SetPointer()#define ADD_NAMED_REF_CHOICE_VARIANT(MemberAlias,MemberName,ClassName) \ NCBI_NS_NCBI::AddVariant(info,MemberAlias, \ SERIAL_REF_CHOICE_VARIANT(MemberName,ClassName))->SetObjectPointer()// ADD_*_CHOICE_VARIANT macros#define ADD_CHOICE_VARIANT(MemberName,TypeMacro,TypeMacroArgs) \ ADD_NAMED_CHOICE_VARIANT(#MemberName,MemberName,TypeMacro,TypeMacroArgs)#define ADD_STD_CHOICE_VARIANT(MemberName) \ ADD_NAMED_STD_CHOICE_VARIANT(#MemberName,MemberName)#define ADD_ENUM_CHOICE_VARIANT(MemberName,EnumName) \ ADD_NAMED_ENUM_CHOICE_VARIANT(#MemberName,MemberName,EnumName)#define ADD_ENUM_IN_CHOICE_VARIANT(MemberName,CppContext,EnumName) \ ADD_NAMED_ENUM_IN_CHOICE_VARIANT(#MemberName,MemberName,CppContext,EnumName)#define ADD_PTR_CHOICE_VARIANT(MemberName,TypeMacro,TypeMacroArgs) \ ADD_NAMED_PTR_CHOICE_VARIANT(#MemberName,MemberName,TypeMacro,TypeMacroArgs)#define ADD_REF_CHOICE_VARIANT(MemberName,ClassName) \ ADD_NAMED_REF_CHOICE_VARIANT(#MemberName,MemberName,ClassName)// type info definition macros#define BEGIN_NAMED_CLASS_INFO(ClassAlias,ClassName) \ BEGIN_TYPE_INFO(ClassName, \ ClassName::GetTypeInfo, \ NCBI_NS_NCBI::CClassTypeInfo, \ NCBI_NS_NCBI::CClassInfoHelper<CClass>::CreateClassInfo(ClassAlias))#define BEGIN_CLASS_INFO(ClassName) \ BEGIN_NAMED_CLASS_INFO(#ClassName, ClassName)#define BEGIN_NAMED_BASE_CLASS_INFO(ClassAlias,ClassName) \ BEGIN_BASE_TYPE_INFO(ClassName, NCBI_NAME2(ClassName,_Base), \ NCBI_NAME2(ClassName,_Base)::GetTypeInfo, \ NCBI_NS_NCBI::CClassTypeInfo, \ NCBI_NS_NCBI::CClassInfoHelper<CClass>::CreateClassInfo(ClassAlias))#define BEGIN_BASE_CLASS_INFO(ClassName) \ BEGIN_NAMED_BASE_CLASS_INFO(#ClassName, ClassName)#define SET_CLASS_IMPLICIT() info->SetImplicit()#define BEGIN_NAMED_IMPLICIT_CLASS_INFO(ClassAlias,ClassName) \ BEGIN_NAMED_CLASS_INFO(ClassAlias,ClassName); SET_CLASS_IMPLICIT();#define BEGIN_IMPLICIT_CLASS_INFO(ClassName) \ BEGIN_CLASS_INFO(ClassName); SET_CLASS_IMPLICIT();#define BEGIN_NAMED_BASE_IMPLICIT_CLASS_INFO(ClassAlias,ClassName) \ BEGIN_NAMED_BASE_CLASS_INFO(ClassAlias,ClassName); SET_CLASS_IMPLICIT();#define BEGIN_BASE_IMPLICIT_CLASS_INFO(ClassName) \ BEGIN_BASE_CLASS_INFO(ClassName); SET_CLASS_IMPLICIT();#define SET_CLASS_MODULE(ModuleName) \ NCBI_NS_NCBI::SetModuleName(info, ModuleName)#define END_CLASS_INFO END_TYPE_INFO#define BEGIN_NAMED_ABSTRACT_CLASS_INFO(ClassAlias,ClassName) \ BEGIN_TYPE_INFO(ClassName, \ ClassName::GetTypeInfo, \ NCBI_NS_NCBI::CClassTypeInfo, \ NCBI_NS_NCBI::CClassInfoHelper<CClass>::CreateAbstractClassInfo(ClassAlias))#define BEGIN_ABSTRACT_CLASS_INFO(ClassName) \ BEGIN_NAMED_ABSTRACT_CLASS_INFO(#ClassName, ClassName)#define BEGIN_NAMED_ABSTRACT_BASE_CLASS_INFO(ClassAlias,ClassName) \ BEGIN_BASE_TYPE_INFO(ClassName, NCBI_NAME2(ClassName,_Base), \ NCBI_NAME2(ClassName,_Base)::GetTypeInfo, \ NCBI_NS_NCBI::CClassTypeInfo, \ NCBI_NS_NCBI::CClassInfoHelper<CClass>::CreateAbstractClassInfo(ClassAlias))#define END_ABSTRACT_CLASS_INFO END_TYPE_INFO#define BEGIN_NAMED_DERIVED_CLASS_INFO(ClassAlias,ClassName,ParentClassName) \ BEGIN_NAMED_CLASS_INFO(ClassAlias,ClassName) \ SET_PARENT_CLASS(ParentClassName);#define BEGIN_DERIVED_CLASS_INFO(ClassName,ParentClassName) \ BEGIN_NAMED_DERIVED_CLASS_INFO(#ClassName, ClassName, ParentClassName)#define END_DERIVED_CLASS_INFO END_TYPE_INFO#define BEGIN_NAMED_CHOICE_INFO(ClassAlias,ClassName) \ BEGIN_TYPE_INFO(ClassName, \ ClassName::GetTypeInfo, \ NCBI_NS_NCBI::CChoiceTypeInfo, \ NCBI_NS_NCBI::CClassInfoHelper<CClass>::CreateChoiceInfo(ClassAlias))#define BEGIN_CHOICE_INFO(ClassName) \ BEGIN_NAMED_CHOICE_INFO(#ClassName, ClassName)#define BEGIN_NAMED_BASE_CHOICE_INFO(ClassAlias,ClassName) \ BEGIN_BASE_TYPE_INFO(ClassName, NCBI_NAME2(ClassName,_Base), \ NCBI_NAME2(ClassName,_Base)::GetTypeInfo, \ NCBI_NS_NCBI::CChoiceTypeInfo, \ NCBI_NS_NCBI::CClassInfoHelper<CClass>::CreateChoiceInfo(ClassAlias))#define BEGIN_BASE_CHOICE_INFO(ClassName) \ BEGIN_NAMED_BASE_CHOICE_INFO(#ClassName, ClassName)#define SET_CHOICE_MODULE(ModuleName) \ NCBI_NS_NCBI::SetModuleName(info, ModuleName)#define SET_CHOICE_DELAYED() \ info->SetSelectDelay(&NCBI_NS_NCBI::CClassInfoHelper<CClass>::SelectDelayBuffer)#define END_CHOICE_INFO END_TYPE_INFO// sub class definition#define SET_PARENT_CLASS(ParentClassName) \ info->SetParentClass(ParentClassName::GetTypeInfo())#define ADD_NAMED_SUB_CLASS(SubClassAlias, SubClassName) \ info->AddSubClass(SubClassAlias, &SubClassName::GetTypeInfo)#define ADD_SUB_CLASS(SubClassName) \ ADD_NAMED_SUB_CLASS(#SubClassName, SubClassName)#define ADD_NAMED_NULL_SUB_CLASS(ClassAlias) \ info->AddSubClassNull(ClassAlias)#define ADD_NULL_SUB_CLASS(ClassAlias) \ ADD_NAMED_NULL_SUB_CLASS("NULL")// enum definition macros#define BEGIN_ENUM_INFO_METHOD(MethodName, EnumAlias, EnumName, IsInteger) \const NCBI_NS_NCBI::CEnumeratedTypeValues* MethodName(void) \{ \ static NCBI_NS_NCBI::CEnumeratedTypeValues* volatile s_enumInfo = 0; \ NCBI_NS_NCBI::CEnumeratedTypeValues* enumInfo = s_enumInfo; \ if ( !enumInfo ) { \ NCBI_NS_NCBI::CMutexGuard GUARD(NCBI_NS_NCBI::GetTypeInfoMutex()); \ enumInfo = s_enumInfo; \ if ( !enumInfo ) { \ enumInfo = new NCBI_NS_NCBI::CEnumeratedTypeValues(EnumAlias, IsInteger); \ NCBI_NS_NCBI::RegisterEnumTypeValuesObject(enumInfo); \ EnumName enumValue;#define END_ENUM_INFO_METHOD \ s_enumInfo = enumInfo; \ } \ } \ return enumInfo; \}#define BEGIN_NAMED_ENUM_IN_INFO(EnumAlias, CppContext, EnumName, IsInteger) \ BEGIN_ENUM_INFO_METHOD(CppContext ENUM_METHOD_NAME(EnumName), EnumAlias, EnumName, IsInteger)#define BEGIN_NAMED_ENUM_INFO(EnumAlias, EnumName, IsInteger) \ BEGIN_ENUM_INFO_METHOD(ENUM_METHOD_NAME(EnumName), EnumAlias, EnumName, IsInteger)#define BEGIN_ENUM_IN_INFO(CppContext, EnumName, IsInteger) \ BEGIN_NAMED_ENUM_IN_INFO(#EnumName, CppContext, EnumName, IsInteger)#define BEGIN_ENUM_INFO(EnumName, IsInteger) \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -