106 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			106 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#ifndef  BOOST_SERIALIZATION_COLLECTIONS_LOAD_IMP_HPP
							 | 
						||
| 
								 | 
							
								#define BOOST_SERIALIZATION_COLLECTIONS_LOAD_IMP_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// MS compatible compilers support #pragma once
							 | 
						||
| 
								 | 
							
								#if defined(_MSC_VER)
							 | 
						||
| 
								 | 
							
								# pragma once
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(_MSC_VER) && (_MSC_VER <= 1020)
							 | 
						||
| 
								 | 
							
								#  pragma warning (disable : 4786) // too long name, harmless warning
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
							 | 
						||
| 
								 | 
							
								// collections_load_imp.hpp: serialization for loading stl collections
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// (C) Copyright 2002 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)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  See http://www.boost.org for updates, documentation, and revision history.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// helper function templates for serialization of collections
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/assert.hpp>
							 | 
						||
| 
								 | 
							
								#include <cstddef> // size_t
							 | 
						||
| 
								 | 
							
								#include <boost/config.hpp> // msvc 6.0 needs this for warning suppression
							 | 
						||
| 
								 | 
							
								#if defined(BOOST_NO_STDC_NAMESPACE)
							 | 
						||
| 
								 | 
							
								namespace std{ 
							 | 
						||
| 
								 | 
							
								    using ::size_t; 
							 | 
						||
| 
								 | 
							
								} // namespace std
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#include <boost/detail/workaround.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/archive/detail/basic_iarchive.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/serialization/access.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/serialization/nvp.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/serialization/detail/stack_constructor.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/serialization/collection_size_type.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/serialization/item_version_type.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/serialization/detail/is_default_constructible.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/utility/enable_if.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost{
							 | 
						||
| 
								 | 
							
								namespace serialization {
							 | 
						||
| 
								 | 
							
								namespace stl {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// implementation of serialization for STL containers
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<
							 | 
						||
| 
								 | 
							
								    class Archive,
							 | 
						||
| 
								 | 
							
								    class T
							 | 
						||
| 
								 | 
							
								>
							 | 
						||
| 
								 | 
							
								typename boost::enable_if<
							 | 
						||
| 
								 | 
							
								    typename detail::is_default_constructible<
							 | 
						||
| 
								 | 
							
								        typename T::value_type
							 | 
						||
| 
								 | 
							
								    >,
							 | 
						||
| 
								 | 
							
								    void
							 | 
						||
| 
								 | 
							
								>::type
							 | 
						||
| 
								 | 
							
								collection_load_impl(
							 | 
						||
| 
								 | 
							
								    Archive & ar,
							 | 
						||
| 
								 | 
							
								    T & t,
							 | 
						||
| 
								 | 
							
								    collection_size_type count,
							 | 
						||
| 
								 | 
							
								    item_version_type
							 | 
						||
| 
								 | 
							
								){
							 | 
						||
| 
								 | 
							
								    t.resize(count);
							 | 
						||
| 
								 | 
							
								    typename T::iterator hint;
							 | 
						||
| 
								 | 
							
								    hint = t.begin();
							 | 
						||
| 
								 | 
							
								    while(count-- > 0){
							 | 
						||
| 
								 | 
							
								        ar >> boost::serialization::make_nvp("item", *hint++);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<
							 | 
						||
| 
								 | 
							
								    class Archive,
							 | 
						||
| 
								 | 
							
								    class T
							 | 
						||
| 
								 | 
							
								>
							 | 
						||
| 
								 | 
							
								typename boost::disable_if<
							 | 
						||
| 
								 | 
							
								    typename detail::is_default_constructible<
							 | 
						||
| 
								 | 
							
								        typename T::value_type
							 | 
						||
| 
								 | 
							
								    >,
							 | 
						||
| 
								 | 
							
								    void
							 | 
						||
| 
								 | 
							
								>::type
							 | 
						||
| 
								 | 
							
								collection_load_impl(
							 | 
						||
| 
								 | 
							
								    Archive & ar,
							 | 
						||
| 
								 | 
							
								    T & t,
							 | 
						||
| 
								 | 
							
								    collection_size_type count,
							 | 
						||
| 
								 | 
							
								    item_version_type item_version
							 | 
						||
| 
								 | 
							
								){
							 | 
						||
| 
								 | 
							
								    t.clear();
							 | 
						||
| 
								 | 
							
								    while(count-- > 0){
							 | 
						||
| 
								 | 
							
								        detail::stack_construct<Archive, typename T::value_type> u(ar, item_version);
							 | 
						||
| 
								 | 
							
								        ar >> boost::serialization::make_nvp("item", u.reference());
							 | 
						||
| 
								 | 
							
								        t.push_back(u.reference());
							 | 
						||
| 
								 | 
							
								        ar.reset_object_address(& t.back() , & u.reference());
							 | 
						||
| 
								 | 
							
								     }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace stl 
							 | 
						||
| 
								 | 
							
								} // namespace serialization
							 | 
						||
| 
								 | 
							
								} // namespace boost
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif //BOOST_SERIALIZATION_COLLECTIONS_LOAD_IMP_HPP
							 |