From 023f81ae9c9f0b5d6eed276377b5fc9a9c7c1acd Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Sun, 1 Feb 2015 22:30:21 +0900 Subject: [PATCH 1/2] Added char* support. --- include/msgpack/adaptor/char_ptr.hpp | 16 ++++++++++++++++ include/msgpack/adaptor/char_ptr_fwd.hpp | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/include/msgpack/adaptor/char_ptr.hpp b/include/msgpack/adaptor/char_ptr.hpp index dca1acff..7a8c5cd2 100644 --- a/include/msgpack/adaptor/char_ptr.hpp +++ b/include/msgpack/adaptor/char_ptr.hpp @@ -53,6 +53,22 @@ inline void operator<< (object& o, const char* v) o.via.str.size = static_cast(size); } +template +inline packer& operator<< (packer& o, char* v) +{ + return msgpack::operator<<(o, static_cast(v)); +} + +inline void operator<< (object::with_zone& o, char* v) +{ + msgpack::operator<<(o, static_cast(v)); +} + +inline void operator<< (object& o, char* v) +{ + msgpack::operator<<(o, static_cast(v)); +} + } // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack diff --git a/include/msgpack/adaptor/char_ptr_fwd.hpp b/include/msgpack/adaptor/char_ptr_fwd.hpp index f6290e6a..7d044456 100644 --- a/include/msgpack/adaptor/char_ptr_fwd.hpp +++ b/include/msgpack/adaptor/char_ptr_fwd.hpp @@ -31,6 +31,11 @@ packer& operator<< (packer& o, const char* v); void operator<< (object::with_zone& o, const char* v); void operator<< (object& o, const char* v); +template +packer& operator<< (packer& o, char* v); +void operator<< (object::with_zone& o, char* v); +void operator<< (object& o, char* v); + } // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack From 6443738f66d6851852b1b402300c9c9a7446b18d Mon Sep 17 00:00:00 2001 From: Nobuyuki Kubota Date: Tue, 10 Mar 2015 15:42:44 +0900 Subject: [PATCH 2/2] Add serialization test of non-const char* --- test/msgpack_basic.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/msgpack_basic.cpp b/test/msgpack_basic.cpp index 56087de8..3f2fd4d1 100644 --- a/test/msgpack_basic.cpp +++ b/test/msgpack_basic.cpp @@ -497,3 +497,23 @@ TEST(MSGPACK_STL, simple_buffer_cstring) EXPECT_EQ(val1, val2); } } + +TEST(MSGPACK_STL, simple_buffer_non_const_cstring) +{ + for (unsigned int k = 0; k < kLoop; k++) { + string val1; + for (unsigned int i = 0; i < kElements; i++) + val1 += 'a' + rand() % 26; + msgpack::sbuffer sbuf; + char* s = new char[val1.size() + 1]; + std::strcpy(s, val1.c_str()); + msgpack::pack(sbuf, s); + delete [] s; + msgpack::unpacked ret; + msgpack::unpack(ret, sbuf.data(), sbuf.size()); + EXPECT_EQ(ret.get().type, msgpack::type::STR); + string val2 = ret.get().as(); + EXPECT_EQ(val1.size(), val2.size()); + EXPECT_EQ(val1, val2); + } +}