Removed obsolete APIs form v2.

Removed MSGPACK_DISABLE_LEGACY_CONVERT from v2. Those APIs are removed
from v2.
This commit is contained in:
Takatoshi Kondo 2016-03-21 22:34:57 +09:00
parent 72c7feb2c4
commit 31a06a0682
17 changed files with 362 additions and 80 deletions

View File

@ -21,9 +21,6 @@ OPTION (MSGPACK_CXX11 "Using c++11 compiler" OFF)
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)
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
@ -177,14 +174,18 @@ IF (MSGPACK_ENABLE_CXX)
LIST (APPEND msgpack_HEADERS
include/msgpack.hpp
include/msgpack/adaptor/adaptor_base.hpp
include/msgpack/adaptor/adaptor_base_decl.hpp
include/msgpack/adaptor/array_ref.hpp
include/msgpack/adaptor/array_ref_decl.hpp
include/msgpack/adaptor/bool.hpp
include/msgpack/adaptor/boost/fusion.hpp
include/msgpack/adaptor/boost/msgpack_variant.hpp
include/msgpack/adaptor/boost/msgpack_variant_decl.hpp
include/msgpack/adaptor/boost/optional.hpp
include/msgpack/adaptor/boost/string_ref.hpp
include/msgpack/adaptor/char_ptr.hpp
include/msgpack/adaptor/check_container_size.hpp
include/msgpack/adaptor/check_container_size_decl.hpp
include/msgpack/adaptor/cpp11/array.hpp
include/msgpack/adaptor/cpp11/array_char.hpp
include/msgpack/adaptor/cpp11/array_unsigned_char.hpp
@ -196,49 +197,195 @@ IF (MSGPACK_ENABLE_CXX)
include/msgpack/adaptor/cpp11/unordered_map.hpp
include/msgpack/adaptor/cpp11/unordered_set.hpp
include/msgpack/adaptor/define.hpp
include/msgpack/adaptor/define_decl.hpp
include/msgpack/adaptor/deque.hpp
include/msgpack/adaptor/detail/cpp03_define_array.hpp
include/msgpack/adaptor/detail/cpp03_define_map.hpp
include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp
include/msgpack/adaptor/detail/cpp11_define_array.hpp
include/msgpack/adaptor/detail/cpp11_define_map.hpp
include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp
include/msgpack/adaptor/ext.hpp
include/msgpack/adaptor/ext_decl.hpp
include/msgpack/adaptor/fixint.hpp
include/msgpack/adaptor/fixint_decl.hpp
include/msgpack/adaptor/float.hpp
include/msgpack/adaptor/int.hpp
include/msgpack/adaptor/int_decl.hpp
include/msgpack/adaptor/list.hpp
include/msgpack/adaptor/map.hpp
include/msgpack/adaptor/map_decl.hpp
include/msgpack/adaptor/msgpack_tuple.hpp
include/msgpack/adaptor/msgpack_tuple_decl.hpp
include/msgpack/adaptor/nil.hpp
include/msgpack/adaptor/nil_decl.hpp
include/msgpack/adaptor/pair.hpp
include/msgpack/adaptor/raw.hpp
include/msgpack/adaptor/v4raw.hpp
include/msgpack/adaptor/raw_decl.hpp
include/msgpack/adaptor/set.hpp
include/msgpack/adaptor/string.hpp
include/msgpack/adaptor/tr1/unordered_map.hpp
include/msgpack/adaptor/tr1/unordered_set.hpp
include/msgpack/adaptor/v4raw.hpp
include/msgpack/adaptor/v4raw_decl.hpp
include/msgpack/adaptor/vector.hpp
include/msgpack/adaptor/vector_bool.hpp
include/msgpack/adaptor/vector_char.hpp
include/msgpack/adaptor/vector_unsigned_char.hpp
include/msgpack/cpp_config.hpp
include/msgpack/detail/cpp03_zone.hpp
include/msgpack/detail/cpp11_zone.hpp
include/msgpack/cpp_config_decl.hpp
include/msgpack/fbuffer.hpp
include/msgpack/fbuffer_decl.hpp
include/msgpack/iterator.hpp
include/msgpack/iterator_decl.hpp
include/msgpack/meta.hpp
include/msgpack/meta_decl.hpp
include/msgpack/object.hpp
include/msgpack/object_decl.hpp
include/msgpack/object_fwd.hpp
include/msgpack/object_fwd_decl.hpp
include/msgpack/pack.hpp
include/msgpack/pack_decl.hpp
include/msgpack/sbuffer.hpp
include/msgpack/sbuffer_decl.hpp
include/msgpack/type.hpp
include/msgpack/unpack.hpp
include/msgpack/unpack_decl.hpp
include/msgpack/v1/adaptor/adaptor_base.hpp
include/msgpack/v1/adaptor/adaptor_base_decl.hpp
include/msgpack/v1/adaptor/array_ref.hpp
include/msgpack/v1/adaptor/array_ref_decl.hpp
include/msgpack/v1/adaptor/bool.hpp
include/msgpack/v1/adaptor/boost/fusion.hpp
include/msgpack/v1/adaptor/boost/msgpack_variant.hpp
include/msgpack/v1/adaptor/boost/msgpack_variant_decl.hpp
include/msgpack/v1/adaptor/boost/optional.hpp
include/msgpack/v1/adaptor/boost/string_ref.hpp
include/msgpack/v1/adaptor/char_ptr.hpp
include/msgpack/v1/adaptor/check_container_size.hpp
include/msgpack/v1/adaptor/check_container_size_decl.hpp
include/msgpack/v1/adaptor/cpp11/array.hpp
include/msgpack/v1/adaptor/cpp11/array_char.hpp
include/msgpack/v1/adaptor/cpp11/array_unsigned_char.hpp
include/msgpack/v1/adaptor/cpp11/forward_list.hpp
include/msgpack/v1/adaptor/cpp11/reference_wrapper.hpp
include/msgpack/v1/adaptor/cpp11/shared_ptr.hpp
include/msgpack/v1/adaptor/cpp11/tuple.hpp
include/msgpack/v1/adaptor/cpp11/unique_ptr.hpp
include/msgpack/v1/adaptor/cpp11/unordered_map.hpp
include/msgpack/v1/adaptor/cpp11/unordered_set.hpp
include/msgpack/v1/adaptor/define.hpp
include/msgpack/v1/adaptor/define_decl.hpp
include/msgpack/v1/adaptor/deque.hpp
include/msgpack/v1/adaptor/detail/cpp03_define_array.hpp
include/msgpack/v1/adaptor/detail/cpp03_define_array_decl.hpp
include/msgpack/v1/adaptor/detail/cpp03_define_map.hpp
include/msgpack/v1/adaptor/detail/cpp03_define_map_decl.hpp
include/msgpack/v1/adaptor/detail/cpp03_msgpack_tuple.hpp
include/msgpack/v1/adaptor/detail/cpp03_msgpack_tuple_decl.hpp
include/msgpack/v1/adaptor/detail/cpp11_define_array.hpp
include/msgpack/v1/adaptor/detail/cpp11_define_array_decl.hpp
include/msgpack/v1/adaptor/detail/cpp11_define_map.hpp
include/msgpack/v1/adaptor/detail/cpp11_define_map_decl.hpp
include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple.hpp
include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple_decl.hpp
include/msgpack/v1/adaptor/ext.hpp
include/msgpack/v1/adaptor/ext_decl.hpp
include/msgpack/v1/adaptor/fixint.hpp
include/msgpack/v1/adaptor/fixint_decl.hpp
include/msgpack/v1/adaptor/float.hpp
include/msgpack/v1/adaptor/int.hpp
include/msgpack/v1/adaptor/int_decl.hpp
include/msgpack/v1/adaptor/list.hpp
include/msgpack/v1/adaptor/map.hpp
include/msgpack/v1/adaptor/map_decl.hpp
include/msgpack/v1/adaptor/msgpack_tuple.hpp
include/msgpack/v1/adaptor/msgpack_tuple_decl.hpp
include/msgpack/v1/adaptor/nil.hpp
include/msgpack/v1/adaptor/nil_decl.hpp
include/msgpack/v1/adaptor/pair.hpp
include/msgpack/v1/adaptor/raw.hpp
include/msgpack/v1/adaptor/raw_decl.hpp
include/msgpack/v1/adaptor/set.hpp
include/msgpack/v1/adaptor/string.hpp
include/msgpack/v1/adaptor/tr1/unordered_map.hpp
include/msgpack/v1/adaptor/tr1/unordered_set.hpp
include/msgpack/v1/adaptor/v4raw.hpp
include/msgpack/v1/adaptor/v4raw_decl.hpp
include/msgpack/v1/adaptor/vector.hpp
include/msgpack/v1/adaptor/vector_bool.hpp
include/msgpack/v1/adaptor/vector_char.hpp
include/msgpack/v1/adaptor/vector_unsigned_char.hpp
include/msgpack/v1/cpp_config.hpp
include/msgpack/v1/cpp_config_decl.hpp
include/msgpack/v1/detail/cpp03_zone.hpp
include/msgpack/v1/detail/cpp03_zone_decl.hpp
include/msgpack/v1/detail/cpp11_zone.hpp
include/msgpack/v1/detail/cpp11_zone_decl.hpp
include/msgpack/v1/fbuffer.hpp
include/msgpack/v1/fbuffer_decl.hpp
include/msgpack/v1/iterator.hpp
include/msgpack/v1/iterator_decl.hpp
include/msgpack/v1/meta.hpp
include/msgpack/v1/meta_decl.hpp
include/msgpack/v1/object.hpp
include/msgpack/v1/object_decl.hpp
include/msgpack/v1/object_fwd.hpp
include/msgpack/v1/object_fwd_decl.hpp
include/msgpack/v1/pack.hpp
include/msgpack/v1/pack_decl.hpp
include/msgpack/v1/preprocessor.hpp
include/msgpack/v1/sbuffer.hpp
include/msgpack/v1/sbuffer_decl.hpp
include/msgpack/v1/type.hpp
include/msgpack/v1/unpack.hpp
include/msgpack/v1/unpack_decl.hpp
include/msgpack/v1/version.hpp
include/msgpack/v1/versioning.hpp
include/msgpack/v1/vrefbuffer.hpp
include/msgpack/v1/vrefbuffer_decl.hpp
include/msgpack/v1/zbuffer.hpp
include/msgpack/v1/zbuffer_decl.hpp
include/msgpack/v1/zone.hpp
include/msgpack/v1/zone_decl.hpp
include/msgpack/v2/adaptor/adaptor_base.hpp
include/msgpack/v2/adaptor/adaptor_base_decl.hpp
include/msgpack/v2/adaptor/array_ref_decl.hpp
include/msgpack/v2/adaptor/boost/msgpack_variant_decl.hpp
include/msgpack/v2/adaptor/check_container_size_decl.hpp
include/msgpack/v2/adaptor/define_decl.hpp
include/msgpack/v2/adaptor/detail/cpp03_define_array_decl.hpp
include/msgpack/v2/adaptor/detail/cpp03_define_map_decl.hpp
include/msgpack/v2/adaptor/detail/cpp03_msgpack_tuple_decl.hpp
include/msgpack/v2/adaptor/detail/cpp11_define_array_decl.hpp
include/msgpack/v2/adaptor/detail/cpp11_define_map_decl.hpp
include/msgpack/v2/adaptor/detail/cpp11_msgpack_tuple_decl.hpp
include/msgpack/v2/adaptor/ext_decl.hpp
include/msgpack/v2/adaptor/fixint_decl.hpp
include/msgpack/v2/adaptor/int_decl.hpp
include/msgpack/v2/adaptor/map_decl.hpp
include/msgpack/v2/adaptor/msgpack_tuple_decl.hpp
include/msgpack/v2/adaptor/nil_decl.hpp
include/msgpack/v2/adaptor/raw_decl.hpp
include/msgpack/v2/adaptor/v4raw_decl.hpp
include/msgpack/v2/cpp_config_decl.hpp
include/msgpack/v2/detail/cpp03_zone_decl.hpp
include/msgpack/v2/detail/cpp11_zone_decl.hpp
include/msgpack/v2/fbuffer_decl.hpp
include/msgpack/v2/iterator_decl.hpp
include/msgpack/v2/meta_decl.hpp
include/msgpack/v2/object.hpp
include/msgpack/v2/object_decl.hpp
include/msgpack/v2/object_fwd.hpp
include/msgpack/v2/object_fwd_decl.hpp
include/msgpack/v2/pack_decl.hpp
include/msgpack/v2/sbuffer_decl.hpp
include/msgpack/v2/unpack_decl.hpp
include/msgpack/v2/vrefbuffer_decl.hpp
include/msgpack/v2/zbuffer_decl.hpp
include/msgpack/v2/zone_decl.hpp
include/msgpack/version.hpp
include/msgpack/versioning.hpp
include/msgpack/vrefbuffer.hpp
include/msgpack/vrefbuffer_decl.hpp
include/msgpack/zbuffer.hpp
include/msgpack/zbuffer_decl.hpp
include/msgpack/zone.hpp
include/msgpack/zone_decl.hpp
)
FILE (GLOB_RECURSE PREPROCESSOR_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/preprocessor/*.hpp)

View File

@ -47,13 +47,11 @@ int main(void) {
Compile it as follows:
```
$ g++ -Ipath_to_msgpack/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT hello.cc -o hello
$ g++ -Ipath_to_msgpack/include 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) and [MSGPACK_DISABLE_LEGACY_CONVERT](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_convert-since-140).
## Streaming feature
```cpp
@ -85,7 +83,7 @@ int main(void) {
}
// results:
// $ g++ -Ipath_to_msgpack/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT stream.cc -o stream
// $ g++ -Ipath_to_msgpack/include stream.cc -o stream
// $ ./stream
// "Log message ... 1"
// "Log message ... 2"
@ -93,8 +91,6 @@ 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) 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
```cpp

View File

@ -113,9 +113,7 @@ 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 -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) and [MSGPACK_DISABLE_LEGACY_CONVERT](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_convert-since-140).
g++ -I msgpack-c/include your_source_file.cpp
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.

View File

@ -5,12 +5,17 @@ LIST (APPEND exec_PROGRAMS
custom.cpp
enum.cpp
map_based_versionup.cpp
protocol.cpp
protocol_new.cpp
reuse_zone.cpp
simple.cpp
)
IF (MSGPACK_DEFAULT_API_VERSION EQUAL 1)
LIST (APPEND exec_PROGRAMS
protocol.cpp
)
ENDIF ()
IF (NOT MSVC)
LIST (APPEND with_pthread_PROGRAMS
stream.cpp

View File

@ -13,5 +13,6 @@
#include "msgpack/object_decl.hpp"
#include "msgpack/v1/object.hpp"
#include "msgpack/v2/object.hpp"
#endif // MSGPACK_OBJECT_HPP

View File

@ -43,7 +43,7 @@ struct object_with_zone;
// operators
template <typename T>
msgpack::object const& operator>> (msgpack::object const& o, T& v);
msgpack::object const& operator>> (msgpack::object const& o, T& v);
template <typename Stream, typename T>
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, T const& v);

View File

@ -26,6 +26,19 @@ namespace msgpack {
MSGPACK_API_VERSION_NAMESPACE(v1) {
/// @endcond
struct object_kv {
msgpack::object key;
msgpack::object val;
};
struct object::with_zone : msgpack::object {
with_zone(msgpack::zone& z) : zone(z) { }
msgpack::zone& zone;
private:
with_zone();
};
/// The class holds object and zone
class object_handle {
public:
@ -171,16 +184,8 @@ inline object_handle clone(msgpack::object const& obj) {
return object_handle(newobj, msgpack::move(z));
}
struct object::implicit_type {
implicit_type(object const& o) : obj(o) { }
~implicit_type() { }
template <typename T>
operator T() { return obj.as<T>(); }
private:
msgpack::object const& obj;
};
template <typename T>
inline object::implicit_type::operator T() { return obj.as<T>(); }
namespace detail {
template <typename Stream, typename T>
@ -515,9 +520,9 @@ inline bool operator!=(const T& y, const msgpack::object& x)
{ return x != y; }
inline msgpack::object::implicit_type object::convert() const
inline object::implicit_type object::convert() const
{
return msgpack::object::implicit_type(*this);
return object::implicit_type(*this);
}
template <typename T>
@ -580,7 +585,7 @@ inline object::object()
template <typename T>
inline object::object(const T& v)
{
msgpack::operator<<(*this, v);
*this << v;
}
template <typename T>

View File

@ -212,7 +212,7 @@ struct object {
struct with_zone;
private:
protected:
struct implicit_type;
public:
@ -221,16 +221,15 @@ public:
class type_error : public std::bad_cast { };
struct object_kv {
msgpack::object key;
msgpack::object val;
};
struct object::implicit_type {
implicit_type(object const& o) : obj(o) { }
~implicit_type() { }
template <typename T>
operator T();
struct object::with_zone : object {
with_zone(msgpack::zone& z) : zone(z) { }
msgpack::zone& zone;
private:
with_zone();
object const& obj;
};
/// @cond

View File

@ -1003,7 +1003,7 @@ public:
* This function is obsolete. Use the reference inteface version of next() function instead of
* the pointer interface version.
*/
bool next(object_handle* result);
bool next(msgpack::object_handle* result);
/// Unpack one msgpack::object.
/**
@ -1019,7 +1019,7 @@ public:
* See:
* https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_unpacker#msgpack-controls-a-buffer
*/
bool next(object_handle& result, bool& referenced);
bool next(msgpack::object_handle& result, bool& referenced);
/// Unpack one msgpack::object.
/**
@ -1033,7 +1033,7 @@ public:
* See:
* https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_unpacker#msgpack-controls-a-buffer
*/
bool next(object_handle& result);
bool next(msgpack::object_handle& result);
/// Get message size.
/**
@ -1281,7 +1281,7 @@ inline void unpacker::buffer_consumed(std::size_t size)
m_free -= size;
}
inline bool unpacker::next(object_handle& result, bool& referenced)
inline bool unpacker::next(msgpack::object_handle& result, bool& referenced)
{
referenced = false;
int ret = execute_imp();
@ -1291,7 +1291,7 @@ inline bool unpacker::next(object_handle& result, bool& referenced)
if(ret == 0) {
result.zone().reset();
result.set(object());
result.set(msgpack::object());
return false;
} else {
@ -1303,13 +1303,13 @@ inline bool unpacker::next(object_handle& result, bool& referenced)
}
}
inline bool unpacker::next(object_handle& result)
inline bool unpacker::next(msgpack::object_handle& result)
{
bool referenced;
return next(result, referenced);
}
inline bool unpacker::next(object_handle* result)
inline bool unpacker::next(msgpack::object_handle* result)
{
return next(*result);
}
@ -1461,7 +1461,7 @@ unpack_imp(const char* data, std::size_t len, std::size_t& off,
// reference version
inline object_handle unpack(
inline msgpack::object_handle unpack(
const char* data, std::size_t len, std::size_t& off, bool& referenced,
unpack_reference_func f, void* user_data,
unpack_limit const& limit
@ -1477,20 +1477,20 @@ inline object_handle unpack(
switch(ret) {
case UNPACK_SUCCESS:
off = noff;
return object_handle(obj, msgpack::move(z));
return msgpack::object_handle(obj, msgpack::move(z));
case UNPACK_EXTRA_BYTES:
off = noff;
return object_handle(obj, msgpack::move(z));
return msgpack::object_handle(obj, msgpack::move(z));
case UNPACK_CONTINUE:
throw msgpack::insufficient_bytes("insufficient bytes");
case UNPACK_PARSE_ERROR:
default:
throw msgpack::parse_error("parse error");
}
return object_handle();
return msgpack::object_handle();
}
inline object_handle unpack(
inline msgpack::object_handle unpack(
const char* data, std::size_t len, std::size_t& off,
unpack_reference_func f, void* user_data,
unpack_limit const& limit)
@ -1499,7 +1499,7 @@ inline object_handle unpack(
return unpack(data, len, off, referenced, f, user_data, limit);
}
inline object_handle unpack(
inline msgpack::object_handle unpack(
const char* data, std::size_t len, bool& referenced,
unpack_reference_func f, void* user_data,
unpack_limit const& limit)
@ -1508,7 +1508,7 @@ inline object_handle unpack(
return unpack(data, len, off, referenced, f, user_data, limit);
}
inline object_handle unpack(
inline msgpack::object_handle unpack(
const char* data, std::size_t len,
unpack_reference_func f, void* user_data,
unpack_limit const& limit)
@ -1519,7 +1519,7 @@ inline object_handle unpack(
}
inline void unpack(
object_handle& result,
msgpack::object_handle& result,
const char* data, std::size_t len, std::size_t& off, bool& referenced,
unpack_reference_func f, void* user_data,
unpack_limit const& limit)
@ -1551,7 +1551,7 @@ inline void unpack(
}
inline void unpack(
object_handle& result,
msgpack::object_handle& result,
const char* data, std::size_t len, std::size_t& off,
unpack_reference_func f, void* user_data,
unpack_limit const& limit)
@ -1561,7 +1561,7 @@ inline void unpack(
}
inline void unpack(
object_handle& result,
msgpack::object_handle& result,
const char* data, std::size_t len, bool& referenced,
unpack_reference_func f, void* user_data,
unpack_limit const& limit)
@ -1571,7 +1571,7 @@ inline void unpack(
}
inline void unpack(
object_handle& result,
msgpack::object_handle& result,
const char* data, std::size_t len,
unpack_reference_func f, void* user_data,
unpack_limit const& limit)
@ -1644,7 +1644,7 @@ inline msgpack::object unpack(
// obsolete
// pointer version
inline void unpack(
object_handle* result,
msgpack::object_handle* result,
const char* data, std::size_t len, std::size_t* off, bool* referenced,
unpack_reference_func f, void* user_data,
unpack_limit const& limit)

View File

@ -0,0 +1,33 @@
//
// MessagePack for C++ static resolution routine
//
// Copyright (C) 2016 KONDO Takatoshi
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
#ifndef MSGPACK_V2_OBJECT_HPP
#define MSGPACK_V2_OBJECT_HPP
#include "msgpack/object_fwd.hpp"
namespace msgpack {
/// @cond
MSGPACK_API_VERSION_NAMESPACE(v2) {
/// @endcond
inline object::implicit_type object::convert() const
{
return v1::object::convert();
}
/// @cond
} // MSGPACK_API_VERSION_NAMESPACE(v2)
/// @endcond
} // namespace msgpack
#endif // MSGPACK_V2_OBJECT_HPP

View File

@ -37,21 +37,9 @@ using v1::detail::packer_serializer;
} // namespace detail
// obsolete
using v1::define;
using v1::operator==;
using v1::operator!=;
// obsolete
using v1::convert;
// obsolete
using v1::pack;
// obsolete
using v1::pack_copy;
/// @cond
} // MSGPACK_API_VERSION_NAMESPACE(v2)
/// @endcond

View File

@ -12,6 +12,7 @@
#define MSGPACK_V2_OBJECT_FWD_HPP
#include "msgpack/v2/object_fwd_decl.hpp"
#include "msgpack/object_fwd.hpp"
namespace msgpack {
@ -19,6 +20,49 @@ namespace msgpack {
MSGPACK_API_VERSION_NAMESPACE(v2) {
/// @endcond
struct object : v1::object {
object() {}
object(v1::object const& o):v1::object(o) {}
/// Construct object from T
/**
* If `v` is the type that is corresponding to MessegePack format str, bin, ext, array, or map,
* you need to call `object(const T& v, msgpack::zone& z)` instead of this constructor.
*
* @tparam T The type of `v`.
* @param v The value you want to convert.
*/
template <typename T>
explicit object(const T& v) {
*this << v;
}
/// Construct object from T
/**
* The object is constructed on the zone `z`.
* See https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_object
*
* @tparam T The type of `v`.
* @param v The value you want to convert.
* @param z The zone that is used by the object.
*/
template <typename T>
object(const T& v, msgpack::zone& z):v1::object(v, z) {}
public:
/// Convert the object
/**
* If the object can't be converted to T, msgpack::type_error would be thrown.
* @tparam T The type of v.
* @param v The value you want to get. `v` is output parameter. `v` is overwritten by converted value from the object.
* @return The reference of `v`.
*/
template <typename T>
T& convert(T& v) const { return v1::object::convert(v); }
using v1::object::with_zone;
implicit_type convert() const;
};
#if !defined(MSGPACK_USE_CPP03)
namespace adaptor {

View File

@ -36,7 +36,8 @@ using v1::type::MAP;
using v1::type::EXT;
} // namespace type
using v1::object;
struct object;
using v1::object_kv;
using v1::object_array;

