diff --git a/CMakeLists.txt b/CMakeLists.txt index 34ebb80f..7a9b2414 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,7 @@ OPTION (MSGPACK_32BIT "32bit compile" OFF) OPTION (MSGPACK_BOOST "Using boost libraries" OFF) SET (CMAKE_CXX_FLAGS "-DMSGPACK_DISABLE_LEGACY_NIL ${CMAKE_CXX_FLAGS}") +SET (CMAKE_CXX_FLAGS "-DMSGPACK_DISABLE_LEGACY_CONVERT ${CMAKE_CXX_FLAGS}") IF (APPLE) SET(CMAKE_MACOSX_RPATH ON) diff --git a/QUICKSTART-CPP.md b/QUICKSTART-CPP.md index 29c1e2d6..59083e34 100644 --- a/QUICKSTART-CPP.md +++ b/QUICKSTART-CPP.md @@ -40,19 +40,19 @@ int main(void) { // convert it into statically typed object. std::vector rvec; - obj.convert(&rvec); + obj.convert(rvec); } ``` Compile it as follows: ``` -$ g++ -Ipath_to_msgpack/include -DMSGPACK_DISABLE_LEGACY_NIL hello.cc -o hello +$ g++ -Ipath_to_msgpack/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT hello.cc -o hello $ ./hello ["Hello", "MessagePack"] ``` -See [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140). +See [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140) and [MSGPACK_DISABLE_LEGACY_CONVERT](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_convert-since-140). ## Streaming feature @@ -85,7 +85,7 @@ int main(void) { } // results: - // $ g++ -Ipath_to_msgpack/include -DMSGPACK_DISABLE_LEGACY_NIL stream.cc -o stream + // $ g++ -Ipath_to_msgpack/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT stream.cc -o stream // $ ./stream // "Log message ... 1" // "Log message ... 2" @@ -93,7 +93,7 @@ int main(void) { } ``` -See [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140). +See [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140) and [MSGPACK_DISABLE_LEGACY_CONVERT](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_convert-since-140). ### Streaming into an array or map @@ -158,6 +158,6 @@ int main(void) { // you can convert object to myclass directly std::vector rvec; - obj.convert(&rvec); + obj.convert(rvec); } ``` diff --git a/README.md b/README.md index a202e78e..3acc79ee 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ int main(void) // convert msgpack::object instance into the original type. // if the type is mismatched, it throws msgpack::type_error exception. msgpack::type::tuple dst; - deserialized.convert(&dst); + deserialized.convert(dst); return 0; } @@ -112,9 +112,9 @@ Usage When you use msgpack on C++03 and C++11, you can just add msgpack-c/include to your include path: - g++ -I msgpack-c/include -DMSGPACK_DISABLE_LEGACY_NIL your_source_file.cpp + g++ -I msgpack-c/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT your_source_file.cpp -See [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140). +See [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140) and [MSGPACK_DISABLE_LEGACY_CONVERT](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_convert-since-140). If you want to use C version of msgpack, you need to build it. You can also install the C and C++ versions of msgpack. diff --git a/example/cpp03/custom.cpp b/example/cpp03/custom.cpp index 458c00c9..8db77c7b 100644 --- a/example/cpp03/custom.cpp +++ b/example/cpp03/custom.cpp @@ -44,7 +44,7 @@ int main(void) msgpack::unpack(result, sbuf.str().data(), sbuf.str().size()); msgpack::object obj = result.get(); - obj.convert(&nc); + obj.convert(nc); std::cout << obj << " value=" << nc.value << " flag=" << nc.flag << std::endl; } @@ -60,7 +60,7 @@ int main(void) msgpack::unpack(result, sbuf.str().data(), sbuf.str().size()); msgpack::object obj = result.get(); - obj.convert(&oc); + obj.convert(oc); std::cout << obj << " value=" << oc.value << std::endl; } diff --git a/example/cpp03/simple.cpp b/example/cpp03/simple.cpp index a296474a..c1545c14 100644 --- a/example/cpp03/simple.cpp +++ b/example/cpp03/simple.cpp @@ -40,7 +40,7 @@ int main(void) // convert msgpack::object instance into the original type. // if the type is mismatched, it throws msgpack::type_error exception. msgpack::type::tuple dst; - deserialized.convert(&dst); + deserialized.convert(dst); return 0; } diff --git a/example/cpp03/speed_test.cpp b/example/cpp03/speed_test.cpp index b8520902..a37e3cad 100644 --- a/example/cpp03/speed_test.cpp +++ b/example/cpp03/speed_test.cpp @@ -50,7 +50,7 @@ void test_map_pack_unpack() { std::cout << "Start converting..." << std::endl; { boost::timer::cpu_timer timer; - unpacked.get().convert(&m2); + unpacked.get().convert(m2); std::string result = timer.format(); std::cout << result << std::endl; } diff --git a/example/cpp03/speed_test_nested_array.cpp b/example/cpp03/speed_test_nested_array.cpp index f9c1cac2..a2a89c4a 100644 --- a/example/cpp03/speed_test_nested_array.cpp +++ b/example/cpp03/speed_test_nested_array.cpp @@ -73,7 +73,7 @@ void test_array_of_array() { std::cout << "Start converting..." << std::endl; { boost::timer::cpu_timer timer; - unpacked.get().convert(&v2); + unpacked.get().convert(v2); std::string result = timer.format(); std::cout << result << std::endl; } diff --git a/include/msgpack/object.hpp b/include/msgpack/object.hpp index 63a26e42..b8b1467a 100644 --- a/include/msgpack/object.hpp +++ b/include/msgpack/object.hpp @@ -523,12 +523,14 @@ inline T& object::convert(T& v) const return v; } +#if !defined(MSGPACK_DISABLE_LEGACY_CONVERT) template inline T* object::convert(T* v) const { convert(*v); return v; } +#endif // !defined(MSGPACK_DISABLE_LEGACY_CONVERT) template inline bool object::convert_if_not_nil(T& v) const diff --git a/include/msgpack/object_fwd.hpp b/include/msgpack/object_fwd.hpp index b4391d07..5cba37ba 100644 --- a/include/msgpack/object_fwd.hpp +++ b/include/msgpack/object_fwd.hpp @@ -171,6 +171,8 @@ struct object { template T& convert(T& v) const; + +#if !defined(MSGPACK_DISABLE_LEGACY_CONVERT) /// Convert the object (obsolete) /** * If the object can't be converted to T, msgpack::type_error would be thrown. @@ -180,6 +182,7 @@ struct object { */ template T* convert(T* v) const; +#endif // !defined(MSGPACK_DISABLE_LEGACY_CONVERT) /// Convert the object if not nil /** diff --git a/test/Makefile.am b/test/Makefile.am index 35aa4b65..3ce6a568 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,4 +1,4 @@ -AM_CPPFLAGS = -I$(top_srcdir)/include -pthread -DMSGPACK_DISABLE_LEGACY_NIL +AM_CPPFLAGS = -I$(top_srcdir)/include -pthread -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT AM_C_CPPFLAGS = -I$(top_srcdir)/include -pthread AM_LDFLAGS = $(top_builddir)/src/libmsgpackc.la -lgtest_main -lgtest -lpthread diff --git a/test/convert.cpp b/test/convert.cpp index b30ecade..ae63a0ea 100644 --- a/test/convert.cpp +++ b/test/convert.cpp @@ -33,10 +33,10 @@ TEST(convert, compatibility_less) src[0] = "kumofs"; msgpack::zone z; - msgpack::object obj(src, &z); + msgpack::object obj(src, z); compatibility c; - EXPECT_NO_THROW( obj.convert(&c) ); + EXPECT_NO_THROW( obj.convert(c) ); EXPECT_EQ("kumofs", c.str1); EXPECT_EQ("default", c.str2); @@ -50,10 +50,10 @@ TEST(convert, compatibility_more) src[2] = "cloudy"; msgpack::zone z; - msgpack::object obj(src, &z); + msgpack::object obj(src, z); compatibility to; - EXPECT_NO_THROW( obj.convert(&to) ); + EXPECT_NO_THROW( obj.convert(to) ); EXPECT_EQ("kumofs", to.str1); EXPECT_EQ("mpio", to.str2); @@ -65,24 +65,14 @@ TEST(convert, enum_member) src.flag = enum_member::B; msgpack::zone z; - msgpack::object obj(src, &z); + msgpack::object obj(src, z); enum_member to; - EXPECT_NO_THROW( obj.convert(&to) ); + EXPECT_NO_THROW( obj.convert(to) ); EXPECT_EQ(enum_member::B, to.flag); } -TEST(convert, return_value_ptr) -{ - msgpack::zone z; - msgpack::object obj(1, z); - - int i; - EXPECT_EQ(obj.convert(&i), &i); - EXPECT_EQ(1, i); -} - TEST(convert, return_value_ref) { msgpack::zone z; @@ -94,6 +84,20 @@ TEST(convert, return_value_ref) EXPECT_EQ(i, j); } +#if !defined(MSGPACK_DISABLE_LEGACY_CONVERT) + +TEST(convert, return_value_ptr) +{ + msgpack::zone z; + msgpack::object obj(1, z); + + int i; + EXPECT_EQ(obj.convert(&i), &i); + EXPECT_EQ(1, i); +} + +#endif // !defined(MSGPACK_DISABLE_LEGACY_CONVERT) + TEST(convert, if_not_nil_nil) { msgpack::object obj; diff --git a/test/fixint.cpp b/test/fixint.cpp index cf109ae5..961302f8 100644 --- a/test/fixint.cpp +++ b/test/fixint.cpp @@ -33,7 +33,7 @@ void check_convert() { msgpack::unpack(&msg, sbuf.data(), sbuf.size()); T v2; - msg.get().convert(&v2); + msg.get().convert(v2); EXPECT_EQ(v1.get(), v2.get()); @@ -52,4 +52,3 @@ TEST(fixint, convert) check_convert(); check_convert(); } - diff --git a/test/msgpack_stream.cpp b/test/msgpack_stream.cpp index a317cca2..57d18859 100644 --- a/test/msgpack_stream.cpp +++ b/test/msgpack_stream.cpp @@ -45,7 +45,7 @@ const unsigned int kLoop = 1000; if (it == vec.end()) goto out; \ msgpack::object obj = result.get(); \ vec_type::value_type val; \ - obj.convert(&val); \ + obj.convert(val); \ EXPECT_EQ(*it, val); \ ++it; \ } \ diff --git a/test/object.cpp b/test/object.cpp index 4a4074cd..faeb8521 100644 --- a/test/object.cpp +++ b/test/object.cpp @@ -72,7 +72,7 @@ TEST(object, convert) msgpack::unpack(ret, sbuf.data(), sbuf.size()); myclass m2; - ret.get().convert(&m2); + ret.get().convert(m2); EXPECT_EQ(m1, m2); } diff --git a/test/user_class.cpp b/test/user_class.cpp index 6fa18485..f8ad20f2 100644 --- a/test/user_class.cpp +++ b/test/user_class.cpp @@ -149,13 +149,13 @@ public: void msgpack_unpack(msgpack::object o) { msgpack::type::tuple tuple; - o.convert(&tuple); + o.convert(tuple); is_double = tuple.get<0>(); if (is_double) - tuple.get<1>().convert(&value.f); + tuple.get<1>().convert(value.f); else - tuple.get<1>().convert(&value.i); + tuple.get<1>().convert(value.i); } };