@@ -32,29 +32,29 @@ MSGPACK_API_VERSION_NAMESPACE(v1) {
3232
3333namespace adaptor {
3434
35- template <typename K, typename V>
35+ template <typename K, typename V, typename ... OtherTypes >
3636struct as <
37- std::unordered_map<K, V>,
37+ std::unordered_map<K, V, OtherTypes... >,
3838 typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> {
39- std::unordered_map<K, V> operator ()(msgpack::object const & o) const {
39+ std::unordered_map<K, V, OtherTypes... > operator ()(msgpack::object const & o) const {
4040 if (o.type != msgpack::type::MAP) { throw msgpack::type_error (); }
4141 msgpack::object_kv* p (o.via .map .ptr );
4242 msgpack::object_kv* const pend (o.via .map .ptr + o.via .map .size );
43- std::unordered_map<K, V> v;
43+ std::unordered_map<K, V, OtherTypes... > v;
4444 for (; p != pend; ++p) {
4545 v.emplace (p->key .as <K>(), p->val .as <V>());
4646 }
4747 return v;
4848 }
4949};
5050
51- template <typename K, typename V>
52- struct convert <std::unordered_map<K, V>> {
53- msgpack::object const & operator ()(msgpack::object const & o, std::unordered_map<K, V>& v) const {
51+ template <typename K, typename V, typename ... OtherTypes >
52+ struct convert <std::unordered_map<K, V, OtherTypes... >> {
53+ msgpack::object const & operator ()(msgpack::object const & o, std::unordered_map<K, V, OtherTypes... >& v) const {
5454 if (o.type != msgpack::type::MAP) { throw msgpack::type_error (); }
5555 msgpack::object_kv* p (o.via .map .ptr );
5656 msgpack::object_kv* const pend (o.via .map .ptr + o.via .map .size );
57- std::unordered_map<K, V> tmp;
57+ std::unordered_map<K, V, OtherTypes... > tmp;
5858 for (; p != pend; ++p) {
5959 K key;
6060 p->key .convert (key);
@@ -65,13 +65,13 @@ struct convert<std::unordered_map<K, V>> {
6565 }
6666};
6767
68- template <typename K, typename V>
69- struct pack <std::unordered_map<K, V>> {
68+ template <typename K, typename V, typename ... OtherTypes >
69+ struct pack <std::unordered_map<K, V, OtherTypes... >> {
7070 template <typename Stream>
71- msgpack::packer<Stream>& operator ()(msgpack::packer<Stream>& o, const std::unordered_map<K,V >& v) const {
71+ msgpack::packer<Stream>& operator ()(msgpack::packer<Stream>& o, const std::unordered_map<K, V, OtherTypes... >& v) const {
7272 uint32_t size = checked_get_container_size (v.size ());
7373 o.pack_map (size);
74- for (typename std::unordered_map<K,V >::const_iterator it (v.begin ()), it_end (v.end ());
74+ for (typename std::unordered_map<K, V, OtherTypes... >::const_iterator it (v.begin ()), it_end (v.end ());
7575 it != it_end; ++it) {
7676 o.pack (it->first );
7777 o.pack (it->second );
@@ -80,9 +80,9 @@ struct pack<std::unordered_map<K, V>> {
8080 }
8181};
8282
83- template <typename K, typename V>
84- struct object_with_zone <std::unordered_map<K, V>> {
85- void operator ()(msgpack::object::with_zone& o, const std::unordered_map<K,V >& v) const {
83+ template <typename K, typename V, typename ... OtherTypes >
84+ struct object_with_zone <std::unordered_map<K, V, OtherTypes... >> {
85+ void operator ()(msgpack::object::with_zone& o, const std::unordered_map<K, V, OtherTypes... >& v) const {
8686 o.type = msgpack::type::MAP;
8787 if (v.empty ()) {
8888 o.via .map .ptr = nullptr ;
@@ -93,7 +93,7 @@ struct object_with_zone<std::unordered_map<K, V>> {
9393 msgpack::object_kv* const pend = p + size;
9494 o.via .map .ptr = p;
9595 o.via .map .size = size;
96- typename std::unordered_map<K,V >::const_iterator it (v.begin ());
96+ typename std::unordered_map<K, V, OtherTypes... >::const_iterator it (v.begin ());
9797 do {
9898 p->key = msgpack::object (it->first , o.zone );
9999 p->val = msgpack::object (it->second , o.zone );
@@ -105,29 +105,29 @@ struct object_with_zone<std::unordered_map<K, V>> {
105105};
106106
107107
108- template <typename K, typename V>
108+ template <typename K, typename V, typename ... OtherTypes >
109109struct as <
110- std::unordered_multimap<K, V>,
110+ std::unordered_multimap<K, V, OtherTypes... >,
111111 typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> {
112- std::unordered_multimap<K, V> operator ()(msgpack::object const & o) const {
112+ std::unordered_multimap<K, V, OtherTypes... > operator ()(msgpack::object const & o) const {
113113 if (o.type != msgpack::type::MAP) { throw msgpack::type_error (); }
114114 msgpack::object_kv* p (o.via .map .ptr );
115115 msgpack::object_kv* const pend (o.via .map .ptr + o.via .map .size );
116- std::unordered_multimap<K, V> v;
116+ std::unordered_multimap<K, V, OtherTypes... > v;
117117 for (; p != pend; ++p) {
118118 v.emplace (p->key .as <K>(), p->val .as <V>());
119119 }
120120 return v;
121121 }
122122};
123123
124- template <typename K, typename V>
125- struct convert <std::unordered_multimap<K, V>> {
126- msgpack::object const & operator ()(msgpack::object const & o, std::unordered_multimap<K, V>& v) const {
124+ template <typename K, typename V, typename ... OtherTypes >
125+ struct convert <std::unordered_multimap<K, V, OtherTypes... >> {
126+ msgpack::object const & operator ()(msgpack::object const & o, std::unordered_multimap<K, V, OtherTypes... >& v) const {
127127 if (o.type != msgpack::type::MAP) { throw msgpack::type_error (); }
128128 msgpack::object_kv* p (o.via .map .ptr );
129129 msgpack::object_kv* const pend (o.via .map .ptr + o.via .map .size );
130- std::unordered_multimap<K, V> tmp;
130+ std::unordered_multimap<K, V, OtherTypes... > tmp;
131131 for (; p != pend; ++p) {
132132 std::pair<K, V> value;
133133 p->key .convert (value.first );
@@ -139,13 +139,13 @@ struct convert<std::unordered_multimap<K, V>> {
139139 }
140140};
141141
142- template <typename K, typename V>
143- struct pack <std::unordered_multimap<K, V>> {
142+ template <typename K, typename V, typename ... OtherTypes >
143+ struct pack <std::unordered_multimap<K, V, OtherTypes... >> {
144144 template <typename Stream>
145- msgpack::packer<Stream>& operator ()(msgpack::packer<Stream>& o, const std::unordered_multimap<K,V >& v) const {
145+ msgpack::packer<Stream>& operator ()(msgpack::packer<Stream>& o, const std::unordered_multimap<K, V, OtherTypes... >& v) const {
146146 uint32_t size = checked_get_container_size (v.size ());
147147 o.pack_map (size);
148- for (typename std::unordered_multimap<K,V >::const_iterator it (v.begin ()), it_end (v.end ());
148+ for (typename std::unordered_multimap<K, V, OtherTypes... >::const_iterator it (v.begin ()), it_end (v.end ());
149149 it != it_end; ++it) {
150150 o.pack (it->first );
151151 o.pack (it->second );
@@ -154,9 +154,9 @@ struct pack<std::unordered_multimap<K, V>> {
154154 }
155155};
156156
157- template <typename K, typename V>
158- struct object_with_zone <std::unordered_multimap<K, V>> {
159- void operator ()(msgpack::object::with_zone& o, const std::unordered_multimap<K,V >& v) const {
157+ template <typename K, typename V, typename ... OtherTypes >
158+ struct object_with_zone <std::unordered_multimap<K, V, OtherTypes... >> {
159+ void operator ()(msgpack::object::with_zone& o, const std::unordered_multimap<K, V, OtherTypes... >& v) const {
160160 o.type = msgpack::type::MAP;
161161 if (v.empty ()) {
162162 o.via .map .ptr = nullptr ;
@@ -167,7 +167,7 @@ struct object_with_zone<std::unordered_multimap<K, V>> {
167167 msgpack::object_kv* const pend = p + size;
168168 o.via .map .ptr = p;
169169 o.via .map .size = size;
170- typename std::unordered_multimap<K,V >::const_iterator it (v.begin ());
170+ typename std::unordered_multimap<K, V, OtherTypes... >::const_iterator it (v.begin ());
171171 do {
172172 p->key = msgpack::object (it->first , o.zone );
173173 p->val = msgpack::object (it->second , o.zone );
0 commit comments