From 78b3e8adad6f818e98bc946c3154e368efc84dee Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Mon, 3 Aug 2015 17:57:46 +0900 Subject: [PATCH] Added 'as' support for std::deque. --- include/msgpack/adaptor/deque.hpp | 21 +++++++++++++++++++++ test/msgpack_cpp11.cpp | 11 +++++++++++ 2 files changed, 32 insertions(+) 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};