|
1 #ifndef BOOST_SERIALIZATION_SPLIT_MEMBER_HPP |
|
2 #define BOOST_SERIALIZATION_SPLIT_MEMBER_HPP |
|
3 |
|
4 // MS compatible compilers support #pragma once |
|
5 #if defined(_MSC_VER) && (_MSC_VER >= 1020) |
|
6 # pragma once |
|
7 #endif |
|
8 |
|
9 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 |
|
10 // split_member.hpp: |
|
11 |
|
12 // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . |
|
13 // Use, modification and distribution is subject to the Boost Software |
|
14 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at |
|
15 // http://www.boost.org/LICENSE_1_0.txt) |
|
16 |
|
17 // See http://www.boost.org for updates, documentation, and revision history. |
|
18 |
|
19 #include <boost/config.hpp> |
|
20 #include <boost/mpl/eval_if.hpp> |
|
21 #include <boost/mpl/identity.hpp> |
|
22 |
|
23 #include <boost/serialization/access.hpp> |
|
24 |
|
25 namespace boost { |
|
26 namespace archive { |
|
27 namespace detail { |
|
28 template<class Archive> class interface_oarchive; |
|
29 template<class Archive> class interface_iarchive; |
|
30 } // namespace detail |
|
31 } // namespace archive |
|
32 |
|
33 namespace serialization { |
|
34 namespace detail { |
|
35 |
|
36 template<class Archive, class T> |
|
37 struct member_saver { |
|
38 static void invoke( |
|
39 Archive & ar, |
|
40 const T & t, |
|
41 const unsigned int file_version |
|
42 ){ |
|
43 access::member_save(ar, t, file_version); |
|
44 } |
|
45 }; |
|
46 |
|
47 template<class Archive, class T> |
|
48 struct member_loader { |
|
49 static void invoke( |
|
50 Archive & ar, |
|
51 T & t, |
|
52 const unsigned int file_version |
|
53 ){ |
|
54 access::member_load(ar, t, file_version); |
|
55 } |
|
56 }; |
|
57 |
|
58 } // detail |
|
59 |
|
60 template<class Archive, class T> |
|
61 inline void split_member( |
|
62 Archive & ar, T & t, const unsigned int file_version |
|
63 ){ |
|
64 typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< |
|
65 BOOST_DEDUCED_TYPENAME Archive::is_saving, |
|
66 mpl::identity<detail::member_saver<Archive, T> >, |
|
67 mpl::identity<detail::member_loader<Archive, T> > |
|
68 >::type typex; |
|
69 typex::invoke(ar, t, file_version); |
|
70 } |
|
71 |
|
72 } // namespace serialization |
|
73 } // namespace boost |
|
74 |
|
75 // split member function serialize funcition into save/load |
|
76 #define BOOST_SERIALIZATION_SPLIT_MEMBER() \ |
|
77 template<class Archive> \ |
|
78 void serialize( \ |
|
79 Archive &ar, \ |
|
80 const unsigned int file_version \ |
|
81 ){ \ |
|
82 boost::serialization::split_member(ar, *this, file_version); \ |
|
83 } \ |
|
84 /**/ |
|
85 |
|
86 #endif // BOOST_SERIALIZATION_SPLIT_MEMBER_HPP |