| #ifndef BOOST_SERIALIZATION_BOOST_SMALL_VECTOR_HPP |
| #define BOOST_SERIALIZATION_BOOST_SMALL_VECTOR_HPP |
|
|
| |
| #if defined(_MSC_VER) |
| #pragma once |
| #endif |
|
|
| |
| |
|
|
| |
| |
| |
| |
| |
|
|
| |
|
|
| #include <boost/container/small_vector.hpp> |
|
|
| #include <boost/config.hpp> |
| #include <boost/detail/workaround.hpp> |
|
|
| #include <boost/archive/detail/basic_iarchive.hpp> |
| #include <boost/serialization/access.hpp> |
| #include <boost/serialization/collection_size_type.hpp> |
| #include <boost/serialization/item_version_type.hpp> |
| #include <boost/serialization/nvp.hpp> |
|
|
| #include <boost/mpl/bool_fwd.hpp> |
| #include <boost/mpl/if.hpp> |
| #include <boost/serialization/array_wrapper.hpp> |
| #include <boost/serialization/collections_load_imp.hpp> |
| #include <boost/serialization/collections_save_imp.hpp> |
| #include <boost/serialization/split_free.hpp> |
|
|
| |
| #ifndef BOOST_SERIALIZATION_VECTOR_VERSIONED |
| #define BOOST_SERIALIZATION_VECTOR_VERSIONED(V) (V == 4 || V == 5) |
| #endif |
|
|
| namespace boost { |
| namespace serialization { |
|
|
| |
| |
|
|
| |
|
|
| template <class Archive, class U, std::size_t N> |
| inline void save(Archive& ar, const boost::container::small_vector<U, N>& t, |
| const unsigned int , mpl::false_) { |
| boost::serialization::stl::save_collection<Archive, boost::container::small_vector<U, N>>(ar, |
| t); |
| } |
|
|
| template <class Archive, class U, std::size_t N> |
| inline void load(Archive& ar, boost::container::small_vector<U, N>& t, |
| const unsigned int , mpl::false_) { |
| const boost::archive::library_version_type library_version(ar.get_library_version()); |
| |
| item_version_type item_version(0); |
| collection_size_type count; |
| ar >> BOOST_SERIALIZATION_NVP(count); |
| if (boost::archive::library_version_type(3) < library_version) { |
| ar >> BOOST_SERIALIZATION_NVP(item_version); |
| } |
| t.reserve(count); |
| stl::collection_load_impl(ar, t, count, item_version); |
| } |
|
|
| |
|
|
| template <class Archive, class U, std::size_t N> |
| inline void save(Archive& ar, const boost::container::small_vector<U, N>& t, |
| const unsigned int , mpl::true_) { |
| const collection_size_type count(t.size()); |
| ar << BOOST_SERIALIZATION_NVP(count); |
| if (!t.empty()) |
| |
| ar << serialization::make_array<const U, collection_size_type>(static_cast<const U*>(&t[0]), |
| count); |
| } |
|
|
| template <class Archive, class U, std::size_t N> |
| inline void load(Archive& ar, boost::container::small_vector<U, N>& t, |
| const unsigned int , mpl::true_) { |
| collection_size_type count(t.size()); |
| ar >> BOOST_SERIALIZATION_NVP(count); |
| t.resize(count); |
| unsigned int item_version = 0; |
| if (BOOST_SERIALIZATION_VECTOR_VERSIONED(ar.get_library_version())) { |
| ar >> BOOST_SERIALIZATION_NVP(item_version); |
| } |
| if (!t.empty()) |
| |
| ar >> serialization::make_array<U, collection_size_type>(static_cast<U*>(&t[0]), count); |
| } |
|
|
| |
|
|
| template <class Archive, class U, std::size_t N> |
| inline void save(Archive& ar, const boost::container::small_vector<U, N>& t, |
| const unsigned int file_version) { |
| typedef typename boost::serialization::use_array_optimization<Archive>::template apply< |
| typename remove_const<U>::type>::type use_optimized; |
| save(ar, t, file_version, use_optimized()); |
| } |
|
|
| template <class Archive, class U, std::size_t N> |
| inline void load(Archive& ar, boost::container::small_vector<U, N>& t, |
| const unsigned int file_version) { |
| #ifdef BOOST_SERIALIZATION_VECTOR_135_HPP |
| if (ar.get_library_version() == boost::archive::library_version_type(5)) { |
| load(ar, t, file_version, boost::is_arithmetic<U>()); |
| return; |
| } |
| #endif |
| typedef typename boost::serialization::use_array_optimization<Archive>::template apply< |
| typename remove_const<U>::type>::type use_optimized; |
| load(ar, t, file_version, use_optimized()); |
| } |
|
|
| |
| |
| template <class Archive, class U, std::size_t N> |
| inline void serialize(Archive& ar, boost::container::small_vector<U, N>& t, |
| const unsigned int file_version) { |
| boost::serialization::split_free(ar, t, file_version); |
| } |
|
|
| |
| |
| template <class Archive, std::size_t N> |
| inline void serialize(Archive& ar, boost::container::small_vector<bool, N>& t, |
| const unsigned int file_version) { |
| boost::serialization::split_free(ar, t, file_version); |
| } |
|
|
| } |
| } |
|
|
| #endif |
|
|