annotate DEPENDENCIES/generic/include/boost/serialization/unordered_map.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents f46d142149f5
children
rev   line source
Chris@102 1 #ifndef BOOST_SERIALIZATION_UNORDERED_MAP_HPP
Chris@102 2 #define BOOST_SERIALIZATION_UNORDERED_MAP_HPP
Chris@102 3
Chris@102 4 // MS compatible compilers support #pragma once
Chris@102 5 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
Chris@102 6 # pragma once
Chris@102 7 #endif
Chris@102 8
Chris@102 9 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
Chris@102 10 // serialization/unordered_map.hpp:
Chris@102 11 // serialization for stl unordered_map templates
Chris@102 12
Chris@102 13 // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
Chris@102 14 // (C) Copyright 2014 Jim Bell
Chris@102 15 // Use, modification and distribution is subject to the Boost Software
Chris@102 16 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@102 17 // http://www.boost.org/LICENSE_1_0.txt)
Chris@102 18
Chris@102 19 // See http://www.boost.org for updates, documentation, and revision history.
Chris@102 20
Chris@102 21 #include <boost/config.hpp>
Chris@102 22
Chris@102 23 #include <unordered_map>
Chris@102 24
Chris@102 25 #include <boost/serialization/utility.hpp>
Chris@102 26 #include <boost/serialization/unordered_collections_save_imp.hpp>
Chris@102 27 #include <boost/serialization/unordered_collections_load_imp.hpp>
Chris@102 28 #include <boost/serialization/split_free.hpp>
Chris@102 29
Chris@102 30 namespace boost {
Chris@102 31 namespace serialization {
Chris@102 32
Chris@102 33 namespace stl {
Chris@102 34
Chris@102 35 // map input
Chris@102 36 template<class Archive, class Container>
Chris@102 37 struct archive_input_unordered_map
Chris@102 38 {
Chris@102 39 inline void operator()(
Chris@102 40 Archive &ar,
Chris@102 41 Container &s,
Chris@102 42 const unsigned int v
Chris@102 43 ){
Chris@102 44 typedef typename Container::value_type type;
Chris@102 45 detail::stack_construct<Archive, type> t(ar, v);
Chris@102 46 // borland fails silently w/o full namespace
Chris@102 47 ar >> boost::serialization::make_nvp("item", t.reference());
Chris@102 48 std::pair<typename Container::const_iterator, bool> result =
Chris@102 49 s.insert(t.reference());
Chris@102 50 // note: the following presumes that the map::value_type was NOT tracked
Chris@102 51 // in the archive. This is the usual case, but here there is no way
Chris@102 52 // to determine that.
Chris@102 53 if(result.second){
Chris@102 54 ar.reset_object_address(
Chris@102 55 & (result.first->second),
Chris@102 56 & t.reference().second
Chris@102 57 );
Chris@102 58 }
Chris@102 59 }
Chris@102 60 };
Chris@102 61
Chris@102 62 // multimap input
Chris@102 63 template<class Archive, class Container>
Chris@102 64 struct archive_input_unordered_multimap
Chris@102 65 {
Chris@102 66 inline void operator()(
Chris@102 67 Archive &ar,
Chris@102 68 Container &s,
Chris@102 69 const unsigned int v
Chris@102 70 ){
Chris@102 71 typedef typename Container::value_type type;
Chris@102 72 detail::stack_construct<Archive, type> t(ar, v);
Chris@102 73 // borland fails silently w/o full namespace
Chris@102 74 ar >> boost::serialization::make_nvp("item", t.reference());
Chris@102 75 typename Container::const_iterator result
Chris@102 76 = s.insert(t.reference());
Chris@102 77 // note: the following presumes that the map::value_type was NOT tracked
Chris@102 78 // in the archive. This is the usual case, but here there is no way
Chris@102 79 // to determine that.
Chris@102 80 ar.reset_object_address(
Chris@102 81 & result->second,
Chris@102 82 & t.reference()
Chris@102 83 );
Chris@102 84 }
Chris@102 85 };
Chris@102 86
Chris@102 87 } // stl
Chris@102 88
Chris@102 89 template<
Chris@102 90 class Archive,
Chris@102 91 class Key,
Chris@102 92 class HashFcn,
Chris@102 93 class EqualKey,
Chris@102 94 class Allocator
Chris@102 95 >
Chris@102 96 inline void save(
Chris@102 97 Archive & ar,
Chris@102 98 const std::unordered_map<
Chris@102 99 Key, HashFcn, EqualKey, Allocator
Chris@102 100 > &t,
Chris@102 101 const unsigned int /*file_version*/
Chris@102 102 ){
Chris@102 103 boost::serialization::stl::save_unordered_collection<
Chris@102 104 Archive,
Chris@102 105 std::unordered_map<
Chris@102 106 Key, HashFcn, EqualKey, Allocator
Chris@102 107 >
Chris@102 108 >(ar, t);
Chris@102 109 }
Chris@102 110
Chris@102 111 template<
Chris@102 112 class Archive,
Chris@102 113 class Key,
Chris@102 114 class HashFcn,
Chris@102 115 class EqualKey,
Chris@102 116 class Allocator
Chris@102 117 >
Chris@102 118 inline void load(
Chris@102 119 Archive & ar,
Chris@102 120 std::unordered_map<
Chris@102 121 Key, HashFcn, EqualKey, Allocator
Chris@102 122 > &t,
Chris@102 123 const unsigned int /*file_version*/
Chris@102 124 ){
Chris@102 125 boost::serialization::stl::load_unordered_collection<
Chris@102 126 Archive,
Chris@102 127 std::unordered_map<
Chris@102 128 Key, HashFcn, EqualKey, Allocator
Chris@102 129 >,
Chris@102 130 boost::serialization::stl::archive_input_unordered_map<
Chris@102 131 Archive,
Chris@102 132 std::unordered_map<
Chris@102 133 Key, HashFcn, EqualKey, Allocator
Chris@102 134 >
Chris@102 135 >
Chris@102 136 >(ar, t);
Chris@102 137 }
Chris@102 138
Chris@102 139 // split non-intrusive serialization function member into separate
Chris@102 140 // non intrusive save/load member functions
Chris@102 141 template<
Chris@102 142 class Archive,
Chris@102 143 class Key,
Chris@102 144 class HashFcn,
Chris@102 145 class EqualKey,
Chris@102 146 class Allocator
Chris@102 147 >
Chris@102 148 inline void serialize(
Chris@102 149 Archive & ar,
Chris@102 150 std::unordered_map<
Chris@102 151 Key, HashFcn, EqualKey, Allocator
Chris@102 152 > &t,
Chris@102 153 const unsigned int file_version
Chris@102 154 ){
Chris@102 155 boost::serialization::split_free(ar, t, file_version);
Chris@102 156 }
Chris@102 157
Chris@102 158 // unordered_multimap
Chris@102 159 template<
Chris@102 160 class Archive,
Chris@102 161 class Key,
Chris@102 162 class HashFcn,
Chris@102 163 class EqualKey,
Chris@102 164 class Allocator
Chris@102 165 >
Chris@102 166 inline void save(
Chris@102 167 Archive & ar,
Chris@102 168 const std::unordered_multimap<
Chris@102 169 Key, HashFcn, EqualKey, Allocator
Chris@102 170 > &t,
Chris@102 171 const unsigned int /*file_version*/
Chris@102 172 ){
Chris@102 173 boost::serialization::stl::save_unordered_collection<
Chris@102 174 Archive,
Chris@102 175 std::unordered_multimap<
Chris@102 176 Key, HashFcn, EqualKey, Allocator
Chris@102 177 >
Chris@102 178 >(ar, t);
Chris@102 179 }
Chris@102 180
Chris@102 181 template<
Chris@102 182 class Archive,
Chris@102 183 class Key,
Chris@102 184 class HashFcn,
Chris@102 185 class EqualKey,
Chris@102 186 class Allocator
Chris@102 187 >
Chris@102 188 inline void load(
Chris@102 189 Archive & ar,
Chris@102 190 std::unordered_multimap<
Chris@102 191 Key, HashFcn, EqualKey, Allocator
Chris@102 192 > &t,
Chris@102 193 const unsigned int /*file_version*/
Chris@102 194 ){
Chris@102 195 boost::serialization::stl::load_unordered_collection<
Chris@102 196 Archive,
Chris@102 197 std::unordered_multimap<
Chris@102 198 Key, HashFcn, EqualKey, Allocator
Chris@102 199 >,
Chris@102 200 boost::serialization::stl::archive_input_unordered_multimap<
Chris@102 201 Archive,
Chris@102 202 std::unordered_multimap<
Chris@102 203 Key, HashFcn, EqualKey, Allocator
Chris@102 204 >
Chris@102 205 >
Chris@102 206 >(ar, t);
Chris@102 207 }
Chris@102 208
Chris@102 209 // split non-intrusive serialization function member into separate
Chris@102 210 // non intrusive save/load member functions
Chris@102 211 template<
Chris@102 212 class Archive,
Chris@102 213 class Key,
Chris@102 214 class HashFcn,
Chris@102 215 class EqualKey,
Chris@102 216 class Allocator
Chris@102 217 >
Chris@102 218 inline void serialize(
Chris@102 219 Archive & ar,
Chris@102 220 std::unordered_multimap<
Chris@102 221 Key, HashFcn, EqualKey, Allocator
Chris@102 222 > &t,
Chris@102 223 const unsigned int file_version
Chris@102 224 ){
Chris@102 225 boost::serialization::split_free(ar, t, file_version);
Chris@102 226 }
Chris@102 227
Chris@102 228 } // namespace serialization
Chris@102 229 } // namespace boost
Chris@102 230
Chris@102 231 #endif // BOOST_SERIALIZATION_UNORDERED_MAP_HPP