Chris@16
|
1 #ifndef BOOST_SERIALIZATION_COMPLEX_HPP
|
Chris@16
|
2 #define BOOST_SERIALIZATION_COMPLEX_HPP
|
Chris@16
|
3
|
Chris@16
|
4 // MS compatible compilers support #pragma once
|
Chris@101
|
5 #if defined(_MSC_VER)
|
Chris@16
|
6 # pragma once
|
Chris@16
|
7 #endif
|
Chris@16
|
8
|
Chris@16
|
9 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
|
Chris@16
|
10 // serialization/utility.hpp:
|
Chris@16
|
11 // serialization for stl utility templates
|
Chris@16
|
12
|
Chris@16
|
13 // (C) Copyright 2007 Matthias Troyer .
|
Chris@16
|
14 // Use, modification and distribution is subject to the Boost Software
|
Chris@16
|
15 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
16 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
17
|
Chris@16
|
18 // See http://www.boost.org for updates, documentation, and revision history.
|
Chris@16
|
19
|
Chris@16
|
20 #include <complex>
|
Chris@16
|
21 #include <boost/config.hpp>
|
Chris@16
|
22
|
Chris@16
|
23 #include <boost/serialization/nvp.hpp>
|
Chris@16
|
24 #include <boost/serialization/is_bitwise_serializable.hpp>
|
Chris@16
|
25 #include <boost/serialization/split_free.hpp>
|
Chris@16
|
26
|
Chris@16
|
27 namespace boost {
|
Chris@16
|
28 namespace serialization {
|
Chris@16
|
29
|
Chris@16
|
30 template<class Archive, class T>
|
Chris@16
|
31 inline void serialize(
|
Chris@16
|
32 Archive & ar,
|
Chris@16
|
33 std::complex< T > & t,
|
Chris@16
|
34 const unsigned int file_version
|
Chris@16
|
35 ){
|
Chris@16
|
36 boost::serialization::split_free(ar, t, file_version);
|
Chris@16
|
37 }
|
Chris@16
|
38
|
Chris@16
|
39 template<class Archive, class T>
|
Chris@16
|
40 inline void save(
|
Chris@16
|
41 Archive & ar,
|
Chris@16
|
42 std::complex< T > const & t,
|
Chris@16
|
43 const unsigned int /* file_version */
|
Chris@16
|
44 ){
|
Chris@16
|
45 const T re = t.real();
|
Chris@16
|
46 const T im = t.imag();
|
Chris@16
|
47 ar << boost::serialization::make_nvp("real", re);
|
Chris@16
|
48 ar << boost::serialization::make_nvp("imag", im);
|
Chris@16
|
49 }
|
Chris@16
|
50
|
Chris@16
|
51 template<class Archive, class T>
|
Chris@16
|
52 inline void load(
|
Chris@16
|
53 Archive & ar,
|
Chris@16
|
54 std::complex< T >& t,
|
Chris@16
|
55 const unsigned int /* file_version */
|
Chris@16
|
56 ){
|
Chris@16
|
57 T re;
|
Chris@16
|
58 T im;
|
Chris@16
|
59 ar >> boost::serialization::make_nvp("real", re);
|
Chris@16
|
60 ar >> boost::serialization::make_nvp("imag", im);
|
Chris@16
|
61 t = std::complex< T >(re,im);
|
Chris@16
|
62 }
|
Chris@16
|
63
|
Chris@16
|
64 // specialization of serialization traits for complex
|
Chris@16
|
65 template <class T>
|
Chris@16
|
66 struct is_bitwise_serializable<std::complex< T > >
|
Chris@16
|
67 : public is_bitwise_serializable< T > {};
|
Chris@16
|
68
|
Chris@16
|
69 template <class T>
|
Chris@16
|
70 struct implementation_level<std::complex< T > >
|
Chris@16
|
71 : mpl::int_<object_serializable> {} ;
|
Chris@16
|
72
|
Chris@16
|
73 // treat complex just like builtin arithmetic types for tracking
|
Chris@16
|
74 template <class T>
|
Chris@16
|
75 struct tracking_level<std::complex< T > >
|
Chris@16
|
76 : mpl::int_<track_never> {} ;
|
Chris@16
|
77
|
Chris@16
|
78 } // serialization
|
Chris@16
|
79 } // namespace boost
|
Chris@16
|
80
|
Chris@16
|
81 #endif // BOOST_SERIALIZATION_COMPLEX_HPP
|