32#ifdef _QX_ENABLE_BOOST_SERIALIZATION
33#ifndef _QX_BOOST_SERIALIZATION_EXPORT_HPP_
34#define _QX_BOOST_SERIALIZATION_EXPORT_HPP_
42#if _QX_USE_MODIFY_BOOST_SERIALIZATION_EXPORT_HPP
47#include <boost/config.hpp>
48#include <boost/preprocessor/stringize.hpp>
50#ifndef BOOST_SERIALIZATION_DEFAULT_TYPE_INFO
51 #include <boost/serialization/extended_type_info_typeid.hpp>
54#include <boost/serialization/static_warning.hpp>
55#include <boost/serialization/type_info_implementation.hpp>
56#include <boost/serialization/assume_abstract.hpp>
57#include <boost/serialization/force_include.hpp>
58#include <boost/serialization/singleton.hpp>
60#include <boost/archive/detail/register_archive.hpp>
61#include <boost/mpl/assert.hpp>
62#include <boost/mpl/and.hpp>
63#include <boost/mpl/not.hpp>
64#include <boost/mpl/bool.hpp>
72class basic_pointer_iserializer;
73class basic_pointer_oserializer;
75template<
class Archive,
class T>
76class pointer_iserializer;
77template<
class Archive,
class T>
78class pointer_oserializer;
80template <
class Archive,
class Serializable>
83 static const basic_pointer_iserializer &
84 enable_load(mpl::true_){
85 return boost::serialization::singleton<
86 pointer_iserializer<Archive, Serializable>
87 >::get_const_instance();
90 static const basic_pointer_oserializer &
91 enable_save(mpl::true_){
92 return boost::serialization::singleton<
93 pointer_oserializer<Archive, Serializable>
94 >::get_const_instance();
96 inline static void enable_load(mpl::false_) {}
97 inline static void enable_save(mpl::false_) {}
103struct instantiate_function {};
105template <
class Archive,
class Serializable>
106struct ptr_serialization_support
108# if defined(BOOST_MSVC)
109 virtual BOOST_DLLEXPORT
void instantiate()
QX_USED;
110# elif defined(__BORLANDC__)
111 static BOOST_DLLEXPORT
void instantiate()
QX_USED;
112 enum { x =
sizeof(instantiate(),3) };
114 static BOOST_DLLEXPORT
void instantiate()
QX_USED;
115 typedef instantiate_function<
116 &ptr_serialization_support::instantiate
121template <
class Archive,
class Serializable>
123ptr_serialization_support<Archive,Serializable>::instantiate()
125 export_impl<Archive,Serializable>::enable_save(
126 #
if ! defined(__BORLANDC__)
127 BOOST_DEDUCED_TYPENAME
132 export_impl<Archive,Serializable>::enable_load(
133 #
if ! defined(__BORLANDC__)
134 BOOST_DEDUCED_TYPENAME
136 Archive::is_loading()
141struct guid_initializer
143 const guid_initializer & export_guid(
char const* , mpl::false_){
147 instantiate_ptr_serialization((T*)0, 0, adl_tag());
150 const guid_initializer & export_guid(
char const* , mpl::true_){
153 const guid_initializer & export_guid(
char const* key){
154 BOOST_STATIC_WARNING(boost::is_polymorphic<T>::value);
156 boost::serialization::singleton<
157 BOOST_DEDUCED_TYPENAME
158 boost::serialization::type_info_implementation<T>::type
159 >::get_mutable_instance().key_register(key);
164 return export_guid(key, boost::serialization::is_abstract<T>());
172#define BOOST_CLASS_EXPORT_GUID(T, K) \
175 ::boost::archive::detail::guid_initializer< T > const & \
176 boost_serialization_guid_initializer_##T \
177 = ::boost::serialization::singleton< \
178 ::boost::archive::detail::guid_initializer< T > \
179 >::get_mutable_instance().export_guid(K); \
184#define BOOST_CLASS_EXPORT_CHECK(T) \
185 BOOST_STATIC_WARNING( \
186 boost::is_polymorphic<U>::value \
193#define BOOST_CLASS_EXPORT(T) \
194 BOOST_CLASS_EXPORT_GUID( \
196 BOOST_PP_STRINGIZE(T) \
List of parameters to compile and build QxOrm library.