15 #ifndef __IPSDKSERIALIZATION_SERIALIZATIONTEMPLATESRCMACRO_H__ 16 #define __IPSDKSERIALIZATION_SERIALIZATIONTEMPLATESRCMACRO_H__ 28 #define IPSDK_IMPLEMENT_TEMPLATE_SERIAL_VERSION(className, seqT, version) \ 29 IPSDK_TEMPLATE_PARAMS(seqT) \ 30 ipUInt32 className<IPSDK_TEMPLATE_ARGS(seqT)>::getVersion() { \ 31 boost::lock_guard<boost::mutex> lock(VersionMutex::get()); \ 32 static ipUInt32 g_##className##Version(version); \ 33 return g_##className##Version; \ 41 #define IPSDK_IMPLEMENT_TEMPLATE_SERIAL(libraryName, className, seqT, version) \ 42 IPSDK_IMPLEMENT_TEMPLATE_SERIAL_VERSION(className, seqT, version) 46 #define IPSDK_IMPLEMENT_TEMPLATE_SERIAL_WITH_COPY(libraryName, className, seqT, version) \ 47 IPSDK_IMPLEMENT_TEMPLATE_DYNAMIC_WITH_COPY(className, seqT) \ 48 IPSDK_IMPLEMENT_TEMPLATE_SERIAL(libraryName, className, seqT, version) 52 #define IPSDK_IMPLEMENT_TEMPLATE_SERIAL_WITHOUT_COPY(libraryName, className, seqT, version) \ 53 IPSDK_IMPLEMENT_TEMPLATE_DYNAMIC_WITHOUT_COPY(className, seqT) \ 54 IPSDK_IMPLEMENT_TEMPLATE_SERIAL(libraryName, className, seqT, version) 58 #define IPSDK_IMPLEMENT_ABSTRACT_TEMPLATE_SERIAL_WITH_COPY(libraryName, className, seqT, version) \ 59 IPSDK_IMPLEMENT_ABSTRACT_TEMPLATE_DYNAMIC_WITH_COPY(className, seqT) \ 60 IPSDK_IMPLEMENT_TEMPLATE_SERIAL(libraryName, className, seqT, version) 64 #define IPSDK_IMPLEMENT_ABSTRACT_TEMPLATE_SERIAL_WITHOUT_COPY(libraryName, className, seqT, version) \ 65 IPSDK_IMPLEMENT_ABSTRACT_TEMPLATE_DYNAMIC_WITHOUT_COPY(className, seqT) \ 66 IPSDK_IMPLEMENT_TEMPLATE_SERIAL(libraryName, className, seqT, version) 73 #define IPSDK_IMPLEMENT_TEMPLATE_SERIAL_READ(className, seqT, baseClassName) \ 74 IPSDK_TEMPLATE_PARAMS(seqT) \ 75 ipsdk::BoolResult className<IPSDK_TEMPLATE_ARGS(seqT)>::read(ipsdk::BaseIArchive& ar) { \ 76 ipsdk::BoolResult baseClassResult = baseClassName::read(ar); \ 77 if (baseClassResult == false) \ 78 return baseClassResult; \ 79 ipsdk::ipUInt32 version; \ 80 if (ar.isClassVersionRegistred(className<IPSDK_TEMPLATE_ARGS(seqT)>::getClassName()) == true) \ 81 version = ar.getRegisterClassVersion(className<IPSDK_TEMPLATE_ARGS(seqT)>::getClassName()); \ 83 IPSDK_START_ARCHIVE_SECTION(ar, className<IPSDK_TEMPLATE_ARGS(seqT)>::getClassName()); \ 84 ar >> IPSDK_MAKE_IITEM_VALUE(version); \ 85 IPSDKSERIALIZATION_CHECK(version <= className<IPSDK_TEMPLATE_ARGS(seqT)>::getVersion(), \ 86 [ipsdk::eIPSDKSerializationMessage::eInvalidReadClassVersion] % \ 87 version % className<IPSDK_TEMPLATE_ARGS(seqT)>::getClassName() % \ 88 className<IPSDK_TEMPLATE_ARGS(seqT)>::getVersion()); \ 89 ar.registerClassVersion(className<IPSDK_TEMPLATE_ARGS(seqT)>::getClassName(), version); \ 90 IPSDK_END_ARCHIVE_SECTION(className<IPSDK_TEMPLATE_ARGS(seqT)>::getClassName()); \ 98 #define IPSDK_IMPLEMENT_TEMPLATE_SERIAL_WRITE(className, seqT, baseClassName) \ 99 IPSDK_TEMPLATE_PARAMS(seqT) \ 100 ipsdk::BoolResult className<IPSDK_TEMPLATE_ARGS(seqT)>::write(ipsdk::BaseOArchive& ar) const { \ 101 ipsdk::BoolResult baseClassResult = baseClassName::write(ar); \ 102 if (baseClassResult == false) \ 103 return baseClassResult; \ 104 if (ar.isClassVersionRegistred(className<IPSDK_TEMPLATE_ARGS(seqT)>::getClassName()) == false) { \ 105 ipsdk::ipUInt32 version = className<IPSDK_TEMPLATE_ARGS(seqT)>::getVersion(); \ 106 IPSDK_START_ARCHIVE_SECTION(ar, className<IPSDK_TEMPLATE_ARGS(seqT)>::getClassName()); \ 107 ar << IPSDK_MAKE_OITEM_VALUE(version); \ 108 ar.registerClassVersion(className<IPSDK_TEMPLATE_ARGS(seqT)>::getClassName(), version); \ 109 IPSDK_END_ARCHIVE_SECTION(className<IPSDK_TEMPLATE_ARGS(seqT)>::getClassName()); \ 117 #define IPSDK_EXPORT_TEMPLATE_SERIAL(libraryName, namespaceSeq, className, TYPE_SEQ) \ 118 BOOST_PP_SEQ_FOR_EACH(IPSDK_EXPORT_TEMPLATE_DYNAMIC_MACRO, \ 119 (IPSDK_LIB_API(libraryName)) \ 120 (IPSDK_START_NAMESPACE(namespaceSeq)) \ 122 (IPSDK_END_NAMESPACE(namespaceSeq)) \ 123 (IPSDK_FULL_NAMESPACE_STR(namespaceSeq)), \ 128 #define IPSDK_EXPORT_ABSTRACT_TEMPLATE_SERIAL(libraryName, namespaceSeq, className, TYPE_SEQ) \ 129 BOOST_PP_SEQ_FOR_EACH(IPSDK_EXPORT_ABSTRACT_TEMPLATE_DYNAMIC_MACRO, \ 130 (IPSDK_LIB_API(libraryName)) \ 131 (IPSDK_START_NAMESPACE(namespaceSeq)) \ 133 (IPSDK_END_NAMESPACE(namespaceSeq)) \ 134 (IPSDK_FULL_NAMESPACE_STR(namespaceSeq)), \ 140 #endif // __IPSDKSERIALIZATION_SERIALIZATIONTEMPLATESRCMACRO_H__ Macro set to manage dynamic template objects (source part)
Macro set for template class manipulation.
Logger api for library IPSDKSerialization.
Source part of macros set for class serialization.