File indexing completed on 2025-12-16 10:07:38
0001
0002
0003
0004
0005
0006 #ifndef BOOST_PTR_CONTAINER_DETAIL_SERIALIZE_REVERSIBLE_PTR_CONTAINER_HPP
0007 #define BOOST_PTR_CONTAINER_DETAIL_SERIALIZE_REVERSIBLE_PTR_CONTAINER_HPP
0008
0009 #include <boost/ptr_container/detail/reversible_ptr_container.hpp>
0010 #include <boost/ptr_container/detail/serialize_xml_names.hpp>
0011 #include <boost/core/serialization.hpp>
0012
0013 namespace boost
0014 {
0015
0016 namespace ptr_container_detail
0017 {
0018
0019 template<class Archive, class Config, class CloneAllocator>
0020 void save_helper(Archive& ar, const ptr_container_detail::reversible_ptr_container<Config, CloneAllocator>& c)
0021 {
0022 typedef ptr_container_detail::reversible_ptr_container<Config, CloneAllocator> container_type;
0023 typedef BOOST_DEDUCED_TYPENAME container_type::const_iterator const_iterator;
0024 typedef BOOST_DEDUCED_TYPENAME container_type::value_type value_type;
0025
0026 const_iterator i = c.begin(), e = c.end();
0027 for(; i != e; ++i)
0028 ar << boost::serialization::make_nvp( ptr_container_detail::item(),
0029 ptr_container_detail::serialize_as_const(static_cast<value_type>(*i.base())));
0030 }
0031
0032 template<class Archive, class Config, class CloneAllocator>
0033 void load_helper(Archive& ar, ptr_container_detail::reversible_ptr_container<Config, CloneAllocator>& c,
0034 BOOST_DEDUCED_TYPENAME ptr_container_detail::reversible_ptr_container<Config, CloneAllocator>::size_type n)
0035 {
0036 typedef ptr_container_detail::reversible_ptr_container<Config, CloneAllocator> container_type;
0037 typedef BOOST_DEDUCED_TYPENAME container_type::size_type size_type;
0038 typedef BOOST_DEDUCED_TYPENAME container_type::value_type value_type;
0039
0040
0041
0042
0043
0044 c.clear();
0045 for(size_type i = 0u; i != n; ++i)
0046 {
0047
0048
0049
0050
0051 value_type ptr;
0052 ar >> boost::serialization::make_nvp( ptr_container_detail::item(), ptr );
0053 c.insert(c.end(), ptr);
0054 }
0055 }
0056
0057 }
0058
0059 namespace serialization
0060 {
0061
0062 template<class Archive, class Config, class CloneAllocator>
0063 void save(Archive& ar, const ptr_container_detail::reversible_ptr_container<Config, CloneAllocator>& c, unsigned int )
0064 {
0065 ar << boost::serialization::make_nvp( ptr_container_detail::count(),
0066 ptr_container_detail::serialize_as_const(c.size()) );
0067 ptr_container_detail::save_helper(ar, c);
0068 }
0069
0070 template<class Archive, class Config, class CloneAllocator>
0071 void load(Archive& ar, ptr_container_detail::reversible_ptr_container<Config, CloneAllocator>& c, unsigned int )
0072 {
0073 typedef ptr_container_detail::reversible_ptr_container<Config, CloneAllocator> container_type;
0074 typedef BOOST_DEDUCED_TYPENAME container_type::size_type size_type;
0075
0076 size_type n;
0077 ar >> boost::serialization::make_nvp( ptr_container_detail::count(), n );
0078 ptr_container_detail::load_helper(ar, c, n);
0079
0080 }
0081
0082 }
0083 }
0084
0085 #endif