QxOrm 1.4.9
C++ Object Relational Mapping library
Loading...
Searching...
No Matches
QxRegister.h
Go to the documentation of this file.
1/****************************************************************************
2**
3** https://www.qxorm.com/
4** Copyright (C) 2013 Lionel Marty (contact@qxorm.com)
5**
6** This file is part of the QxOrm library
7**
8** This software is provided 'as-is', without any express or implied
9** warranty. In no event will the authors be held liable for any
10** damages arising from the use of this software
11**
12** Commercial Usage
13** Licensees holding valid commercial QxOrm licenses may use this file in
14** accordance with the commercial license agreement provided with the
15** Software or, alternatively, in accordance with the terms contained in
16** a written agreement between you and Lionel Marty
17**
18** GNU General Public License Usage
19** Alternatively, this file may be used under the terms of the GNU
20** General Public License version 3.0 as published by the Free Software
21** Foundation and appearing in the file 'license.gpl3.txt' included in the
22** packaging of this file. Please review the following information to
23** ensure the GNU General Public License version 3.0 requirements will be
24** met : http://www.gnu.org/copyleft/gpl.html
25**
26** If you are unsure which license is appropriate for your use, or
27** if you have questions regarding the use of this file, please contact :
28** contact@qxorm.com
29**
30****************************************************************************/
31
32#ifndef _QX_REGISTER_H_
33#define _QX_REGISTER_H_
34
35#ifdef _MSC_VER
36#pragma once
37#endif
38
46#ifdef _MSC_VER
47#pragma warning(push)
48#pragma warning(disable:4996)
49#pragma warning(disable:4094)
50#endif // _MSC_VER
51
52#include <QxCommon/QxConfig.h>
53#include <QxCommon/QxMacro.h>
54
55#include <QxRegister/QxClass.h>
57
58#include <QxFactory/QxFactory.h>
59
65
67
68#define QX_REGISTER_CLASS_MAPPING_FCT_HPP(dllImportExport, className) \
69namespace qx { template <> dllImportExport void register_class(QxClass< className > & t) QX_USED; }
70
71#define QX_REGISTER_SERIALIZE_QDATASTREAM_HPP(dllImportExport, className) \
72dllImportExport QDataStream & operator<< (QDataStream & stream, const className & t) QX_USED; \
73dllImportExport QDataStream & operator>> (QDataStream & stream, className & t) QX_USED;
74
75#define QX_REGISTER_SERIALIZE_QDATASTREAM_CPP(className) \
76QDataStream & operator<< (QDataStream & stream, const className & t) \
77{ return qx::QxSerializeRegistered< className >::save(stream, t); } \
78QDataStream & operator>> (QDataStream & stream, className & t) \
79{ return qx::QxSerializeRegistered< className >::load(stream, t); }
80
81#define QX_REGISTER_CLASS_MAPPING_FCT_EMPTY_CPP(className) \
82namespace qx { template <> void register_class(QxClass< className > & t) { Q_UNUSED(t); } }
83
84#ifdef _QX_ENABLE_BOOST_SERIALIZATION
85#define QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(Archive, className) \
86namespace boost { namespace serialization { \
87inline void serialize(Archive & ar, className & t, const unsigned int file_version) \
88{ \
89 static_assert(qx::trait::is_qx_registered< className >::value, "qx::trait::is_qx_registered< className >::value"); \
90 typedef std::conditional< Archive::is_saving::value, qx::serialization::detail::saver< Archive, className >, qx::serialization::detail::loader< Archive, className > >::type type_invoker; \
91 type_invoker::invoke(ar, t, file_version); \
92} } } // namespace boost::serialization
93#endif // _QX_ENABLE_BOOST_SERIALIZATION
94
95#ifdef _QX_ENABLE_BOOST_SERIALIZATION
96#define QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, Archive, className) \
97namespace boost { namespace serialization { \
98dllImportExport void serialize(Archive & ar, className & t, const unsigned int file_version) QX_USED; \
99} } // namespace boost::serialization
100#endif // _QX_ENABLE_BOOST_SERIALIZATION
101
102#ifdef _QX_ENABLE_BOOST_SERIALIZATION
103#define QX_SERIALIZE_IMPLEMENT_ARCHIVE_EMPTY_CPP(Archive, className) \
104namespace boost { namespace serialization { \
105inline void serialize(Archive & ar, className & t, const unsigned int file_version) \
106{ Q_UNUSED(ar); Q_UNUSED(t); Q_UNUSED(file_version); \
107} } } // namespace boost::serialization
108#endif // _QX_ENABLE_BOOST_SERIALIZATION
109
110#ifdef _QX_ENABLE_BOOST_SERIALIZATION
111#define QX_SERIALIZE_ARCHIVE_TEMPLATE_HPP(className) \
112namespace boost { namespace serialization { \
113template <class Archive> \
114void serialize(Archive & ar, className & t, const unsigned int file_version); \
115} } // namespace boost::serialization
116#endif // _QX_ENABLE_BOOST_SERIALIZATION
117
118#ifdef _QX_ENABLE_BOOST_SERIALIZATION
119#if _QX_SERIALIZE_POLYMORPHIC
120#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_POLYMORPHIC_CPP(className) \
121QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::polymorphic_oarchive, className) \
122QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::polymorphic_iarchive, className) \
123QX_SERIALIZE_IMPLEMENT_ARCHIVE_EMPTY_CPP(boost::archive::polymorphic_binary_oarchive, className) \
124QX_SERIALIZE_IMPLEMENT_ARCHIVE_EMPTY_CPP(boost::archive::polymorphic_binary_iarchive, className) \
125QX_SERIALIZE_IMPLEMENT_ARCHIVE_EMPTY_CPP(boost::archive::polymorphic_text_oarchive, className) \
126QX_SERIALIZE_IMPLEMENT_ARCHIVE_EMPTY_CPP(boost::archive::polymorphic_text_iarchive, className) \
127QX_SERIALIZE_IMPLEMENT_ARCHIVE_EMPTY_CPP(boost::archive::polymorphic_xml_oarchive, className) \
128QX_SERIALIZE_IMPLEMENT_ARCHIVE_EMPTY_CPP(boost::archive::polymorphic_xml_iarchive, className) \
129QX_SERIALIZE_IMPLEMENT_ARCHIVE_EMPTY_CPP(boost::archive::binary_oarchive, className) \
130QX_SERIALIZE_IMPLEMENT_ARCHIVE_EMPTY_CPP(boost::archive::binary_iarchive, className) \
131QX_SERIALIZE_IMPLEMENT_ARCHIVE_EMPTY_CPP(boost::archive::text_oarchive, className) \
132QX_SERIALIZE_IMPLEMENT_ARCHIVE_EMPTY_CPP(boost::archive::text_iarchive, className) \
133QX_SERIALIZE_IMPLEMENT_ARCHIVE_EMPTY_CPP(boost::archive::xml_oarchive, className) \
134QX_SERIALIZE_IMPLEMENT_ARCHIVE_EMPTY_CPP(boost::archive::xml_iarchive, className)
135// ---
136#define QX_SERIALIZE_LIST_ARCHIVE_POLYMORPHIC_HPP(dllImportExport, className) \
137QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::polymorphic_oarchive, className) \
138QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::polymorphic_iarchive, className) \
139QX_SERIALIZE_ARCHIVE_TEMPLATE_HPP(className)
140#else // _QX_SERIALIZE_POLYMORPHIC
141#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_POLYMORPHIC_CPP(className) /* Nothing */
142#define QX_SERIALIZE_LIST_ARCHIVE_POLYMORPHIC_HPP(dllImportExport, className) /* Nothing */
143#endif // _QX_SERIALIZE_POLYMORPHIC
144#endif // _QX_ENABLE_BOOST_SERIALIZATION
145
146#ifdef _QX_ENABLE_BOOST_SERIALIZATION
147#if _QX_SERIALIZE_BINARY
148#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_BINARY_CPP(className) \
149QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::binary_oarchive, className) \
150QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::binary_iarchive, className)
151// ---
152#define QX_SERIALIZE_LIST_ARCHIVE_BINARY_HPP(dllImportExport, className) \
153QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::binary_oarchive, className) \
154QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::binary_iarchive, className)
155#else // _QX_SERIALIZE_BINARY
156#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_BINARY_CPP(className) /* Nothing */
157#define QX_SERIALIZE_LIST_ARCHIVE_BINARY_HPP(dllImportExport, className) /* Nothing */
158#endif // _QX_SERIALIZE_BINARY
159#endif // _QX_ENABLE_BOOST_SERIALIZATION
160
161#ifdef _QX_ENABLE_BOOST_SERIALIZATION
162#if _QX_SERIALIZE_TEXT
163#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_TEXT_CPP(className) \
164QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::text_oarchive, className) \
165QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::text_iarchive, className)
166// ---
167#define QX_SERIALIZE_LIST_ARCHIVE_TEXT_HPP(dllImportExport, className) \
168QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::text_oarchive, className) \
169QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::text_iarchive, className)
170#else // _QX_SERIALIZE_TEXT
171#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_TEXT_CPP(className) /* Nothing */
172#define QX_SERIALIZE_LIST_ARCHIVE_TEXT_HPP(dllImportExport, className) /* Nothing */
173#endif // _QX_SERIALIZE_TEXT
174#endif // _QX_ENABLE_BOOST_SERIALIZATION
175
176#ifdef _QX_ENABLE_BOOST_SERIALIZATION
177#if _QX_SERIALIZE_XML
178#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_XML_CPP(className) \
179QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::xml_oarchive, className) \
180QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::xml_iarchive, className)
181// ---
182#define QX_SERIALIZE_LIST_ARCHIVE_XML_HPP(dllImportExport, className) \
183QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::xml_oarchive, className) \
184QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::xml_iarchive, className)
185#else // _QX_SERIALIZE_XML
186#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_XML_CPP(className) /* Nothing */
187#define QX_SERIALIZE_LIST_ARCHIVE_XML_HPP(dllImportExport, className) /* Nothing */
188#endif // _QX_SERIALIZE_XML
189#endif // _QX_ENABLE_BOOST_SERIALIZATION
190
191#ifdef _QX_ENABLE_BOOST_SERIALIZATION
192#if _QX_SERIALIZE_PORTABLE_BINARY
193#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_PORTABLE_BINARY_CPP(className) \
194QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(eos::portable_oarchive, className) \
195QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(eos::portable_iarchive, className)
196// ---
197#define QX_SERIALIZE_LIST_ARCHIVE_PORTABLE_BINARY_HPP(dllImportExport, className) \
198QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, eos::portable_oarchive, className) \
199QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, eos::portable_iarchive, className)
200#else // _QX_SERIALIZE_PORTABLE_BINARY
201#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_PORTABLE_BINARY_CPP(className) /* Nothing */
202#define QX_SERIALIZE_LIST_ARCHIVE_PORTABLE_BINARY_HPP(dllImportExport, className) /* Nothing */
203#endif // _QX_SERIALIZE_PORTABLE_BINARY
204#endif // _QX_ENABLE_BOOST_SERIALIZATION
205
206#ifdef _QX_ENABLE_BOOST_SERIALIZATION
207#if _QX_SERIALIZE_WIDE_BINARY
208#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_WIDE_BINARY_CPP(className) \
209QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::binary_woarchive, className) \
210QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::binary_wiarchive, className)
211// ---
212#define QX_SERIALIZE_LIST_ARCHIVE_WIDE_BINARY_HPP(dllImportExport, className) \
213QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::binary_woarchive, className) \
214QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::binary_wiarchive, className)
215#else // _QX_SERIALIZE_WIDE_BINARY
216#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_WIDE_BINARY_CPP(className) /* Nothing */
217#define QX_SERIALIZE_LIST_ARCHIVE_WIDE_BINARY_HPP(dllImportExport, className) /* Nothing */
218#endif // _QX_SERIALIZE_WIDE_BINARY
219#endif // _QX_ENABLE_BOOST_SERIALIZATION
220
221#ifdef _QX_ENABLE_BOOST_SERIALIZATION
222#if _QX_SERIALIZE_WIDE_TEXT
223#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_WIDE_TEXT_CPP(className) \
224QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::text_woarchive, className) \
225QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::text_wiarchive, className)
226// ---
227#define QX_SERIALIZE_LIST_ARCHIVE_WIDE_TEXT_HPP(dllImportExport, className) \
228QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::text_woarchive, className) \
229QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::text_wiarchive, className)
230#else // _QX_SERIALIZE_WIDE_TEXT
231#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_WIDE_TEXT_CPP(className) /* Nothing */
232#define QX_SERIALIZE_LIST_ARCHIVE_WIDE_TEXT_HPP(dllImportExport, className) /* Nothing */
233#endif // _QX_SERIALIZE_WIDE_TEXT
234#endif // _QX_ENABLE_BOOST_SERIALIZATION
235
236#ifdef _QX_ENABLE_BOOST_SERIALIZATION
237#if _QX_SERIALIZE_WIDE_XML
238#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_WIDE_XML_CPP(className) \
239QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::xml_woarchive, className) \
240QX_SERIALIZE_IMPLEMENT_ARCHIVE_CPP(boost::archive::xml_wiarchive, className)
241// ---
242#define QX_SERIALIZE_LIST_ARCHIVE_WIDE_XML_HPP(dllImportExport, className) \
243QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::xml_woarchive, className) \
244QX_SERIALIZE_ARCHIVE_HPP(dllImportExport, boost::archive::xml_wiarchive, className)
245#else // _QX_SERIALIZE_WIDE_XML
246#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_WIDE_XML_CPP(className) /* Nothing */
247#define QX_SERIALIZE_LIST_ARCHIVE_WIDE_XML_HPP(dllImportExport, className) /* Nothing */
248#endif // _QX_SERIALIZE_WIDE_XML
249#endif // _QX_ENABLE_BOOST_SERIALIZATION
250
251#ifdef _QX_ENABLE_BOOST_SERIALIZATION
252#define QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_CPP(className) \
253QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_POLYMORPHIC_CPP(className) \
254QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_BINARY_CPP(className) \
255QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_TEXT_CPP(className) \
256QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_XML_CPP(className) \
257QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_PORTABLE_BINARY_CPP(className) \
258QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_WIDE_BINARY_CPP(className) \
259QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_WIDE_TEXT_CPP(className) \
260QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_WIDE_XML_CPP(className)
261#endif // _QX_ENABLE_BOOST_SERIALIZATION
262
263#ifdef _QX_ENABLE_BOOST_SERIALIZATION
264#define QX_SERIALIZE_LIST_ARCHIVE_HPP(dllImportExport, className) \
265QX_SERIALIZE_LIST_ARCHIVE_POLYMORPHIC_HPP(dllImportExport, className) \
266QX_SERIALIZE_LIST_ARCHIVE_BINARY_HPP(dllImportExport, className) \
267QX_SERIALIZE_LIST_ARCHIVE_TEXT_HPP(dllImportExport, className) \
268QX_SERIALIZE_LIST_ARCHIVE_XML_HPP(dllImportExport, className) \
269QX_SERIALIZE_LIST_ARCHIVE_PORTABLE_BINARY_HPP(dllImportExport, className) \
270QX_SERIALIZE_LIST_ARCHIVE_WIDE_BINARY_HPP(dllImportExport, className) \
271QX_SERIALIZE_LIST_ARCHIVE_WIDE_TEXT_HPP(dllImportExport, className) \
272QX_SERIALIZE_LIST_ARCHIVE_WIDE_XML_HPP(dllImportExport, className)
273#endif // _QX_ENABLE_BOOST_SERIALIZATION
274
275#ifdef _QX_ENABLE_BOOST_SERIALIZATION
276#if _QX_WRITE_BOOST_CLASS_EXPORT_IN_HPP_FILE
277#define QX_BOOST_CLASS_EXPORT_HPP(className) BOOST_CLASS_EXPORT_GUID(className, #className)
278#else
279#define QX_BOOST_CLASS_EXPORT_HPP(className) /* Nothing */
280#endif // _QX_WRITE_BOOST_CLASS_EXPORT_IN_HPP_FILE
281#endif // _QX_ENABLE_BOOST_SERIALIZATION
282
283#ifdef _QX_ENABLE_BOOST_SERIALIZATION
284#if _QX_WRITE_BOOST_CLASS_EXPORT_IN_CPP_FILE
285#define QX_BOOST_CLASS_EXPORT_CPP(className) BOOST_CLASS_EXPORT_GUID(className, #className)
286#else
287#define QX_BOOST_CLASS_EXPORT_CPP(className) /* Nothing */
288#endif // _QX_WRITE_BOOST_CLASS_EXPORT_IN_CPP_FILE
289#endif // _QX_ENABLE_BOOST_SERIALIZATION
290
291#define QX_REGISTER_FRIEND_CLASS(className) \
292template <class T> friend void qx::register_class(T & t);
293
294#define QX_DLL_EXPORT_TEMPLATE_QX_CLASS_HPP(className) \
295QX_DLL_EXPORT_TEMPLATE_HPP(class, qx::QxDataMemberX< className >) \
296QX_DLL_EXPORT_TEMPLATE_HPP(class, qx::QxSingleton< qx::QxDataMemberX< className > >) \
297QX_DLL_EXPORT_TEMPLATE_HPP(class, qx::QxClass< className >) \
298QX_DLL_EXPORT_TEMPLATE_HPP(class, qx::QxSingleton< qx::QxClass< className > >)
299
300#define QX_DLL_EXPORT_TEMPLATE_QX_CLASS_CPP(className) \
301QX_DLL_EXPORT_TEMPLATE_CPP(class, qx::QxDataMemberX< className >) \
302QX_DLL_EXPORT_TEMPLATE_CPP(class, qx::QxSingleton< qx::QxDataMemberX< className > >) \
303QX_DLL_EXPORT_TEMPLATE_CPP(class, qx::QxClass< className >) \
304QX_DLL_EXPORT_TEMPLATE_CPP(class, qx::QxSingleton< qx::QxClass< className > >)
305
306#ifdef _QX_ENABLE_BOOST_SERIALIZATION
307#define QX_REGISTER_COMPLEX_CLASS_NAME_HPP(className, baseClass, version, classNameFormatted) \
308QX_SET_REGISTERED(className) \
309QX_REGISTER_CLASS_NAME(className) \
310QX_REGISTER_BASE_CLASS(className, baseClass) \
311QX_REGISTER_FACTORY_COMPLEX_CLASS_NAME_HPP(className, classNameFormatted) \
312QX_REGISTER_BOOST_SERIALIZE_HELPER_COMPLEX_CLASS_NAME(className, classNameFormatted) \
313QX_BOOST_CLASS_EXPORT_HPP(className) \
314QX_CLASS_VERSION(className, version)
315#else // _QX_ENABLE_BOOST_SERIALIZATION
316#define QX_REGISTER_COMPLEX_CLASS_NAME_HPP(className, baseClass, version, classNameFormatted) \
317QX_SET_REGISTERED(className) \
318QX_REGISTER_CLASS_NAME(className) \
319QX_REGISTER_BASE_CLASS(className, baseClass) \
320QX_REGISTER_FACTORY_COMPLEX_CLASS_NAME_HPP(className, classNameFormatted) \
321QX_CLASS_VERSION(className, version)
322#endif // _QX_ENABLE_BOOST_SERIALIZATION
323
324#define QX_REGISTER_HPP(className, baseClass, version) \
325QX_REGISTER_COMPLEX_CLASS_NAME_HPP(className, baseClass, version, className)
326
327#ifdef _QX_ENABLE_BOOST_SERIALIZATION
328#define QX_REGISTER_COMPLEX_CLASS_NAME_CPP(className, classNameFormatted) \
329QX_BOOST_CLASS_EXPORT_CPP(className) \
330QX_REGISTER_FACTORY_COMPLEX_CLASS_NAME_CPP(className, classNameFormatted) \
331QX_REGISTER_BOOST_SERIALIZE_HELPER_COMPLEX_CLASS_NAME_CPP(className, classNameFormatted) \
332QX_SERIALIZE_IMPLEMENT_LIST_ARCHIVE_CPP(className)
333#else // _QX_ENABLE_BOOST_SERIALIZATION
334#define QX_REGISTER_COMPLEX_CLASS_NAME_CPP(className, classNameFormatted) \
335QX_REGISTER_FACTORY_COMPLEX_CLASS_NAME_CPP(className, classNameFormatted)
336#endif // _QX_ENABLE_BOOST_SERIALIZATION
337
338#define QX_REGISTER_CPP(className) \
339QX_REGISTER_COMPLEX_CLASS_NAME_CPP(className, className)
340
341#ifdef _QX_ENABLE_BOOST_SERIALIZATION
342
343#ifdef _MSC_VER
344#define QX_REGISTER_COMPLEX_CLASS_NAME_HPP_EXPORT_DLL(className, baseClass, version, classNameFormatted) \
345QX_REGISTER_COMPLEX_CLASS_NAME_HPP(className, baseClass, version, classNameFormatted) \
346QX_SERIALIZE_LIST_ARCHIVE_HPP(QX_DLL_EXPORT_HELPER, className) \
347QX_REGISTER_CLASS_MAPPING_FCT_HPP(QX_DLL_EXPORT_HELPER, className) \
348QX_REGISTER_SERIALIZE_QDATASTREAM_HPP(QX_DLL_EXPORT_HELPER, className)
349// ---
350#define QX_REGISTER_HPP_EXPORT_DLL(className, baseClass, version) \
351QX_REGISTER_COMPLEX_CLASS_NAME_HPP_EXPORT_DLL(className, baseClass, version, className)
352#else // _MSC_VER
353#define QX_REGISTER_COMPLEX_CLASS_NAME_HPP_EXPORT_DLL(className, baseClass, version, classNameFormatted) \
354QX_REGISTER_COMPLEX_CLASS_NAME_HPP(className, baseClass, version, classNameFormatted) \
355QX_DLL_EXPORT_TEMPLATE_QX_CLASS_HPP(className) \
356QX_BOOST_EXPORT_SERIALIZATION_HPP(className) \
357QX_SERIALIZE_LIST_ARCHIVE_HPP(QX_DLL_EXPORT_HELPER, className) \
358QX_REGISTER_CLASS_MAPPING_FCT_HPP(QX_DLL_EXPORT_HELPER, className) \
359QX_REGISTER_SERIALIZE_QDATASTREAM_HPP(QX_DLL_EXPORT_HELPER, className)
360// ---
361#define QX_REGISTER_HPP_EXPORT_DLL(className, baseClass, version) \
362QX_REGISTER_COMPLEX_CLASS_NAME_HPP_EXPORT_DLL(className, baseClass, version, className)
363#endif // _MSC_VER
364
365#else // _QX_ENABLE_BOOST_SERIALIZATION
366
367#ifdef _MSC_VER
368#define QX_REGISTER_COMPLEX_CLASS_NAME_HPP_EXPORT_DLL(className, baseClass, version, classNameFormatted) \
369QX_REGISTER_COMPLEX_CLASS_NAME_HPP(className, baseClass, version, classNameFormatted) \
370QX_REGISTER_CLASS_MAPPING_FCT_HPP(QX_DLL_EXPORT_HELPER, className) \
371QX_REGISTER_SERIALIZE_QDATASTREAM_HPP(QX_DLL_EXPORT_HELPER, className)
372// ---
373#define QX_REGISTER_HPP_EXPORT_DLL(className, baseClass, version) \
374QX_REGISTER_COMPLEX_CLASS_NAME_HPP_EXPORT_DLL(className, baseClass, version, className)
375#else // _MSC_VER
376#define QX_REGISTER_COMPLEX_CLASS_NAME_HPP_EXPORT_DLL(className, baseClass, version, classNameFormatted) \
377QX_REGISTER_COMPLEX_CLASS_NAME_HPP(className, baseClass, version, classNameFormatted) \
378QX_DLL_EXPORT_TEMPLATE_QX_CLASS_HPP(className) \
379QX_REGISTER_CLASS_MAPPING_FCT_HPP(QX_DLL_EXPORT_HELPER, className) \
380QX_REGISTER_SERIALIZE_QDATASTREAM_HPP(QX_DLL_EXPORT_HELPER, className)
381// ---
382#define QX_REGISTER_HPP_EXPORT_DLL(className, baseClass, version) \
383QX_REGISTER_COMPLEX_CLASS_NAME_HPP_EXPORT_DLL(className, baseClass, version, className)
384#endif // _MSC_VER
385
386#endif // _QX_ENABLE_BOOST_SERIALIZATION
387
388#ifdef _QX_ENABLE_BOOST_SERIALIZATION
389#define QX_REGISTER_COMPLEX_CLASS_NAME_HPP_IMPORT_DLL(className, baseClass, version, classNameFormatted) \
390QX_REGISTER_COMPLEX_CLASS_NAME_HPP(className, baseClass, version, classNameFormatted) \
391QX_DLL_EXPORT_TEMPLATE_QX_CLASS_HPP(className) \
392QX_BOOST_EXPORT_SERIALIZATION_HPP(className) \
393QX_SERIALIZE_LIST_ARCHIVE_HPP(QX_DLL_IMPORT_HELPER, className) \
394QX_REGISTER_CLASS_MAPPING_FCT_HPP(QX_DLL_IMPORT_HELPER, className) \
395QX_REGISTER_SERIALIZE_QDATASTREAM_HPP(QX_DLL_IMPORT_HELPER, className)
396#else // _QX_ENABLE_BOOST_SERIALIZATION
397#define QX_REGISTER_COMPLEX_CLASS_NAME_HPP_IMPORT_DLL(className, baseClass, version, classNameFormatted) \
398QX_REGISTER_COMPLEX_CLASS_NAME_HPP(className, baseClass, version, classNameFormatted) \
399QX_DLL_EXPORT_TEMPLATE_QX_CLASS_HPP(className) \
400QX_REGISTER_CLASS_MAPPING_FCT_HPP(QX_DLL_IMPORT_HELPER, className) \
401QX_REGISTER_SERIALIZE_QDATASTREAM_HPP(QX_DLL_IMPORT_HELPER, className)
402#endif // _QX_ENABLE_BOOST_SERIALIZATION
403
404#define QX_REGISTER_HPP_IMPORT_DLL(className, baseClass, version) \
405QX_REGISTER_COMPLEX_CLASS_NAME_HPP_IMPORT_DLL(className, baseClass, version, className)
406
407#ifdef _QX_ENABLE_BOOST_SERIALIZATION
408#define QX_REGISTER_COMPLEX_CLASS_NAME_CPP_EXPORT_DLL(className, classNameFormatted) \
409QX_REGISTER_COMPLEX_CLASS_NAME_CPP(className, classNameFormatted) \
410QX_DLL_EXPORT_TEMPLATE_QX_CLASS_CPP(className) \
411QX_BOOST_EXPORT_SERIALIZATION_CPP(className) \
412QX_REGISTER_SERIALIZE_QDATASTREAM_CPP(className)
413#else // _QX_ENABLE_BOOST_SERIALIZATION
414#define QX_REGISTER_COMPLEX_CLASS_NAME_CPP_EXPORT_DLL(className, classNameFormatted) \
415QX_REGISTER_COMPLEX_CLASS_NAME_CPP(className, classNameFormatted) \
416QX_DLL_EXPORT_TEMPLATE_QX_CLASS_CPP(className) \
417QX_REGISTER_SERIALIZE_QDATASTREAM_CPP(className)
418#endif // _QX_ENABLE_BOOST_SERIALIZATION
419
420#define QX_REGISTER_CPP_EXPORT_DLL(className) \
421QX_REGISTER_COMPLEX_CLASS_NAME_CPP_EXPORT_DLL(className, className)
422
423#ifdef _MSC_VER
424#define QX_REGISTER_COMPLEX_CLASS_NAME_CPP_IMPORT_DLL(className, classNameFormatted) \
425QX_REGISTER_COMPLEX_CLASS_NAME_CPP(className, classNameFormatted)
426// ---
427#define QX_REGISTER_CPP_IMPORT_DLL(className) \
428QX_REGISTER_COMPLEX_CLASS_NAME_CPP_IMPORT_DLL(className, className)
429#else // _MSC_VER
430#ifdef _QX_ENABLE_BOOST_SERIALIZATION
431#define QX_REGISTER_COMPLEX_CLASS_NAME_CPP_IMPORT_DLL(className, classNameFormatted) \
432QX_REGISTER_COMPLEX_CLASS_NAME_CPP(className, classNameFormatted) \
433QX_DLL_EXPORT_TEMPLATE_QX_CLASS_CPP(className) \
434QX_BOOST_EXPORT_SERIALIZATION_CPP(className)
435#else // _QX_ENABLE_BOOST_SERIALIZATION
436#define QX_REGISTER_COMPLEX_CLASS_NAME_CPP_IMPORT_DLL(className, classNameFormatted) \
437QX_REGISTER_COMPLEX_CLASS_NAME_CPP(className, classNameFormatted) \
438QX_DLL_EXPORT_TEMPLATE_QX_CLASS_CPP(className)
439#endif // _QX_ENABLE_BOOST_SERIALIZATION
440// ---
441#define QX_REGISTER_CPP_IMPORT_DLL(className) \
442QX_REGISTER_COMPLEX_CLASS_NAME_CPP_IMPORT_DLL(className, className)
443#endif // _MSC_VER
444
445#ifdef _QX_ENABLE_BOOST_SERIALIZATION
446#define QX_REGISTER_ABSTRACT_CLASS(className) \
447BOOST_SERIALIZATION_ASSUME_ABSTRACT(className) \
448namespace boost { namespace serialization { \
449template<class Archive> \
450inline void load_construct_data(Archive & ar, className * t, const unsigned int file_version) \
451{ Q_UNUSED(ar); Q_UNUSED(t); Q_UNUSED(file_version); } \
452} } // namespace boost::serialization
453#else // _QX_ENABLE_BOOST_SERIALIZATION
454#define QX_REGISTER_ABSTRACT_CLASS(className) /* Nothing */
455#endif // _QX_ENABLE_BOOST_SERIALIZATION
456
457/* -- Create your macro (in your precompiled header) replacing "MY_DLL"
458#ifdef _BUILDING_MY_DLL
459#define QX_REGISTER_HPP_MY_DLL QX_REGISTER_HPP_EXPORT_DLL
460#define QX_REGISTER_CPP_MY_DLL QX_REGISTER_CPP_EXPORT_DLL
461#define QX_REGISTER_COMPLEX_CLASS_NAME_HPP_MY_DLL QX_REGISTER_COMPLEX_CLASS_NAME_HPP_EXPORT_DLL
462#define QX_REGISTER_COMPLEX_CLASS_NAME_CPP_MY_DLL QX_REGISTER_COMPLEX_CLASS_NAME_CPP_EXPORT_DLL
463#else
464#define QX_REGISTER_HPP_MY_DLL QX_REGISTER_HPP_IMPORT_DLL
465#define QX_REGISTER_CPP_MY_DLL QX_REGISTER_CPP_IMPORT_DLL
466#define QX_REGISTER_COMPLEX_CLASS_NAME_HPP_MY_DLL QX_REGISTER_COMPLEX_CLASS_NAME_HPP_IMPORT_DLL
467#define QX_REGISTER_COMPLEX_CLASS_NAME_CPP_MY_DLL QX_REGISTER_COMPLEX_CLASS_NAME_CPP_IMPORT_DLL
468#endif // _BUILDING_MY_DLL
469*/
470
471#ifdef _MSC_VER
472#pragma warning(pop)
473#endif // _MSC_VER
474
475#endif // _QX_REGISTER_H_
Concrete class registered into QxOrm context.
List of parameters to compile and build QxOrm library.
Concrete factory class to create object dynamically using the class name.
List of common macros used by QxOrm library.
Provide a generic Qt QDataStream serialization method (save/load) for classes registered into QxOrm c...
Register a version number per class.
qx::trait::is_qx_registered<T>::value : return true if T is registered into QxOrm context to provide ...