15 #ifndef __IPSDKSERIALIZATION_SERIALIZATIONSRCMACRO_H__ 16 #define __IPSDKSERIALIZATION_SERIALIZATIONSRCMACRO_H__ 20 #include <IPSDKUtil/Tools/ProcessingResult.h> 34 #define IPSDK_IMPLEMENT_SERIAL_VERSION(className, version) \ 35 ipsdk::ipUInt32 className::getVersion() { \ 36 boost::lock_guard<boost::mutex> lock(VersionMutex::get()); \ 37 static ipsdk::ipUInt32 g_##className##Version(version); \ 38 return g_##className##Version; \ 46 #define IPSDK_IMPLEMENT_SERIAL(libraryName, className, version) \ 47 IPSDK_IMPLEMENT_SERIAL_VERSION(className, version) 51 #define IPSDK_IMPLEMENT_SERIAL_WITH_COPY(libraryName, namespaceSeq, className, version) \ 52 IPSDK_IMPLEMENT_DYNAMIC_WITH_COPY(namespaceSeq, className) \ 53 IPSDK_IMPLEMENT_SERIAL(libraryName, className, version) 57 #define IPSDK_IMPLEMENT_SERIAL_WITHOUT_COPY(libraryName, namespaceSeq, className, version) \ 58 IPSDK_IMPLEMENT_DYNAMIC_WITHOUT_COPY(namespaceSeq, className) \ 59 IPSDK_IMPLEMENT_SERIAL(libraryName, className, version) 66 #define IPSDK_IMPLEMENT_ABSTRACT_SERIAL_WITH_COPY(libraryName, namespaceSeq, className, version) \ 67 IPSDK_IMPLEMENT_ABSTRACT_DYNAMIC_WITH_COPY(namespaceSeq, className) \ 68 IPSDK_IMPLEMENT_SERIAL(libraryName, className, version) 72 #define IPSDK_IMPLEMENT_ABSTRACT_SERIAL_WITHOUT_COPY(libraryName, namespaceSeq, className, version) \ 73 IPSDK_IMPLEMENT_ABSTRACT_DYNAMIC_WITHOUT_COPY(namespaceSeq, className) \ 74 IPSDK_IMPLEMENT_SERIAL(libraryName, className, version) 81 #define IPSDK_IMPLEMENT_SERIAL_READ(className, baseClassName) \ 82 ipsdk::BoolResult className::read(ipsdk::BaseIArchive& ar) { \ 83 ipsdk::BoolResult baseClassResult = baseClassName::read(ar); \ 84 if (baseClassResult == false) \ 85 return baseClassResult; \ 86 ipsdk::ipUInt32 version; \ 87 if (ar.isClassVersionRegistred(className::getClassName()) == true) \ 88 version = ar.getRegisterClassVersion(className::getClassName()); \ 90 IPSDK_START_ARCHIVE_SECTION(ar, className::getClassName()); \ 91 ar >> IPSDK_MAKE_IITEM_VALUE(version); \ 92 IPSDKSERIALIZATION_CHECK(version <= className::getVersion(), \ 93 [ipsdk::eIPSDKSerializationMessage::eInvalidReadClassVersion] % \ 94 version % className::getClassName() % className::getVersion()); \ 95 ar.registerClassVersion(className::getClassName(), version); \ 96 IPSDK_END_ARCHIVE_SECTION(className::getClassName()); \ 104 #define IPSDK_IMPLEMENT_SERIAL_WRITE(className, baseClassName) \ 105 ipsdk::BoolResult className::write(ipsdk::BaseOArchive& ar) const { \ 106 ipsdk::BoolResult baseClassResult = baseClassName::write(ar); \ 107 if (baseClassResult == false) \ 108 return baseClassResult; \ 109 if (ar.isClassVersionRegistred(className::getClassName()) == false) { \ 110 ipsdk::ipUInt32 version = className::getVersion(); \ 111 IPSDK_START_ARCHIVE_SECTION(ar, className::getClassName()); \ 112 ar << IPSDK_MAKE_OITEM_VALUE(version); \ 113 ar.registerClassVersion(className::getClassName(), version); \ 114 IPSDK_END_ARCHIVE_SECTION(className::getClassName()); \ 120 #endif // __IPSDKSERIALIZATION_SERIALIZATIONSRCMACRO_H__ Serialization operators for basic types.
Macro set for template class manipulation.
Logger api for library IPSDKSerialization.
Macro set to manage dynamic objects (source part)
Operators used to serialize library objects.
Macros allowing to define a getter to a static mutex.
#define IPSDK_STATIC_MUTEX(MutexName)
macro allowing to create a static mutex
Definition: MutexMacros.h:27