IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
SerializationSrcMacro.h
Go to the documentation of this file.
1 // SerializationSrcMacro.h:
3 // ------------------------
4 //
14 
15 #ifndef __IPSDKSERIALIZATION_SERIALIZATIONSRCMACRO_H__
16 #define __IPSDKSERIALIZATION_SERIALIZATIONSRCMACRO_H__
17 
20 #include <IPSDKUtil/Tools/ProcessingResult.h>
25 
26 // mutex used to protect data for concurrent accesses
27 IPSDK_STATIC_MUTEX(VersionMutex);
28 
31 
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; \
39  }
40 
43 
46 #define IPSDK_IMPLEMENT_SERIAL(libraryName, className, version) \
47  IPSDK_IMPLEMENT_SERIAL_VERSION(className, version)
48 
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)
54 
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)
60 
63 
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)
69 
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)
75 
78 
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()); \
89  else { \
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()); \
97  }
98 
101 
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()); \
115  }
116 
119 
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