#ifndef BOOST_SERIALIZATION_COMPLEX_HPP | |
#define BOOST_SERIALIZATION_COMPLEX_HPP | |
// MS compatible compilers support #pragma once | |
#if defined(_MSC_VER) && (_MSC_VER >= 1020) | |
# pragma once | |
#endif | |
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 | |
// serialization/utility.hpp: | |
// serialization for stl utility templates | |
// (C) Copyright 2007 Matthias Troyer . | |
// Use, modification and distribution is subject to the Boost Software | |
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at | |
// http://www.boost.org/LICENSE_1_0.txt) | |
// See http://www.boost.org for updates, documentation, and revision history. | |
#include <complex> | |
#include <boost/config.hpp> | |
#include <boost/serialization/nvp.hpp> | |
#include <boost/serialization/is_bitwise_serializable.hpp> | |
#include <boost/serialization/split_free.hpp> | |
namespace boost { | |
namespace serialization { | |
template<class Archive, class T> | |
inline void serialize( | |
Archive & ar, | |
std::complex< T > & t, | |
const unsigned int file_version | |
){ | |
boost::serialization::split_free(ar, t, file_version); | |
} | |
template<class Archive, class T> | |
inline void save( | |
Archive & ar, | |
std::complex< T > const & t, | |
const unsigned int /* file_version */ | |
){ | |
const T re = t.real(); | |
const T im = t.imag(); | |
ar << boost::serialization::make_nvp("real", re); | |
ar << boost::serialization::make_nvp("imag", im); | |
} | |
template<class Archive, class T> | |
inline void load( | |
Archive & ar, | |
std::complex< T >& t, | |
const unsigned int /* file_version */ | |
){ | |
T re; | |
T im; | |
ar >> boost::serialization::make_nvp("real", re); | |
ar >> boost::serialization::make_nvp("imag", im); | |
t = std::complex< T >(re,im); | |
} | |
// specialization of serialization traits for complex | |
template <class T> | |
struct is_bitwise_serializable<std::complex< T > > | |
: public is_bitwise_serializable< T > {}; | |
template <class T> | |
struct implementation_level<std::complex< T > > | |
: mpl::int_<object_serializable> {} ; | |
// treat complex just like builtin arithmetic types for tracking | |
template <class T> | |
struct tracking_level<std::complex< T > > | |
: mpl::int_<track_never> {} ; | |
} // serialization | |
} // namespace boost | |
#endif // BOOST_SERIALIZATION_COMPLEX_HPP |