Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/serialization/split_free.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
1 #ifndef BOOST_SERIALIZATION_SPLIT_FREE_HPP | |
2 #define BOOST_SERIALIZATION_SPLIT_FREE_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_free.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 #include <boost/serialization/serialization.hpp> | |
23 | |
24 namespace boost { | |
25 namespace archive { | |
26 namespace detail { | |
27 template<class Archive> class interface_oarchive; | |
28 template<class Archive> class interface_iarchive; | |
29 } // namespace detail | |
30 } // namespace archive | |
31 | |
32 namespace serialization { | |
33 | |
34 //namespace detail { | |
35 template<class Archive, class T> | |
36 struct free_saver { | |
37 static void invoke( | |
38 Archive & ar, | |
39 const T & t, | |
40 const unsigned int file_version | |
41 ){ | |
42 // use function overload (version_type) to workaround | |
43 // two-phase lookup issue | |
44 const version_type v(file_version); | |
45 save(ar, t, v); | |
46 } | |
47 }; | |
48 template<class Archive, class T> | |
49 struct free_loader { | |
50 static void invoke( | |
51 Archive & ar, | |
52 T & t, | |
53 const unsigned int file_version | |
54 ){ | |
55 // use function overload (version_type) to workaround | |
56 // two-phase lookup issue | |
57 const version_type v(file_version); | |
58 load(ar, t, v); | |
59 } | |
60 }; | |
61 //} // namespace detail | |
62 | |
63 template<class Archive, class T> | |
64 inline void split_free( | |
65 Archive & ar, | |
66 T & t, | |
67 const unsigned int file_version | |
68 ){ | |
69 typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< | |
70 BOOST_DEDUCED_TYPENAME Archive::is_saving, | |
71 mpl::identity</* detail:: */ free_saver<Archive, T> >, | |
72 mpl::identity</* detail:: */ free_loader<Archive, T> > | |
73 >::type typex; | |
74 typex::invoke(ar, t, file_version); | |
75 } | |
76 | |
77 } // namespace serialization | |
78 } // namespace boost | |
79 | |
80 #define BOOST_SERIALIZATION_SPLIT_FREE(T) \ | |
81 namespace boost { namespace serialization { \ | |
82 template<class Archive> \ | |
83 inline void serialize( \ | |
84 Archive & ar, \ | |
85 T & t, \ | |
86 const unsigned int file_version \ | |
87 ){ \ | |
88 split_free(ar, t, file_version); \ | |
89 } \ | |
90 }} | |
91 /**/ | |
92 | |
93 #endif // BOOST_SERIALIZATION_SPLIT_FREE_HPP |