mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-15 15:16:51 +02:00
Added 'as' support for std::deque.
This commit is contained in:
@@ -32,6 +32,27 @@ MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|||||||
|
|
||||||
namespace adaptor {
|
namespace adaptor {
|
||||||
|
|
||||||
|
#if !defined(MSGPACK_USE_CPP03)
|
||||||
|
|
||||||
|
template <typename T, typename Alloc>
|
||||||
|
struct as<std::deque<T, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
||||||
|
std::deque<T, Alloc> operator()(const msgpack::object& o) const {
|
||||||
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
|
std::deque<T, Alloc> 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<T>());
|
||||||
|
++p;
|
||||||
|
} while (p < pend);
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // !defined(MSGPACK_USE_CPP03)
|
||||||
|
|
||||||
template <typename T, typename Alloc>
|
template <typename T, typename Alloc>
|
||||||
struct convert<std::deque<T, Alloc> > {
|
struct convert<std::deque<T, Alloc> > {
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::deque<T, Alloc>& v) const {
|
msgpack::object const& operator()(msgpack::object const& o, std::deque<T, Alloc>& v) const {
|
||||||
|
@@ -433,6 +433,17 @@ TEST(MSGPACK_NO_DEF_CON_MULTIMAP, simple_buffer)
|
|||||||
EXPECT_EQ(val1, val2);
|
EXPECT_EQ(val1, val2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(MSGPACK_NO_DEF_CON_DEQUE, simple_buffer)
|
||||||
|
{
|
||||||
|
std::deque<no_def_con> val1 { 1, 2, 3 };
|
||||||
|
msgpack::sbuffer sbuf;
|
||||||
|
msgpack::pack(sbuf, val1);
|
||||||
|
msgpack::unpacked ret;
|
||||||
|
msgpack::unpack(ret, sbuf.data(), sbuf.size());
|
||||||
|
std::deque<no_def_con> val2 = ret.get().as<std::deque<no_def_con>>();
|
||||||
|
EXPECT_EQ(val1, val2);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(MSGPACK_NO_DEF_CON_PAIR, simple_buffer)
|
TEST(MSGPACK_NO_DEF_CON_PAIR, simple_buffer)
|
||||||
{
|
{
|
||||||
std::pair<no_def_con, no_def_con_composite> val1 {1, 2};
|
std::pair<no_def_con, no_def_con_composite> val1 {1, 2};
|
||||||
|
Reference in New Issue
Block a user