Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/serialization/map.hpp @ 101:c530137014c0
Update Boost headers (1.58.0)
author | Chris Cannam |
---|---|
date | Mon, 07 Sep 2015 11:12:49 +0100 |
parents | 2665513ce2d3 |
children |
line wrap: on
line diff
--- a/DEPENDENCIES/generic/include/boost/serialization/map.hpp Fri Sep 04 12:01:02 2015 +0100 +++ b/DEPENDENCIES/generic/include/boost/serialization/map.hpp Mon Sep 07 11:12:49 2015 +0100 @@ -2,7 +2,7 @@ #define BOOST_SERIALIZATION_MAP_HPP // MS compatible compilers support #pragma once -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) # pragma once #endif @@ -10,7 +10,7 @@ // serialization/map.hpp: // serialization for stl map templates -// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . +// (C) Copyright 2002-2014 Robert Ramey - http://www.rrsd.com . // 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) @@ -21,14 +21,51 @@ #include <boost/config.hpp> +#include <boost/archive/detail/basic_iarchive.hpp> +#include <boost/serialization/access.hpp> +#include <boost/serialization/nvp.hpp> +#include <boost/serialization/collection_size_type.hpp> +#include <boost/serialization/item_version_type.hpp> +#include <boost/serialization/detail/stack_constructor.hpp> + #include <boost/serialization/utility.hpp> #include <boost/serialization/collections_save_imp.hpp> -#include <boost/serialization/collections_load_imp.hpp> #include <boost/serialization/split_free.hpp> namespace boost { namespace serialization { +////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// implementation of serialization for map and mult-map STL containers + +template<class Archive, class Container> +inline void load_map_collection(Archive & ar, Container &s) +{ + s.clear(); + const boost::archive::library_version_type library_version( + ar.get_library_version() + ); + // retrieve number of elements + 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); + } + typename Container::iterator hint; + hint = s.begin(); + while(count-- > 0){ + typedef typename Container::value_type type; + detail::stack_construct<Archive, type> t(ar, item_version); + // borland fails silently w/o full namespace + ar >> boost::serialization::make_nvp("item", t.reference()); + typename Container::iterator result = s.insert(hint, t.reference()); + ar.reset_object_address(& (result->second), & t.reference().second); + hint = result; + } +} + +// map template<class Archive, class Type, class Key, class Compare, class Allocator > inline void save( Archive & ar, @@ -47,16 +84,7 @@ std::map<Key, Type, Compare, Allocator> &t, const unsigned int /* file_version */ ){ - boost::serialization::stl::load_collection< - Archive, - std::map<Key, Type, Compare, Allocator>, - boost::serialization::stl::archive_input_map< - Archive, std::map<Key, Type, Compare, Allocator> >, - boost::serialization::stl::no_reserve_imp<std::map< - Key, Type, Compare, Allocator - > - > - >(ar, t); + load_map_collection(ar, t); } // split non-intrusive serialization function member into separate @@ -89,16 +117,7 @@ std::multimap<Key, Type, Compare, Allocator> &t, const unsigned int /* file_version */ ){ - boost::serialization::stl::load_collection< - Archive, - std::multimap<Key, Type, Compare, Allocator>, - boost::serialization::stl::archive_input_map< - Archive, std::multimap<Key, Type, Compare, Allocator> - >, - boost::serialization::stl::no_reserve_imp< - std::multimap<Key, Type, Compare, Allocator> - > - >(ar, t); + load_map_collection(ar, t); } // split non-intrusive serialization function member into separate