annotate DEPENDENCIES/generic/include/boost/serialization/vector.hpp @ 16:2665513ce2d3

Add boost headers
author Chris Cannam
date Tue, 05 Aug 2014 11:11:38 +0100
parents
children c530137014c0
rev   line source
Chris@16 1 #ifndef BOOST_SERIALIZATION_VECTOR_HPP
Chris@16 2 #define BOOST_SERIALIZATION_VECTOR_HPP
Chris@16 3
Chris@16 4 // MS compatible compilers support #pragma once
Chris@16 5 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
Chris@16 6 # pragma once
Chris@16 7 #endif
Chris@16 8
Chris@16 9 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
Chris@16 10 // vector.hpp: serialization for stl vector templates
Chris@16 11
Chris@16 12 // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
Chris@16 13 // fast array serialization (C) Copyright 2005 Matthias Troyer
Chris@16 14 // Use, modification and distribution is subject to the Boost Software
Chris@16 15 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 16 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 17
Chris@16 18 // See http://www.boost.org for updates, documentation, and revision history.
Chris@16 19
Chris@16 20 #include <vector>
Chris@16 21
Chris@16 22 #include <boost/config.hpp>
Chris@16 23 #include <boost/detail/workaround.hpp>
Chris@16 24 #include <boost/type_traits/is_arithmetic.hpp>
Chris@16 25
Chris@16 26 #include <boost/serialization/collections_save_imp.hpp>
Chris@16 27 #include <boost/serialization/collections_load_imp.hpp>
Chris@16 28 #include <boost/serialization/split_free.hpp>
Chris@16 29 #include <boost/serialization/array.hpp>
Chris@16 30 #include <boost/serialization/detail/get_data.hpp>
Chris@16 31 #include <boost/mpl/bool.hpp>
Chris@16 32
Chris@16 33 // default is being compatible with version 1.34.1 files, not 1.35 files
Chris@16 34 #ifndef BOOST_SERIALIZATION_VECTOR_VERSIONED
Chris@16 35 #define BOOST_SERIALIZATION_VECTOR_VERSIONED(V) (V==4 || V==5)
Chris@16 36 #endif
Chris@16 37
Chris@16 38 // function specializations must be defined in the appropriate
Chris@16 39 // namespace - boost::serialization
Chris@16 40 #if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
Chris@16 41 #define STD _STLP_STD
Chris@16 42 #else
Chris@16 43 #define STD std
Chris@16 44 #endif
Chris@16 45
Chris@16 46 namespace boost {
Chris@16 47 namespace serialization {
Chris@16 48
Chris@16 49 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
Chris@16 50 // vector< T >
Chris@16 51
Chris@16 52 // the default versions
Chris@16 53
Chris@16 54 template<class Archive, class U, class Allocator>
Chris@16 55 inline void save(
Chris@16 56 Archive & ar,
Chris@16 57 const std::vector<U, Allocator> &t,
Chris@16 58 const unsigned int /* file_version */,
Chris@16 59 mpl::false_
Chris@16 60 ){
Chris@16 61 boost::serialization::stl::save_collection<Archive, STD::vector<U, Allocator> >(
Chris@16 62 ar, t
Chris@16 63 );
Chris@16 64 }
Chris@16 65
Chris@16 66 template<class Archive, class U, class Allocator>
Chris@16 67 inline void load(
Chris@16 68 Archive & ar,
Chris@16 69 std::vector<U, Allocator> &t,
Chris@16 70 const unsigned int /* file_version */,
Chris@16 71 mpl::false_
Chris@16 72 ){
Chris@16 73 boost::serialization::stl::load_collection<
Chris@16 74 Archive,
Chris@16 75 std::vector<U, Allocator>,
Chris@16 76 boost::serialization::stl::archive_input_seq<
Chris@16 77 Archive, STD::vector<U, Allocator>
Chris@16 78 >,
Chris@16 79 boost::serialization::stl::reserve_imp<STD::vector<U, Allocator> >
Chris@16 80 >(ar, t);
Chris@16 81 }
Chris@16 82
Chris@16 83 // the optimized versions
Chris@16 84
Chris@16 85 template<class Archive, class U, class Allocator>
Chris@16 86 inline void save(
Chris@16 87 Archive & ar,
Chris@16 88 const std::vector<U, Allocator> &t,
Chris@16 89 const unsigned int /* file_version */,
Chris@16 90 mpl::true_
Chris@16 91 ){
Chris@16 92 const collection_size_type count(t.size());
Chris@16 93 ar << BOOST_SERIALIZATION_NVP(count);
Chris@16 94 if (!t.empty())
Chris@16 95 ar << make_array(detail::get_data(t),t.size());
Chris@16 96 }
Chris@16 97
Chris@16 98 template<class Archive, class U, class Allocator>
Chris@16 99 inline void load(
Chris@16 100 Archive & ar,
Chris@16 101 std::vector<U, Allocator> &t,
Chris@16 102 const unsigned int /* file_version */,
Chris@16 103 mpl::true_
Chris@16 104 ){
Chris@16 105 collection_size_type count(t.size());
Chris@16 106 ar >> BOOST_SERIALIZATION_NVP(count);
Chris@16 107 t.resize(count);
Chris@16 108 unsigned int item_version=0;
Chris@16 109 if(BOOST_SERIALIZATION_VECTOR_VERSIONED(ar.get_library_version())) {
Chris@16 110 ar >> BOOST_SERIALIZATION_NVP(item_version);
Chris@16 111 }
Chris@16 112 if (!t.empty())
Chris@16 113 ar >> make_array(detail::get_data(t),t.size());
Chris@16 114 }
Chris@16 115
Chris@16 116 // dispatch to either default or optimized versions
Chris@16 117
Chris@16 118 template<class Archive, class U, class Allocator>
Chris@16 119 inline void save(
Chris@16 120 Archive & ar,
Chris@16 121 const std::vector<U, Allocator> &t,
Chris@16 122 const unsigned int file_version
Chris@16 123 ){
Chris@16 124 typedef BOOST_DEDUCED_TYPENAME
Chris@16 125 boost::serialization::use_array_optimization<Archive>::template apply<
Chris@16 126 BOOST_DEDUCED_TYPENAME remove_const<U>::type
Chris@16 127 >::type use_optimized;
Chris@16 128 save(ar,t,file_version, use_optimized());
Chris@16 129 }
Chris@16 130
Chris@16 131 template<class Archive, class U, class Allocator>
Chris@16 132 inline void load(
Chris@16 133 Archive & ar,
Chris@16 134 std::vector<U, Allocator> &t,
Chris@16 135 const unsigned int file_version
Chris@16 136 ){
Chris@16 137 #ifdef BOOST_SERIALIZATION_VECTOR_135_HPP
Chris@16 138 if (ar.get_library_version()==boost::archive::library_version_type(5))
Chris@16 139 {
Chris@16 140 load(ar,t,file_version, boost::is_arithmetic<U>());
Chris@16 141 return;
Chris@16 142 }
Chris@16 143 #endif
Chris@16 144 typedef BOOST_DEDUCED_TYPENAME
Chris@16 145 boost::serialization::use_array_optimization<Archive>::template apply<
Chris@16 146 BOOST_DEDUCED_TYPENAME remove_const<U>::type
Chris@16 147 >::type use_optimized;
Chris@16 148 load(ar,t,file_version, use_optimized());
Chris@16 149 }
Chris@16 150
Chris@16 151 // split non-intrusive serialization function member into separate
Chris@16 152 // non intrusive save/load member functions
Chris@16 153 template<class Archive, class U, class Allocator>
Chris@16 154 inline void serialize(
Chris@16 155 Archive & ar,
Chris@16 156 std::vector<U, Allocator> & t,
Chris@16 157 const unsigned int file_version
Chris@16 158 ){
Chris@16 159 boost::serialization::split_free(ar, t, file_version);
Chris@16 160 }
Chris@16 161
Chris@16 162 #if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
Chris@16 163
Chris@16 164 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
Chris@16 165 // vector<bool>
Chris@16 166 template<class Archive, class Allocator>
Chris@16 167 inline void save(
Chris@16 168 Archive & ar,
Chris@16 169 const std::vector<bool, Allocator> &t,
Chris@16 170 const unsigned int /* file_version */
Chris@16 171 ){
Chris@16 172 // record number of elements
Chris@16 173 collection_size_type count (t.size());
Chris@16 174 ar << BOOST_SERIALIZATION_NVP(count);
Chris@16 175 std::vector<bool>::const_iterator it = t.begin();
Chris@16 176 while(count-- > 0){
Chris@16 177 bool tb = *it++;
Chris@16 178 ar << boost::serialization::make_nvp("item", tb);
Chris@16 179 }
Chris@16 180 }
Chris@16 181
Chris@16 182 template<class Archive, class Allocator>
Chris@16 183 inline void load(
Chris@16 184 Archive & ar,
Chris@16 185 std::vector<bool, Allocator> &t,
Chris@16 186 const unsigned int /* file_version */
Chris@16 187 ){
Chris@16 188 // retrieve number of elements
Chris@16 189 collection_size_type count;
Chris@16 190 ar >> BOOST_SERIALIZATION_NVP(count);
Chris@16 191 t.clear();
Chris@16 192 while(count-- > 0){
Chris@16 193 bool i;
Chris@16 194 ar >> boost::serialization::make_nvp("item", i);
Chris@16 195 t.push_back(i);
Chris@16 196 }
Chris@16 197 }
Chris@16 198
Chris@16 199 // split non-intrusive serialization function member into separate
Chris@16 200 // non intrusive save/load member functions
Chris@16 201 template<class Archive, class Allocator>
Chris@16 202 inline void serialize(
Chris@16 203 Archive & ar,
Chris@16 204 std::vector<bool, Allocator> & t,
Chris@16 205 const unsigned int file_version
Chris@16 206 ){
Chris@16 207 boost::serialization::split_free(ar, t, file_version);
Chris@16 208 }
Chris@16 209
Chris@16 210 #endif // BOOST_WORKAROUND
Chris@16 211
Chris@16 212 } // serialization
Chris@16 213 } // namespace boost
Chris@16 214
Chris@16 215 #include <boost/serialization/collection_traits.hpp>
Chris@16 216
Chris@16 217 BOOST_SERIALIZATION_COLLECTION_TRAITS(std::vector)
Chris@16 218 #undef STD
Chris@16 219
Chris@16 220 #endif // BOOST_SERIALIZATION_VECTOR_HPP