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