Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 10:07:38

0001 // Copyright Sebastian Ramacher, 2007.
0002 // Distributed under the Boost Software License, Version 1.0. (See
0003 // accompanying file LICENSE_1_0.txt or copy at
0004 // http://www.boost.org/LICENSE_1_0.txt)
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     // Called after an appropriate reserve on c.
0042     //
0043 
0044     c.clear();
0045     for(size_type i = 0u; i != n; ++i)
0046     {
0047         //
0048         // Remark: pointers are not tracked,
0049         // so we need not call ar.reset_object_address(v, u)
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 } // namespace ptr_container_detail
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 /*version*/)
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 /*version*/)
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 } // namespace serialization
0083 } // namespace boost
0084 
0085 #endif