diff --git a/include/msgpack/adaptor/deque.hpp b/include/msgpack/adaptor/deque.hpp index 3be120bc..2c2fcc42 100644 --- a/include/msgpack/adaptor/deque.hpp +++ b/include/msgpack/adaptor/deque.hpp @@ -32,6 +32,27 @@ MSGPACK_API_VERSION_NAMESPACE(v1) { namespace adaptor { +#if !defined(MSGPACK_USE_CPP03) + +template +struct as, typename std::enable_if::value>::type> { + std::deque operator()(const msgpack::object& o) const { + if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + std::deque v; + if (o.via.array.size > 0) { + msgpack::object* p = o.via.array.ptr; + msgpack::object* const pend = o.via.array.ptr + o.via.array.size; + do { + v.push_back(p->as()); + ++p; + } while (p < pend); + } + return v; + } +}; + +#endif // !defined(MSGPACK_USE_CPP03) + template struct convert > { msgpack::object const& operator()(msgpack::object const& o, std::deque& v) const { diff --git a/test/msgpack_cpp11.cpp b/test/msgpack_cpp11.cpp index bd1432e3..d7c6e1c8 100644 --- a/test/msgpack_cpp11.cpp +++ b/test/msgpack_cpp11.cpp @@ -433,6 +433,17 @@ TEST(MSGPACK_NO_DEF_CON_MULTIMAP, simple_buffer) EXPECT_EQ(val1, val2); } +TEST(MSGPACK_NO_DEF_CON_DEQUE, simple_buffer) +{ + std::deque val1 { 1, 2, 3 }; + msgpack::sbuffer sbuf; + msgpack::pack(sbuf, val1); + msgpack::unpacked ret; + msgpack::unpack(ret, sbuf.data(), sbuf.size()); + std::deque val2 = ret.get().as>(); + EXPECT_EQ(val1, val2); +} + TEST(MSGPACK_NO_DEF_CON_PAIR, simple_buffer) { std::pair val1 {1, 2};