mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-04-24 00:57:07 +02:00
Merge pull request #126 from redboltz/add_zero_size_tuple_support
Added zero size tuple support.
This commit is contained in:
commit
44e41efa0c
@ -45,6 +45,15 @@ struct StdTuplePacker<Stream, Tuple, 1> {
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Stream, typename Tuple>
|
||||
struct StdTuplePacker<Stream, Tuple, 0> {
|
||||
static void pack (
|
||||
packer<Stream>&,
|
||||
const Tuple&) {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
template <typename Stream, typename... Args>
|
||||
const packer<Stream>& operator<< (
|
||||
packer<Stream>& o,
|
||||
@ -75,6 +84,14 @@ struct StdTupleConverter<Tuple, 1> {
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Tuple>
|
||||
struct StdTupleConverter<Tuple, 0> {
|
||||
static void convert (
|
||||
object const&,
|
||||
Tuple&) {
|
||||
}
|
||||
};
|
||||
|
||||
template <typename... Args>
|
||||
object const& operator>> (
|
||||
object const& o,
|
||||
@ -105,6 +122,14 @@ struct StdTupleToObjectWithZone<Tuple, 1> {
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Tuple>
|
||||
struct StdTupleToObjectWithZone<Tuple, 0> {
|
||||
static void convert (
|
||||
object::with_zone&,
|
||||
const Tuple&) {
|
||||
}
|
||||
};
|
||||
|
||||
template <typename... Args>
|
||||
inline void operator<< (
|
||||
object::with_zone& o,
|
||||
|
@ -109,6 +109,14 @@ struct MsgpackTuplePacker<Stream, Tuple, 1> {
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Stream, typename Tuple>
|
||||
struct MsgpackTuplePacker<Stream, Tuple, 0> {
|
||||
static void pack (
|
||||
packer<Stream>&,
|
||||
const Tuple&) {
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Stream, typename... Args>
|
||||
const packer<Stream>& operator<< (
|
||||
packer<Stream>& o,
|
||||
@ -139,6 +147,14 @@ struct MsgpackTupleConverter<Tuple, 1> {
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Tuple>
|
||||
struct MsgpackTupleConverter<Tuple, 0> {
|
||||
static void convert (
|
||||
object const&,
|
||||
Tuple&) {
|
||||
}
|
||||
};
|
||||
|
||||
template <typename... Args>
|
||||
object const& operator>> (
|
||||
object const& o,
|
||||
@ -169,6 +185,14 @@ struct MsgpackTupleToObjectWithZone<Tuple, 1> {
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Tuple>
|
||||
struct MsgpackTupleToObjectWithZone<Tuple, 0> {
|
||||
static void convert (
|
||||
object::with_zone&,
|
||||
const Tuple&) {
|
||||
}
|
||||
};
|
||||
|
||||
template <typename... Args>
|
||||
inline void operator<< (
|
||||
object::with_zone& o,
|
||||
|
@ -188,6 +188,33 @@ TEST(MSGPACK_STL, simple_buffer_multiset)
|
||||
}
|
||||
}
|
||||
|
||||
TEST(MSGPACK_TUPLE, simple_tuple)
|
||||
{
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::type::tuple<bool, std::string, double> val1(true, "kzk", 12.3);
|
||||
msgpack::pack(sbuf, val1);
|
||||
msgpack::unpacked ret;
|
||||
msgpack::unpack(ret, sbuf.data(), sbuf.size());
|
||||
msgpack::type::tuple<bool, std::string, double> val2
|
||||
= ret.get().as<msgpack::type::tuple<bool, std::string, double> >();
|
||||
EXPECT_EQ(ret.get().via.array.size, 3);
|
||||
EXPECT_EQ(val1.get<0>(), val2.get<0>());
|
||||
EXPECT_EQ(val1.get<1>(), val2.get<1>());
|
||||
EXPECT_EQ(val1.get<2>(), val2.get<2>());
|
||||
}
|
||||
|
||||
TEST(MSGPACK_TUPLE, simple_tuple_empty)
|
||||
{
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::type::tuple<> val1;
|
||||
msgpack::pack(sbuf, val1);
|
||||
msgpack::unpacked ret;
|
||||
msgpack::unpack(ret, sbuf.data(), sbuf.size());
|
||||
ret.get().as<msgpack::type::tuple<> >();
|
||||
EXPECT_EQ(ret.get().via.array.size, 0);
|
||||
}
|
||||
|
||||
|
||||
// TR1
|
||||
|
||||
#ifdef MSGPACK_HAS_STD_TR1_UNOURDERED_MAP
|
||||
|
@ -26,6 +26,17 @@ TEST(MSGPACK_CPP11, simple_tuple)
|
||||
EXPECT_EQ(val1, val2);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CPP11, simple_tuple_empty)
|
||||
{
|
||||
msgpack::sbuffer sbuf;
|
||||
std::tuple<> val1;
|
||||
msgpack::pack(sbuf, val1);
|
||||
msgpack::unpacked ret;
|
||||
msgpack::unpack(ret, sbuf.data(), sbuf.size());
|
||||
std::tuple<> val2 = ret.get().as<std::tuple<> >();
|
||||
EXPECT_EQ(val1, val2);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CPP11, simple_array)
|
||||
{
|
||||
for (unsigned int k = 0; k < kLoop; k++) {
|
||||
|
@ -387,6 +387,15 @@ TEST(object_with_zone, msgpack_tuple)
|
||||
EXPECT_EQ(msgpack::type::get<0>(obj.as<test_t>()), 1);
|
||||
}
|
||||
|
||||
TEST(object_with_zone, msgpack_tuple_empty)
|
||||
{
|
||||
typedef msgpack::type::tuple<> test_t;
|
||||
test_t v;
|
||||
msgpack::zone z;
|
||||
msgpack::object obj(v, z);
|
||||
EXPECT_EQ(obj.via.array.size, 0);
|
||||
}
|
||||
|
||||
// TR1
|
||||
|
||||
#ifdef MSGPACK_HAS_STD_TR1_UNOURDERED_MAP
|
||||
@ -680,4 +689,13 @@ TEST(object_with_zone, tuple)
|
||||
EXPECT_EQ(obj.as<test_t>(), v);
|
||||
}
|
||||
|
||||
TEST(object_with_zone, tuple_empty)
|
||||
{
|
||||
typedef tuple<> test_t;
|
||||
test_t v;
|
||||
msgpack::zone z;
|
||||
msgpack::object obj(v, z);
|
||||
EXPECT_EQ(obj.as<test_t>(), v);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user