View File

@ -357,6 +357,7 @@ nobase_include_HEADERS += \
../include/msgpack/v2/fbuffer_decl.hpp \
../include/msgpack/v2/iterator_decl.hpp \
../include/msgpack/v2/meta_decl.hpp \
../include/msgpack/v2/object.hpp \
../include/msgpack/v2/object_decl.hpp \
../include/msgpack/v2/object_fwd.hpp \
../include/msgpack/v2/object_fwd_decl.hpp \

View File

@ -1,4 +1,4 @@
AM_CPPFLAGS = -I$(top_srcdir)/include -pthread -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT
AM_CPPFLAGS = -I$(top_srcdir)/include -pthread
AM_C_CPPFLAGS = -I$(top_srcdir)/include -pthread
AM_LDFLAGS = $(top_builddir)/src/libmsgpackc.la -lgtest_main -lgtest -lpthread

View File

@ -84,7 +84,7 @@ TEST(convert, return_value_ref)
EXPECT_EQ(i, j);
}
#if !defined(MSGPACK_DISABLE_LEGACY_CONVERT)
#if MSGPACK_DEFAULT_API_VERSION == 1 && !defined(MSGPACK_DISABLE_LEGACY_CONVERT)
TEST(convert, return_value_ptr)
{
@ -96,7 +96,7 @@ TEST(convert, return_value_ptr)
EXPECT_EQ(1, i);
}
#endif // !defined(MSGPACK_DISABLE_LEGACY_CONVERT)
#endif // MSGPACK_DEFAULT_API_VERSION == 1 && !defined(MSGPACK_DISABLE_LEGACY_CONVERT)
TEST(convert, if_not_nil_nil)
{

View File

@ -459,3 +459,67 @@ TEST(MSGPACK_MIGRATION, order_number_changed)
EXPECT_EQ(v2.s, "foo"); // from v1
EXPECT_EQ(v2.i, 42); // from v1
}
// non intrusive with operator <<
class test_non_intrusive {
public:
const std::string& name() const { return m_name; }
void set_name(const std::string& name) { m_name = name; }
private:
std::string m_name;
};
namespace msgpack {
MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) {
namespace adaptor {
template<>
struct convert<test_non_intrusive>
{
msgpack::object const& operator()(
msgpack::object const& o,
test_non_intrusive& t) const {
t.set_name(o.as<std::string>());
return o;
}
};
template<>
struct pack<test_non_intrusive>
{
template <typename Stream>
msgpack::packer<Stream>& operator()(
msgpack::packer<Stream>& p,
test_non_intrusive const& t) const {
p.pack(t.name());
return p;
}
};
template <>
struct object_with_zone<test_non_intrusive>
{
void operator()(
msgpack::object::with_zone& o,
const test_non_intrusive& t) const {
o << t.name();
}
};
} // namespace adaptor
} // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
} // namespace msgpack
TEST(MSGPACK_USER_DEFINED, test_non_intrusive)
{
test_non_intrusive t1;
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, t1);
msgpack::object_handle oh =
msgpack::unpack(sbuf.data(), sbuf.size());
test_non_intrusive t2 = oh.get().as<test_non_intrusive>();
EXPECT_EQ(t1.name(), t2.name());
}