From 33de24239a4c119162e78fe9c440f11d706e55e0 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Mon, 31 Aug 2015 09:05:09 +0900 Subject: [PATCH] Fixed #357. Added a conversion member function to msgpack::object. If msgpack::object is nil then returns false else returns true and sets a value. --- include/msgpack/object.hpp | 9 +++++++++ include/msgpack/object_fwd.hpp | 3 +++ test/convert.cpp | 17 +++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/include/msgpack/object.hpp b/include/msgpack/object.hpp index 065adf1d..159f9b8f 100644 --- a/include/msgpack/object.hpp +++ b/include/msgpack/object.hpp @@ -511,6 +511,15 @@ inline T* object::convert(T* v) const return v; } +template +inline bool object::convert_if_not_nil(T& v) const { + if (is_nil()) { + return false; + } + convert(v); + return true; +} + #if defined(MSGPACK_USE_CPP03) template diff --git a/include/msgpack/object_fwd.hpp b/include/msgpack/object_fwd.hpp index fcbfd030..ac446729 100644 --- a/include/msgpack/object_fwd.hpp +++ b/include/msgpack/object_fwd.hpp @@ -149,6 +149,9 @@ struct object { template T* convert(T* v) const; + template + bool convert_if_not_nil(T& v) const; + object(); object(const msgpack_object& o); diff --git a/test/convert.cpp b/test/convert.cpp index fc4ced0a..b30ecade 100644 --- a/test/convert.cpp +++ b/test/convert.cpp @@ -93,3 +93,20 @@ TEST(convert, return_value_ref) EXPECT_EQ(&i, &j); EXPECT_EQ(i, j); } + +TEST(convert, if_not_nil_nil) +{ + msgpack::object obj; + int i; + EXPECT_FALSE(obj.convert_if_not_nil(i)); +} + +TEST(convert, if_not_nil_not_nil) +{ + msgpack::zone z; + msgpack::object obj(1, z); + + int i; + EXPECT_TRUE(obj.convert_if_not_nil(i)); + EXPECT_EQ(i, 1); +}