Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef CLEAN_SERIALIZATOR_HPP_
00039 #define CLEAN_SERIALIZATOR_HPP_
00040 #include <boost/archive/detail/oserializer.hpp>
00041 #include <boost/archive/detail/iserializer.hpp>
00042 #include <boost/serialization/array.hpp>
00043
00050 #define PP_LABUST_CLEAN_ARRAY_OSERIALIZATOR_IMPL(CLASS_NAME) \
00051 namespace boost{namespace archive{namespace detail{ \
00052 template<> \
00053 struct save_array_type<CLASS_NAME> \
00054 { \
00055 template<class T> \
00056 static void invoke(CLASS_NAME &ar, const T &t){ \
00057 typedef BOOST_DEDUCED_TYPENAME boost::remove_extent< T >::type value_type; \
00058 boost::archive::save_access::end_preamble(ar); \
00059 std::size_t c = sizeof(t) / ( \
00060 static_cast<const char *>(static_cast<const void *>(&t[1])) \
00061 - static_cast<const char *>(static_cast<const void *>(&t[0])) \
00062 ); \
00063 boost::serialization::collection_size_type count(c); \
00064 ar << boost::serialization::make_array(static_cast<value_type const*>(&t[0]),count); \
00065 } \
00066 };}}};
00067
00074 #define PP_LABUST_CLEAN_ARRAY_ISERIALIZATOR_IMPL(CLASS_NAME) \
00075 namespace boost{namespace archive{namespace detail{ \
00076 template<> \
00077 struct load_array_type<CLASS_NAME> { \
00078 template<class T> \
00079 static void invoke(CLASS_NAME &ar, T &t){ \
00080 typedef BOOST_DEDUCED_TYPENAME remove_extent< T >::type value_type; \
00081 std::size_t current_count = sizeof(t) / ( \
00082 static_cast<char *>(static_cast<void *>(&t[1])) \
00083 - static_cast<char *>(static_cast<void *>(&t[0])) \
00084 ); \
00085 boost::serialization::collection_size_type count(current_count); \
00086 ar >> serialization::make_array(static_cast<value_type*>(&t[0]),count); \
00087 } \
00088 };\
00089 }}};\
00090
00091
00092 #endif