mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-07-03 17:17:13 +02:00
Modified 'unpacked' interface using references instead of pointers.
Added speed test for 'unpacked' based unpack() function.
This commit is contained in:
parent
521a4f4190
commit
27629a8dd6
@ -36,6 +36,16 @@ void test_map_pack_unpack() {
|
|||||||
std::cout << result << std::endl;
|
std::cout << result << std::endl;
|
||||||
}
|
}
|
||||||
std::cout << "Unpack finished..." << std::endl;
|
std::cout << "Unpack finished..." << std::endl;
|
||||||
|
|
||||||
|
msgpack::unpacked unpacked;
|
||||||
|
std::cout << "Start unpacking...by void unpack(unpacked* result, const char* data, size_t len, size_t* offset = NULL)" << std::endl;
|
||||||
|
{
|
||||||
|
boost::timer::cpu_timer timer;
|
||||||
|
msgpack::unpack(unpacked, str.data(), str.size());
|
||||||
|
std::string result = timer.format();
|
||||||
|
std::cout << result << std::endl;
|
||||||
|
}
|
||||||
|
std::cout << "Unpack finished..." << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -542,8 +542,8 @@ public:
|
|||||||
unpacked(object const& obj, msgpack::unique_ptr<msgpack::zone> z) :
|
unpacked(object const& obj, msgpack::unique_ptr<msgpack::zone> z) :
|
||||||
m_obj(obj), m_zone(msgpack::move(z)) { }
|
m_obj(obj), m_zone(msgpack::move(z)) { }
|
||||||
|
|
||||||
object& get()
|
void set(object const& obj)
|
||||||
{ return m_obj; }
|
{ m_obj = obj; }
|
||||||
|
|
||||||
const object& get() const
|
const object& get() const
|
||||||
{ return m_obj; }
|
{ return m_obj; }
|
||||||
@ -670,7 +670,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static void unpack(unpacked* result,
|
static void unpack(unpacked& result,
|
||||||
const char* data, size_t len, size_t* offset = NULL);
|
const char* data, size_t len, size_t* offset = NULL);
|
||||||
|
|
||||||
|
|
||||||
@ -824,12 +824,12 @@ inline bool unpacker::next(unpacked* result)
|
|||||||
|
|
||||||
if(ret == 0) {
|
if(ret == 0) {
|
||||||
result->zone().reset();
|
result->zone().reset();
|
||||||
result->get() = object();
|
result->set(object());
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
result->zone().reset( release_zone() );
|
result->zone().reset( release_zone() );
|
||||||
result->get() = data();
|
result->set(data());
|
||||||
reset();
|
reset();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -981,7 +981,7 @@ unpack_imp(const char* data, size_t len, size_t* off,
|
|||||||
|
|
||||||
} // detail
|
} // detail
|
||||||
|
|
||||||
inline void unpack(unpacked* result,
|
inline void unpack(unpacked& result,
|
||||||
const char* data, size_t len, size_t* offset)
|
const char* data, size_t len, size_t* offset)
|
||||||
{
|
{
|
||||||
object obj;
|
object obj;
|
||||||
@ -993,13 +993,13 @@ inline void unpack(unpacked* result,
|
|||||||
|
|
||||||
switch(ret) {
|
switch(ret) {
|
||||||
case UNPACK_SUCCESS:
|
case UNPACK_SUCCESS:
|
||||||
result->get() = obj;
|
result.set(obj);
|
||||||
result->zone() = msgpack::move(z);
|
result.zone() = msgpack::move(z);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case UNPACK_EXTRA_BYTES:
|
case UNPACK_EXTRA_BYTES:
|
||||||
result->get() = obj;
|
result.set(obj);
|
||||||
result->zone() = msgpack::move(z);
|
result.zone() = msgpack::move(z);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case UNPACK_CONTINUE:
|
case UNPACK_CONTINUE:
|
||||||
|
@ -30,7 +30,7 @@ void check_convert() {
|
|||||||
msgpack::pack(sbuf, v1);
|
msgpack::pack(sbuf, v1);
|
||||||
|
|
||||||
msgpack::unpacked msg;
|
msgpack::unpacked msg;
|
||||||
msgpack::unpack(&msg, sbuf.data(), sbuf.size());
|
msgpack::unpack(msg, sbuf.data(), sbuf.size());
|
||||||
|
|
||||||
T v2;
|
T v2;
|
||||||
msg.get().convert(&v2);
|
msg.get().convert(&v2);
|
||||||
|
@ -81,13 +81,13 @@ TEST(unpack, sequence)
|
|||||||
|
|
||||||
msgpack::unpacked msg;
|
msgpack::unpacked msg;
|
||||||
|
|
||||||
msgpack::unpack(&msg, sbuf.data(), sbuf.size(), &offset);
|
msgpack::unpack(msg, sbuf.data(), sbuf.size(), &offset);
|
||||||
EXPECT_EQ(1, msg.get().as<int>());
|
EXPECT_EQ(1, msg.get().as<int>());
|
||||||
|
|
||||||
msgpack::unpack(&msg, sbuf.data(), sbuf.size(), &offset);
|
msgpack::unpack(msg, sbuf.data(), sbuf.size(), &offset);
|
||||||
EXPECT_EQ(2, msg.get().as<int>());
|
EXPECT_EQ(2, msg.get().as<int>());
|
||||||
|
|
||||||
msgpack::unpack(&msg, sbuf.data(), sbuf.size(), &offset);
|
msgpack::unpack(msg, sbuf.data(), sbuf.size(), &offset);
|
||||||
EXPECT_EQ(3, msg.get().as<int>());
|
EXPECT_EQ(3, msg.get().as<int>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user