QxOrm  1.4.4
C++ Object Relational Mapping library
QxExportDllMacroHpp.h
Go to the documentation of this file.
00001 /****************************************************************************
00002 **
00003 ** http://www.qxorm.com/
00004 ** Copyright (C) 2013 Lionel Marty (contact@qxorm.com)
00005 **
00006 ** This file is part of the QxOrm library
00007 **
00008 ** This software is provided 'as-is', without any express or implied
00009 ** warranty. In no event will the authors be held liable for any
00010 ** damages arising from the use of this software
00011 **
00012 ** Commercial Usage
00013 ** Licensees holding valid commercial QxOrm licenses may use this file in
00014 ** accordance with the commercial license agreement provided with the
00015 ** Software or, alternatively, in accordance with the terms contained in
00016 ** a written agreement between you and Lionel Marty
00017 **
00018 ** GNU General Public License Usage
00019 ** Alternatively, this file may be used under the terms of the GNU
00020 ** General Public License version 3.0 as published by the Free Software
00021 ** Foundation and appearing in the file 'license.gpl3.txt' included in the
00022 ** packaging of this file. Please review the following information to
00023 ** ensure the GNU General Public License version 3.0 requirements will be
00024 ** met : http://www.gnu.org/copyleft/gpl.html
00025 **
00026 ** If you are unsure which license is appropriate for your use, or
00027 ** if you have questions regarding the use of this file, please contact :
00028 ** contact@qxorm.com
00029 **
00030 ****************************************************************************/
00031 
00032 #ifdef _QX_ENABLE_BOOST_SERIALIZATION
00033 #ifndef _QX_EXPORT_DLL_MACRO_HPP_H_
00034 #define _QX_EXPORT_DLL_MACRO_HPP_H_
00035 
00036 #ifdef _MSC_VER
00037 #pragma once
00038 #endif
00039 
00040 #include <QxCommon/QxConfig.h>
00041 
00042 #include <QxSerialize/boost/QxSerialize_shared_ptr.h>
00043 
00044 #include <QxTraits/get_base_class.h>
00045 
00046 #if _QX_USE_EXPORT_DLL_BOOST_SERIALIZATION_SINGLETON
00047 
00048 #if _QX_SUPPORT_BOOST_SERIALIZE_SHARED_PTR_132
00049 #if (BOOST_VERSION >= 104100)
00050 #define QX_BOOST_132_SHARED_PTR_HELPER(T) \
00051 boost_132::detail::sp_counted_base_impl< T *, boost::serialization::null_deleter >
00052 #else // (BOOST_VERSION >= 104100)
00053 #define QX_BOOST_132_SHARED_PTR_HELPER(T) \
00054 boost_132::detail::sp_counted_base_impl< T *, boost_132::serialization::detail::null_deleter >
00055 #endif // (BOOST_VERSION >= 104100)
00056 #endif // _QX_SUPPORT_BOOST_SERIALIZE_SHARED_PTR_132
00057 
00058 #define QX_BOOST_EXPORT_SERIALIZATION_IMPL_POINTER_ISERIALIZER_HPP(ArchiveIn, ArchiveOut, T) \
00059 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(class, boost::archive::detail::pointer_iserializer, ArchiveIn, T) \
00060 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::pointer_iserializer, ArchiveIn, T)
00061 
00062 #define QX_BOOST_EXPORT_SERIALIZATION_IMPL_POINTER_OSERIALIZER_HPP(ArchiveIn, ArchiveOut, T) \
00063 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(class, boost::archive::detail::pointer_oserializer, ArchiveOut, T) \
00064 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::pointer_oserializer, ArchiveOut, T)
00065 
00066 #if _QX_SUPPORT_BOOST_SERIALIZE_SHARED_PTR_132
00067 #define QX_BOOST_EXPORT_SERIALIZATION_IMPL_POINTER_ISERIALIZER_BOOST_132_HELPER_HPP(ArchiveIn, ArchiveOut, T) \
00068 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(class, boost::archive::detail::pointer_iserializer, ArchiveIn, QX_BOOST_132_SHARED_PTR_HELPER(T)) \
00069 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::pointer_iserializer, ArchiveIn, QX_BOOST_132_SHARED_PTR_HELPER(T))
00070 #else // _QX_SUPPORT_BOOST_SERIALIZE_SHARED_PTR_132
00071 #define QX_BOOST_EXPORT_SERIALIZATION_IMPL_POINTER_ISERIALIZER_BOOST_132_HELPER_HPP(ArchiveIn, ArchiveOut, T) /* Nothing */
00072 #endif // _QX_SUPPORT_BOOST_SERIALIZE_SHARED_PTR_132
00073 
00074 #if _QX_SUPPORT_BOOST_SERIALIZE_SHARED_PTR_132
00075 #define QX_BOOST_EXPORT_SERIALIZATION_IMPL_POINTER_OSERIALIZER_BOOST_132_HELPER_HPP(ArchiveIn, ArchiveOut, T) \
00076 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(class, boost::archive::detail::pointer_oserializer, ArchiveOut, QX_BOOST_132_SHARED_PTR_HELPER(T)) \
00077 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::pointer_oserializer, ArchiveOut, QX_BOOST_132_SHARED_PTR_HELPER(T))
00078 #else // _QX_SUPPORT_BOOST_SERIALIZE_SHARED_PTR_132
00079 #define QX_BOOST_EXPORT_SERIALIZATION_IMPL_POINTER_OSERIALIZER_BOOST_132_HELPER_HPP(ArchiveIn, ArchiveOut, T) /* Nothing */
00080 #endif // _QX_SUPPORT_BOOST_SERIALIZE_SHARED_PTR_132
00081 
00082 #define QX_BOOST_EXPORT_SERIALIZATION_IMPL_ISERIALIZER_HPP(ArchiveIn, ArchiveOut, T) \
00083 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(class, boost::archive::detail::iserializer, ArchiveIn, T) \
00084 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::iserializer, ArchiveIn, T)
00085 
00086 #define QX_BOOST_EXPORT_SERIALIZATION_IMPL_OSERIALIZER_HPP(ArchiveIn, ArchiveOut, T) \
00087 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(class, boost::archive::detail::oserializer, ArchiveOut, T) \
00088 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::oserializer, ArchiveOut, T)
00089 
00090 #define QX_BOOST_EXPORT_SERIALIZATION_IMPL_EXTENDED_TYPE_ID_HPP(T) \
00091 QX_DLL_EXPORT_TEMPLATE_T_P1_HPP(class, boost::serialization::extended_type_info_typeid, T) \
00092 QX_DLL_EXPORT_TEMPLATE_T_U_P1_HPP(class, boost::serialization::singleton, boost::serialization::extended_type_info_typeid, T)
00093 
00094 #define QX_BOOST_EXPORT_SERIALIZATION_IMPL_VOID_CAST_PRIMITIVE_HPP(T) \
00095 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(class, boost::serialization::void_cast_detail::void_caster_primitive, T, QX_GET_BASE_CLASS_2(T)) \
00096 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::serialization::void_cast_detail::void_caster_primitive, T, QX_GET_BASE_CLASS_2(T))
00097 
00098 #define QX_BOOST_EXPORT_SERIALIZATION_IMPL_TYPE_INFO_IMPL_HPP(T) \
00099 QX_DLL_EXPORT_TEMPLATE_T_P1_HPP(struct, boost::serialization::type_info_implementation, T) \
00100 QX_DLL_EXPORT_TEMPLATE_T_U_P1_HPP(class, boost::serialization::singleton, boost::serialization::type_info_implementation, T)
00101 
00102 #if (BOOST_VERSION < 104100)
00103 #define QX_BOOST_EXPORT_SERIALIZATION_SAVE_POINTER_TYPE_HPP(ArchiveIn, ArchiveOut, T) \
00104 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(struct, boost::archive::detail::save_pointer_type, ArchiveOut, T *) \
00105 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::save_pointer_type, ArchiveOut, T *)
00106 #else // (BOOST_VERSION < 104100)
00107 #define QX_BOOST_EXPORT_SERIALIZATION_SAVE_POINTER_TYPE_HPP(ArchiveIn, ArchiveOut, T) /* Nothing */
00108 #endif // (BOOST_VERSION < 104100)
00109 
00110 #if (BOOST_VERSION < 104100)
00111 #define QX_BOOST_EXPORT_SERIALIZATION_SAVE_NON_POINTER_TYPE_HPP(ArchiveIn, ArchiveOut, T) \
00112 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(struct, boost::archive::detail::save_non_pointer_type, ArchiveOut, T) \
00113 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::save_non_pointer_type, ArchiveOut, T)
00114 #else // (BOOST_VERSION < 104100)
00115 #define QX_BOOST_EXPORT_SERIALIZATION_SAVE_NON_POINTER_TYPE_HPP(ArchiveIn, ArchiveOut, T) /* Nothing */
00116 #endif // (BOOST_VERSION < 104100)
00117 
00118 #if (BOOST_VERSION < 104100)
00119 #define QX_BOOST_EXPORT_SERIALIZATION_SAVE_ENUM_TYPE_HPP(ArchiveIn, ArchiveOut, T) \
00120 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(struct, boost::archive::detail::save_enum_type, ArchiveOut, T) \
00121 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::save_enum_type, ArchiveOut, T)
00122 #else // (BOOST_VERSION < 104100)
00123 #define QX_BOOST_EXPORT_SERIALIZATION_SAVE_ENUM_TYPE_HPP(ArchiveIn, ArchiveOut, T) /* Nothing */
00124 #endif // (BOOST_VERSION < 104100)
00125 
00126 #if (BOOST_VERSION < 104100)
00127 #define QX_BOOST_EXPORT_SERIALIZATION_SAVE_ARRAY_TYPE_HPP(ArchiveIn, ArchiveOut, T) \
00128 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(struct, boost::archive::detail::save_array_type, ArchiveOut, T) \
00129 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::save_array_type, ArchiveOut, T)
00130 #else // (BOOST_VERSION < 104100)
00131 #define QX_BOOST_EXPORT_SERIALIZATION_SAVE_ARRAY_TYPE_HPP(ArchiveIn, ArchiveOut, T) /* Nothing */
00132 #endif // (BOOST_VERSION < 104100)
00133 
00134 #if (BOOST_VERSION < 104100)
00135 #define QX_BOOST_EXPORT_SERIALIZATION_LOAD_POINTER_TYPE_HPP(ArchiveIn, ArchiveOut, T) \
00136 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(struct, boost::archive::detail::load_pointer_type, ArchiveIn, T *) \
00137 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::load_pointer_type, ArchiveIn, T *)
00138 #else // (BOOST_VERSION < 104100)
00139 #define QX_BOOST_EXPORT_SERIALIZATION_LOAD_POINTER_TYPE_HPP(ArchiveIn, ArchiveOut, T) /* Nothing */
00140 #endif // (BOOST_VERSION < 104100)
00141 
00142 #if (BOOST_VERSION < 104100)
00143 #define QX_BOOST_EXPORT_SERIALIZATION_LOAD_NON_POINTER_TYPE_HPP(ArchiveIn, ArchiveOut, T) \
00144 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(struct, boost::archive::detail::load_non_pointer_type, ArchiveIn, T) \
00145 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::load_non_pointer_type, ArchiveIn, T)
00146 #else // (BOOST_VERSION < 104100)
00147 #define QX_BOOST_EXPORT_SERIALIZATION_LOAD_NON_POINTER_TYPE_HPP(ArchiveIn, ArchiveOut, T) /* Nothing */
00148 #endif // (BOOST_VERSION < 104100)
00149 
00150 #if (BOOST_VERSION < 104100)
00151 #define QX_BOOST_EXPORT_SERIALIZATION_LOAD_ENUM_TYPE_HPP(ArchiveIn, ArchiveOut, T) \
00152 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(struct, boost::archive::detail::load_enum_type, ArchiveIn, T) \
00153 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::load_enum_type, ArchiveIn, T)
00154 #else // (BOOST_VERSION < 104100)
00155 #define QX_BOOST_EXPORT_SERIALIZATION_LOAD_ENUM_TYPE_HPP(ArchiveIn, ArchiveOut, T) /* Nothing */
00156 #endif // (BOOST_VERSION < 104100)
00157 
00158 #if (BOOST_VERSION < 104100)
00159 #define QX_BOOST_EXPORT_SERIALIZATION_LOAD_ARRAY_TYPE_HPP(ArchiveIn, ArchiveOut, T) \
00160 QX_DLL_EXPORT_TEMPLATE_T_P1_P2_HPP(struct, boost::archive::detail::load_array_type, ArchiveIn, T) \
00161 QX_DLL_EXPORT_TEMPLATE_T_U_P1_P2_HPP(class, boost::serialization::singleton, boost::archive::detail::load_array_type, ArchiveIn, T)
00162 #else // (BOOST_VERSION < 104100)
00163 #define QX_BOOST_EXPORT_SERIALIZATION_LOAD_ARRAY_TYPE_HPP(ArchiveIn, ArchiveOut, T) /* Nothing */
00164 #endif // (BOOST_VERSION < 104100)
00165 
00166 #define QX_BOOST_EXPORT_SERIALIZATION_IMPL_WITH_ARCHIVE_HPP(ArchiveIn, ArchiveOut, T) \
00167 QX_BOOST_EXPORT_SERIALIZATION_IMPL_ISERIALIZER_HPP(ArchiveIn, ArchiveOut, T) \
00168 QX_BOOST_EXPORT_SERIALIZATION_IMPL_OSERIALIZER_HPP(ArchiveIn, ArchiveOut, T) \
00169 QX_BOOST_EXPORT_SERIALIZATION_IMPL_POINTER_ISERIALIZER_HPP(ArchiveIn, ArchiveOut, T) \
00170 QX_BOOST_EXPORT_SERIALIZATION_IMPL_POINTER_OSERIALIZER_HPP(ArchiveIn, ArchiveOut, T) \
00171 QX_BOOST_EXPORT_SERIALIZATION_IMPL_POINTER_ISERIALIZER_BOOST_132_HELPER_HPP(ArchiveIn, ArchiveOut, T) \
00172 QX_BOOST_EXPORT_SERIALIZATION_IMPL_POINTER_OSERIALIZER_BOOST_132_HELPER_HPP(ArchiveIn, ArchiveOut, T) \
00173 QX_BOOST_EXPORT_SERIALIZATION_SAVE_POINTER_TYPE_HPP(ArchiveIn, ArchiveOut, T) \
00174 QX_BOOST_EXPORT_SERIALIZATION_LOAD_POINTER_TYPE_HPP(ArchiveIn, ArchiveOut, T)
00175 
00176 #define QX_BOOST_EXPORT_SERIALIZATION_IMPL_HPP(T) \
00177 QX_BOOST_EXPORT_SERIALIZATION_IMPL_EXTENDED_TYPE_ID_HPP(T) \
00178 /*
00179 QX_BOOST_EXPORT_SERIALIZATION_IMPL_VOID_CAST_PRIMITIVE_HPP(T) \
00180 QX_BOOST_EXPORT_SERIALIZATION_IMPL_TYPE_INFO_IMPL_HPP(T)
00181 */
00182 
00183 #if _QX_SERIALIZE_POLYMORPHIC
00184 #define QX_BOOST_EXPORT_SERIALIZATION_POLYMORPHIC_HPP(T) \
00185 QX_BOOST_EXPORT_SERIALIZATION_IMPL_WITH_ARCHIVE_HPP(boost::archive::polymorphic_iarchive, boost::archive::polymorphic_oarchive, T)
00186 #else // _QX_SERIALIZE_POLYMORPHIC
00187 #define QX_BOOST_EXPORT_SERIALIZATION_POLYMORPHIC_HPP(T) /* Nothing */
00188 #endif // _QX_SERIALIZE_POLYMORPHIC
00189 
00190 #if _QX_SERIALIZE_BINARY
00191 #define QX_BOOST_EXPORT_SERIALIZATION_BINARY_HPP(T) \
00192 QX_BOOST_EXPORT_SERIALIZATION_IMPL_WITH_ARCHIVE_HPP(boost::archive::binary_iarchive, boost::archive::binary_oarchive, T)
00193 #else // _QX_SERIALIZE_BINARY
00194 #define QX_BOOST_EXPORT_SERIALIZATION_BINARY_HPP(T) /* Nothing */
00195 #endif // _QX_SERIALIZE_BINARY
00196 
00197 #if _QX_SERIALIZE_TEXT
00198 #define QX_BOOST_EXPORT_SERIALIZATION_TEXT_HPP(T) \
00199 QX_BOOST_EXPORT_SERIALIZATION_IMPL_WITH_ARCHIVE_HPP(boost::archive::text_iarchive, boost::archive::text_oarchive, T)
00200 #else // _QX_SERIALIZE_TEXT
00201 #define QX_BOOST_EXPORT_SERIALIZATION_TEXT_HPP(T) /* Nothing */
00202 #endif // _QX_SERIALIZE_TEXT
00203 
00204 #if _QX_SERIALIZE_XML
00205 #define QX_BOOST_EXPORT_SERIALIZATION_XML_HPP(T) \
00206 QX_BOOST_EXPORT_SERIALIZATION_IMPL_WITH_ARCHIVE_HPP(boost::archive::xml_iarchive, boost::archive::xml_oarchive, T)
00207 #else // _QX_SERIALIZE_XML
00208 #define QX_BOOST_EXPORT_SERIALIZATION_XML_HPP(T) /* Nothing */
00209 #endif // _QX_SERIALIZE_XML
00210 
00211 #if _QX_SERIALIZE_PORTABLE_BINARY
00212 #define QX_BOOST_EXPORT_SERIALIZATION_PORTABLE_BINARY_HPP(T) \
00213 QX_BOOST_EXPORT_SERIALIZATION_IMPL_WITH_ARCHIVE_HPP(eos::portable_iarchive, eos::portable_oarchive, T)
00214 #else // _QX_SERIALIZE_PORTABLE_BINARY
00215 #define QX_BOOST_EXPORT_SERIALIZATION_PORTABLE_BINARY_HPP(T) /* Nothing */
00216 #endif // _QX_SERIALIZE_PORTABLE_BINARY
00217 
00218 #if _QX_SERIALIZE_WIDE_BINARY
00219 #define QX_BOOST_EXPORT_SERIALIZATION_WIDE_BINARY_HPP(T) \
00220 QX_BOOST_EXPORT_SERIALIZATION_IMPL_WITH_ARCHIVE_HPP(boost::archive::binary_wiarchive, boost::archive::binary_woarchive, T)
00221 #else // _QX_SERIALIZE_WIDE_BINARY
00222 #define QX_BOOST_EXPORT_SERIALIZATION_WIDE_BINARY_HPP(T) /* Nothing */
00223 #endif // _QX_SERIALIZE_WIDE_BINARY
00224 
00225 #if _QX_SERIALIZE_WIDE_TEXT
00226 #define QX_BOOST_EXPORT_SERIALIZATION_WIDE_TEXT_HPP(T) \
00227 QX_BOOST_EXPORT_SERIALIZATION_IMPL_WITH_ARCHIVE_HPP(boost::archive::text_wiarchive, boost::archive::text_woarchive, T)
00228 #else // _QX_SERIALIZE_WIDE_TEXT
00229 #define QX_BOOST_EXPORT_SERIALIZATION_WIDE_TEXT_HPP(T) /* Nothing */
00230 #endif // _QX_SERIALIZE_WIDE_TEXT
00231 
00232 #if _QX_SERIALIZE_WIDE_XML
00233 #define QX_BOOST_EXPORT_SERIALIZATION_WIDE_XML_HPP(T) \
00234 QX_BOOST_EXPORT_SERIALIZATION_IMPL_WITH_ARCHIVE_HPP(boost::archive::xml_wiarchive, boost::archive::xml_woarchive, T)
00235 #else // _QX_SERIALIZE_WIDE_XML
00236 #define QX_BOOST_EXPORT_SERIALIZATION_WIDE_XML_HPP(T) /* Nothing */
00237 #endif // _QX_SERIALIZE_WIDE_XML
00238 
00239 #define QX_BOOST_EXPORT_SERIALIZATION_HPP(T) \
00240 QX_BOOST_EXPORT_SERIALIZATION_IMPL_HPP(T) \
00241 QX_BOOST_EXPORT_SERIALIZATION_POLYMORPHIC_HPP(T) \
00242 QX_BOOST_EXPORT_SERIALIZATION_BINARY_HPP(T) \
00243 QX_BOOST_EXPORT_SERIALIZATION_TEXT_HPP(T) \
00244 QX_BOOST_EXPORT_SERIALIZATION_XML_HPP(T) \
00245 QX_BOOST_EXPORT_SERIALIZATION_PORTABLE_BINARY_HPP(T) \
00246 QX_BOOST_EXPORT_SERIALIZATION_WIDE_BINARY_HPP(T) \
00247 QX_BOOST_EXPORT_SERIALIZATION_WIDE_TEXT_HPP(T) \
00248 QX_BOOST_EXPORT_SERIALIZATION_WIDE_XML_HPP(T)
00249 
00250 #else // _QX_USE_EXPORT_DLL_BOOST_SERIALIZATION_SINGLETON
00251 
00252 #define QX_BOOST_EXPORT_SERIALIZATION_HPP(T) /* Nothing */
00253 
00254 #endif // _QX_USE_EXPORT_DLL_BOOST_SERIALIZATION_SINGLETON
00255 #endif // _QX_EXPORT_DLL_MACRO_HPP_H_
00256 #endif // _QX_ENABLE_BOOST_SERIALIZATION