10 #ifndef MSGPACK_V1_TYPE_MAP_HPP
11 #define MSGPACK_V1_TYPE_MAP_HPP
27 template <
typename K,
typename V,
typename Compare,
typename Alloc>
28 class assoc_vector :
public std::vector< std::pair<K, V>, Alloc > {
29 #if !defined(MSGPACK_USE_CPP03)
30 using std::vector<std::pair<K, V>, Alloc>::vector;
31 #endif // !defined(MSGPACK_USE_CPP03)
35 template <
typename K,
typename V,
typename Compare,
typename Alloc>
37 bool operator() (
const std::pair<K, V>& x,
const std::pair<K, V>& y)
const
38 {
return Compare()(x.first, y.first); }
46 #if !defined(MSGPACK_USE_CPP03)
48 template <
typename K,
typename V,
typename Compare,
typename Alloc>
50 type::assoc_vector<K, V, Compare, Alloc>,
51 typename std::enable_if<msgpack::has_as<K>::value || msgpack::has_as<V>::value>::type> {
58 for (; p < pend; ++p) {
59 v.emplace_back(p->
key.
as<K>(), p->
val.
as<V>());
66 #endif // !defined(MSGPACK_USE_CPP03)
68 template <
typename K,
typename V,
typename Compare,
typename Alloc>
69 struct convert<type::assoc_vector<K, V, Compare, Alloc> > {
76 std::pair<K, V>* it(&v.front());
77 for (; p < pend; ++p, ++it) {
87 template <
typename K,
typename V,
typename Compare,
typename Alloc>
88 struct pack<type::assoc_vector<K, V, Compare, Alloc> > {
89 template <
typename Stream>
102 template <
typename K,
typename V,
typename Compare,
typename Alloc>
127 #if !defined(MSGPACK_USE_CPP03)
129 template <
typename K,
typename V,
typename Compare,
typename Alloc>
131 std::map<K, V, Compare, Alloc>,
132 typename std::enable_if<msgpack::has_as<K>::value || msgpack::has_as<V>::value>::type> {
137 std::map<K, V, Compare, Alloc> v;
138 for (; p != pend; ++p) {
145 #endif // !defined(MSGPACK_USE_CPP03)
147 template <
typename K,
typename V,
typename Compare,
typename Alloc>
148 struct convert<std::map<K, V, Compare, Alloc> > {
153 std::map<K, V, Compare, Alloc> tmp;
154 for (; p != pend; ++p) {
157 #if __cplusplus >= 201103L
163 #if __cplusplus >= 201103L
172 template <
typename K,
typename V,
typename Compare,
typename Alloc>
173 struct pack<std::map<K, V, Compare, Alloc> > {
174 template <
typename Stream>
178 for (
typename std::map<K, V, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
179 it != it_end; ++it) {
187 template <
typename K,
typename V,
typename Compare,
typename Alloc>
202 typename std::map<K, V, Compare, Alloc>::const_iterator it(v.begin());
204 #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
205 #pragma GCC diagnostic push
206 #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
207 #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
210 #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
211 #pragma GCC diagnostic pop
212 #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
220 #if !defined(MSGPACK_USE_CPP03)
222 template <
typename K,
typename V,
typename Compare,
typename Alloc>
224 std::multimap<K, V, Compare, Alloc>,
225 typename std::enable_if<msgpack::has_as<K>::value || msgpack::has_as<V>::value>::type> {
230 std::multimap<K, V, Compare, Alloc> v;
231 for (; p != pend; ++p) {
238 #endif // !defined(MSGPACK_USE_CPP03)
240 template <
typename K,
typename V,
typename Compare,
typename Alloc>
241 struct convert<std::multimap<K, V, Compare, Alloc> > {
246 std::multimap<K, V, Compare, Alloc> tmp;
247 for (; p != pend; ++p) {
248 std::pair<K, V> value;
251 #if __cplusplus >= 201103L
257 #if __cplusplus >= 201103L
266 template <
typename K,
typename V,
typename Compare,
typename Alloc>
267 struct pack<std::multimap<K, V, Compare, Alloc> > {
268 template <
typename Stream>
272 for (
typename std::multimap<K, V, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
273 it != it_end; ++it) {
281 template <
typename K,
typename V,
typename Compare,
typename Alloc>
295 typename std::multimap<K, V, Compare, Alloc>::const_iterator it(v.begin());
314 #endif // MSGPACK_V1_TYPE_MAP_HPP