enable as<map<...> > implementation when the key OR the value have as()

This commit is contained in:
Martin C Drohmann 2016-08-23 15:03:14 -07:00
parent b82b58f184
commit 7191a3b014

View File

@ -48,7 +48,7 @@ namespace adaptor {
template <typename K, typename V, typename Compare, typename Alloc> template <typename K, typename V, typename Compare, typename Alloc>
struct as< struct as<
type::assoc_vector<K, V, Compare, Alloc>, type::assoc_vector<K, V, Compare, Alloc>,
typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> { typename std::enable_if<msgpack::has_as<K>::value || msgpack::has_as<V>::value>::type> {
type::assoc_vector<K, V, Compare, Alloc> operator()(msgpack::object const& o) const { type::assoc_vector<K, V, Compare, Alloc> operator()(msgpack::object const& o) const {
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); } if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
type::assoc_vector<K, V, Compare, Alloc> v; type::assoc_vector<K, V, Compare, Alloc> v;
@ -129,7 +129,7 @@ struct object_with_zone<type::assoc_vector<K, V, Compare, Alloc> > {
template <typename K, typename V, typename Compare, typename Alloc> template <typename K, typename V, typename Compare, typename Alloc>
struct as< struct as<
std::map<K, V, Compare, Alloc>, std::map<K, V, Compare, Alloc>,
typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> { typename std::enable_if<msgpack::has_as<K>::value || msgpack::has_as<V>::value>::type> {
std::map<K, V, Compare, Alloc> operator()(msgpack::object const& o) const { std::map<K, V, Compare, Alloc> operator()(msgpack::object const& o) const {
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); } if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
msgpack::object_kv* p(o.via.map.ptr); msgpack::object_kv* p(o.via.map.ptr);
@ -222,7 +222,7 @@ struct object_with_zone<std::map<K, V, Compare, Alloc> > {
template <typename K, typename V, typename Compare, typename Alloc> template <typename K, typename V, typename Compare, typename Alloc>
struct as< struct as<
std::multimap<K, V, Compare, Alloc>, std::multimap<K, V, Compare, Alloc>,
typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> { typename std::enable_if<msgpack::has_as<K>::value || msgpack::has_as<V>::value>::type> {
std::multimap<K, V, Compare, Alloc> operator()(msgpack::object const& o) const { std::multimap<K, V, Compare, Alloc> operator()(msgpack::object const& o) const {
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); } if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
msgpack::object_kv* p(o.via.map.ptr); msgpack::object_kv* p(o.via.map.ptr);