mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-14 15:05:37 +02:00
Added unpack function using existing zone.
Removed redundant inline keyword form declarations.
This commit is contained in:
@@ -1108,19 +1108,19 @@ private:
|
|||||||
|
|
||||||
#if !defined(MSGPACK_USE_CPP03)
|
#if !defined(MSGPACK_USE_CPP03)
|
||||||
|
|
||||||
inline unpacked unpack(
|
unpacked unpack(
|
||||||
const char* data, std::size_t len, std::size_t& off, bool& referenced,
|
const char* data, std::size_t len, std::size_t& off, bool& referenced,
|
||||||
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
||||||
unpack_limit const& limit = unpack_limit());
|
unpack_limit const& limit = unpack_limit());
|
||||||
inline unpacked unpack(
|
unpacked unpack(
|
||||||
const char* data, std::size_t len, std::size_t& off,
|
const char* data, std::size_t len, std::size_t& off,
|
||||||
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
||||||
unpack_limit const& limit = unpack_limit());
|
unpack_limit const& limit = unpack_limit());
|
||||||
inline unpacked unpack(
|
unpacked unpack(
|
||||||
const char* data, std::size_t len, bool& referenced,
|
const char* data, std::size_t len, bool& referenced,
|
||||||
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
||||||
unpack_limit const& limit = unpack_limit());
|
unpack_limit const& limit = unpack_limit());
|
||||||
inline unpacked unpack(
|
unpacked unpack(
|
||||||
const char* data, std::size_t len,
|
const char* data, std::size_t len,
|
||||||
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
||||||
unpack_limit const& limit = unpack_limit());
|
unpack_limit const& limit = unpack_limit());
|
||||||
@@ -1128,29 +1128,51 @@ inline unpacked unpack(
|
|||||||
#endif // !defined(MSGPACK_USE_CPP03)
|
#endif // !defined(MSGPACK_USE_CPP03)
|
||||||
|
|
||||||
|
|
||||||
inline void unpack(unpacked& result,
|
void unpack(unpacked& result,
|
||||||
const char* data, std::size_t len, std::size_t& off, bool& referenced,
|
const char* data, std::size_t len, std::size_t& off, bool& referenced,
|
||||||
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
||||||
unpack_limit const& limit = unpack_limit());
|
unpack_limit const& limit = unpack_limit());
|
||||||
inline void unpack(unpacked& result,
|
void unpack(unpacked& result,
|
||||||
const char* data, std::size_t len, std::size_t& off,
|
const char* data, std::size_t len, std::size_t& off,
|
||||||
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
||||||
unpack_limit const& limit = unpack_limit());
|
unpack_limit const& limit = unpack_limit());
|
||||||
inline void unpack(unpacked& result,
|
void unpack(unpacked& result,
|
||||||
const char* data, std::size_t len, bool& referenced,
|
const char* data, std::size_t len, bool& referenced,
|
||||||
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
||||||
unpack_limit const& limit = unpack_limit());
|
unpack_limit const& limit = unpack_limit());
|
||||||
|
|
||||||
|
void unpack(unpacked& result,
|
||||||
|
const char* data, std::size_t len,
|
||||||
|
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
||||||
|
unpack_limit const& limit = unpack_limit());
|
||||||
|
|
||||||
|
object unpack(
|
||||||
|
zone& z,
|
||||||
|
const char* data, std::size_t len, std::size_t& off, bool& referenced,
|
||||||
|
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
||||||
|
unpack_limit const& limit = unpack_limit());
|
||||||
|
object unpack(
|
||||||
|
zone& z,
|
||||||
|
const char* data, std::size_t len, std::size_t& off,
|
||||||
|
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
||||||
|
unpack_limit const& limit = unpack_limit());
|
||||||
|
object unpack(
|
||||||
|
zone& z,
|
||||||
|
const char* data, std::size_t len, bool& referenced,
|
||||||
|
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
||||||
|
unpack_limit const& limit = unpack_limit());
|
||||||
|
object unpack(
|
||||||
|
zone& z,
|
||||||
|
const char* data, std::size_t len,
|
||||||
|
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
||||||
|
unpack_limit const& limit = unpack_limit());
|
||||||
|
|
||||||
inline void unpack(unpacked& result,
|
|
||||||
const char* data, std::size_t len,
|
|
||||||
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
|
||||||
unpack_limit const& limit = unpack_limit());
|
|
||||||
|
|
||||||
// obsolete
|
// obsolete
|
||||||
inline void unpack(unpacked* result,
|
void unpack(unpacked* result,
|
||||||
const char* data, std::size_t len, std::size_t* off = nullptr, bool* referenced = nullptr,
|
const char* data, std::size_t len, std::size_t* off = nullptr, bool* referenced = nullptr,
|
||||||
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
unpack_reference_func f = nullptr, void* user_data = nullptr,
|
||||||
unpack_limit const& limit = unpack_limit());
|
unpack_limit const& limit = unpack_limit());
|
||||||
|
|
||||||
|
|
||||||
// for internal use
|
// for internal use
|
||||||
@@ -1548,7 +1570,6 @@ inline unpacked unpack(
|
|||||||
|
|
||||||
#endif // !defined(MSGPACK_USE_CPP03)
|
#endif // !defined(MSGPACK_USE_CPP03)
|
||||||
|
|
||||||
|
|
||||||
inline void unpack(unpacked& result,
|
inline void unpack(unpacked& result,
|
||||||
const char* data, std::size_t len, std::size_t& off, bool& referenced,
|
const char* data, std::size_t len, std::size_t& off, bool& referenced,
|
||||||
unpack_reference_func f, void* user_data, unpack_limit const& limit)
|
unpack_reference_func f, void* user_data, unpack_limit const& limit)
|
||||||
@@ -1601,6 +1622,59 @@ inline void unpack(unpacked& result,
|
|||||||
unpack(result, data, len, off, referenced, f, user_data, limit);
|
unpack(result, data, len, off, referenced, f, user_data, limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline object unpack(
|
||||||
|
zone& z,
|
||||||
|
const char* data, std::size_t len, std::size_t& off, bool& referenced,
|
||||||
|
unpack_reference_func f, void* user_data, unpack_limit const& limit)
|
||||||
|
{
|
||||||
|
object obj;
|
||||||
|
referenced = false;
|
||||||
|
unpack_return ret = detail::unpack_imp(
|
||||||
|
data, len, off, z, obj, referenced, f, user_data, limit);
|
||||||
|
|
||||||
|
switch(ret) {
|
||||||
|
case UNPACK_SUCCESS:
|
||||||
|
return obj;
|
||||||
|
case UNPACK_EXTRA_BYTES:
|
||||||
|
return obj;
|
||||||
|
case UNPACK_CONTINUE:
|
||||||
|
throw insufficient_bytes("insufficient bytes");
|
||||||
|
case UNPACK_PARSE_ERROR:
|
||||||
|
default:
|
||||||
|
throw parse_error("parse error");
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline object unpack(
|
||||||
|
zone& z,
|
||||||
|
const char* data, std::size_t len, std::size_t& off,
|
||||||
|
unpack_reference_func f, void* user_data, unpack_limit const& limit)
|
||||||
|
{
|
||||||
|
bool referenced;
|
||||||
|
return unpack(z, data, len, off, referenced, f, user_data, limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline object unpack(
|
||||||
|
zone& z,
|
||||||
|
const char* data, std::size_t len, bool& referenced,
|
||||||
|
unpack_reference_func f, void* user_data, unpack_limit const& limit)
|
||||||
|
{
|
||||||
|
std::size_t off = 0;
|
||||||
|
return unpack(z, data, len, off, referenced, f, user_data, limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline object unpack(
|
||||||
|
zone& z,
|
||||||
|
const char* data, std::size_t len,
|
||||||
|
unpack_reference_func f, void* user_data, unpack_limit const& limit)
|
||||||
|
{
|
||||||
|
bool referenced;
|
||||||
|
std::size_t off = 0;
|
||||||
|
return unpack(z, data, len, off, referenced, f, user_data, limit);
|
||||||
|
}
|
||||||
|
|
||||||
// obsolete
|
// obsolete
|
||||||
// pointer version
|
// pointer version
|
||||||
inline void unpack(unpacked* result,
|
inline void unpack(unpacked* result,
|
||||||
|
@@ -218,6 +218,56 @@ TEST(unpack, int_default_null_pointer)
|
|||||||
EXPECT_EQ(1, msg.get().as<int>());
|
EXPECT_EQ(1, msg.get().as<int>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(unpack, int_zone_no_offset_no_ref)
|
||||||
|
{
|
||||||
|
msgpack::sbuffer sbuf;
|
||||||
|
msgpack::pack(sbuf, 1);
|
||||||
|
|
||||||
|
msgpack::zone z;
|
||||||
|
msgpack::object obj = msgpack::unpack(z, sbuf.data(), sbuf.size());
|
||||||
|
EXPECT_EQ(1, obj.as<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(unpack, int_zone_offset_no_ref)
|
||||||
|
{
|
||||||
|
msgpack::sbuffer sbuf;
|
||||||
|
msgpack::pack(sbuf, 1);
|
||||||
|
|
||||||
|
std::size_t off = 0;
|
||||||
|
|
||||||
|
msgpack::zone z;
|
||||||
|
msgpack::object obj = msgpack::unpack(z, sbuf.data(), sbuf.size(), off);
|
||||||
|
EXPECT_EQ(1, obj.as<int>());
|
||||||
|
EXPECT_EQ(off, sbuf.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(unpack, int_zone_no_offset_ref)
|
||||||
|
{
|
||||||
|
msgpack::sbuffer sbuf;
|
||||||
|
msgpack::pack(sbuf, 1);
|
||||||
|
bool referenced;
|
||||||
|
|
||||||
|
msgpack::zone z;
|
||||||
|
msgpack::object obj = msgpack::unpack(z, sbuf.data(), sbuf.size(), referenced);
|
||||||
|
EXPECT_EQ(1, obj.as<int>());
|
||||||
|
EXPECT_EQ(false, referenced);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(unpack, int_zone_offset_ref)
|
||||||
|
{
|
||||||
|
msgpack::sbuffer sbuf;
|
||||||
|
msgpack::pack(sbuf, 1);
|
||||||
|
std::size_t off = 0;
|
||||||
|
bool referenced;
|
||||||
|
|
||||||
|
msgpack::zone z;
|
||||||
|
msgpack::object obj = msgpack::unpack(z, sbuf.data(), sbuf.size(), off, referenced);
|
||||||
|
EXPECT_EQ(1, obj.as<int>());
|
||||||
|
EXPECT_EQ(false, referenced);
|
||||||
|
EXPECT_EQ(off, sbuf.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TEST(unpack, sequence)
|
TEST(unpack, sequence)
|
||||||
{
|
{
|
||||||
msgpack::sbuffer sbuf;
|
msgpack::sbuffer sbuf;
|
||||||
|
Reference in New Issue
Block a user