summaryrefslogtreecommitdiff
path: root/boost/serialization/vector.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/serialization/vector.hpp')
-rw-r--r--boost/serialization/vector.hpp25
1 files changed, 5 insertions, 20 deletions
diff --git a/boost/serialization/vector.hpp b/boost/serialization/vector.hpp
index aa3aaca21c..6e49bff38a 100644
--- a/boost/serialization/vector.hpp
+++ b/boost/serialization/vector.hpp
@@ -29,12 +29,13 @@
#include <boost/serialization/item_version_type.hpp>
#include <boost/serialization/collections_save_imp.hpp>
+#include <boost/serialization/collections_load_imp.hpp>
#include <boost/serialization/split_free.hpp>
#include <boost/serialization/array.hpp>
#include <boost/serialization/detail/get_data.hpp>
#include <boost/serialization/detail/stack_constructor.hpp>
-#include <boost/serialization/detail/is_default_constructible.hpp>
#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
// default is being compatible with version 1.34.1 files, not 1.35 files
#ifndef BOOST_SERIALIZATION_VECTOR_VERSIONED
@@ -86,23 +87,8 @@ inline void load(
if(boost::archive::library_version_type(3) < library_version){
ar >> BOOST_SERIALIZATION_NVP(item_version);
}
- if(detail::is_default_constructible<U>()){
- t.resize(count);
- typename std::vector<U, Allocator>::iterator hint;
- hint = t.begin();
- while(count-- > 0){
- ar >> boost::serialization::make_nvp("item", *hint++);
- }
- }
- else{
- t.reserve(count);
- while(count-- > 0){
- detail::stack_construct<Archive, U> 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());
- }
- }
+ t.reserve(count);
+ stl::collection_load_impl(ar, t, count, item_version);
}
// the optimized versions
@@ -212,8 +198,7 @@ inline void load(
collection_size_type count;
ar >> BOOST_SERIALIZATION_NVP(count);
t.resize(count);
- int i;
- for(i = 0; i < count; ++i){
+ for(collection_size_type i = collection_size_type(0); i < count; ++i){
bool b;
ar >> boost::serialization::make_nvp("item", b);
t[i] = b;