IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
SerializationTemplateSrcMacro.h
Go to the documentation of this file.
1 // SerializationTemplateSrcMacro.h:
3 // --------------------------------
4 //
14 
15 #ifndef __IPSDKSERIALIZATION_SERIALIZATIONTEMPLATESRCMACRO_H__
16 #define __IPSDKSERIALIZATION_SERIALIZATIONTEMPLATESRCMACRO_H__
17 
22 
25 
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; \
34  }
35 
38 
41 #define IPSDK_IMPLEMENT_TEMPLATE_SERIAL(libraryName, className, seqT, version) \
42  IPSDK_IMPLEMENT_TEMPLATE_SERIAL_VERSION(className, seqT, version)
43 
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)
49 
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)
55 
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)
61 
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)
67 
70 
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()); \
82  else { \
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()); \
91  }
92 
95 
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()); \
110  }
111 
114 
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)) \
121  (className) \
122  (IPSDK_END_NAMESPACE(namespaceSeq)) \
123  (IPSDK_FULL_NAMESPACE_STR(namespaceSeq)), \
124  TYPE_SEQ)
125 
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)) \
132  (className) \
133  (IPSDK_END_NAMESPACE(namespaceSeq)) \
134  (IPSDK_FULL_NAMESPACE_STR(namespaceSeq)), \
135  TYPE_SEQ)
136 
139 
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.