summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@5a5092ae-2292-43ba-b2d5-dcab9c1a2731>2009-02-15 09:09:57 +0000
committerfrsyuki <frsyuki@5a5092ae-2292-43ba-b2d5-dcab9c1a2731>2009-02-15 09:09:57 +0000
commit1222466a1c52161a3da3c3c5ce552d4b90e32bf6 (patch)
treea864485f63ad3b88a83a02d9a16dab581f767270 /cpp
parent76dda6d36e5a2edbe21443bd7344c41160373e2e (diff)
downloadmsgpack-python-1222466a1c52161a3da3c3c5ce552d4b90e32bf6.tar.gz
lang/c/msgpack: c-macro based template
git-svn-id: file:///Users/frsyuki/project/msgpack-git/svn/x@66 5a5092ae-2292-43ba-b2d5-dcab9c1a2731
Diffstat (limited to 'cpp')
-rw-r--r--cpp/Makefile.am3
-rw-r--r--cpp/bench.cpp10
-rw-r--r--cpp/bench.mk9
-rw-r--r--cpp/object.cpp16
-rw-r--r--cpp/pack.hpp80
-rw-r--r--cpp/unpack.cpp116
-rw-r--r--cpp/unpack.hpp6
-rw-r--r--cpp/unpack_context.hpp31
-rw-r--r--cpp/unpack_inline.cpp86
9 files changed, 167 insertions, 190 deletions
diff --git a/cpp/Makefile.am b/cpp/Makefile.am
index 08ea21f..aa22cc7 100644
--- a/cpp/Makefile.am
+++ b/cpp/Makefile.am
@@ -3,7 +3,6 @@ lib_LTLIBRARIES = libmsgpack.la
libmsgpack_la_SOURCES = \
object.cpp \
unpack.cpp \
- unpack_inline.cpp \
zone.cpp
nobase_include_HEADERS = \
@@ -14,13 +13,11 @@ nobase_include_HEADERS = \
msgpack/zone.hpp
noinst_HEADERS = \
- unpack_context.hpp \
msgpack/zone.hpp.erb
# FIXME
object.lo: msgpack/zone.hpp
unpack.lo: msgpack/zone.hpp
-unpack_context.lo: msgpack/zone.hpp
zone.lo: msgpack/zone.hpp
msgpack/zone.hpp: msgpack/zone.hpp.erb
diff --git a/cpp/bench.cpp b/cpp/bench.cpp
index 4133a2e..517a870 100644
--- a/cpp/bench.cpp
+++ b/cpp/bench.cpp
@@ -6,10 +6,10 @@
#include <stdexcept>
#include <string>
-static const unsigned int TASK_INT_NUM = 1<<24;
-static const unsigned int TASK_STR_LEN = 1<<15;
-//static const unsigned int TASK_INT_NUM = 1<<23;
-//static const unsigned int TASK_STR_LEN = 1<<14;
+//static const unsigned int TASK_INT_NUM = 1<<24;
+//static const unsigned int TASK_STR_LEN = 1<<15;
+static const unsigned int TASK_INT_NUM = 1<<22;
+static const unsigned int TASK_STR_LEN = 1<<13;
static const char* TASK_STR_PTR;
@@ -24,7 +24,7 @@ public:
+ (double)(endtime.tv_usec - m_timeval.tv_usec) / 1000 / 1000;
std::cout << sec << " sec" << std::endl;
std::cout << (double(bufsz)/1024/1024) << " MB" << std::endl;
- std::cout << (bufsz/sec/1024/1024*8) << " Mbps" << std::endl;
+ std::cout << (bufsz/sec/1000/1000*8) << " Mbps" << std::endl;
}
private:
timeval m_timeval;
diff --git a/cpp/bench.mk b/cpp/bench.mk
new file mode 100644
index 0000000..52a4b80
--- /dev/null
+++ b/cpp/bench.mk
@@ -0,0 +1,9 @@
+
+CXXFLAGS += -Wall -g -I. -I.. -O4
+LDFLAGS +=
+
+all: bench
+
+bench: bench.o unpack.o zone.o object.o pack.hpp unpack.hpp zone.hpp object.hpp
+ $(CXX) bench.o unpack.o zone.o object.o $(CFLAGS) $(LDFLAGS) -o $@
+
diff --git a/cpp/object.cpp b/cpp/object.cpp
index 7bb9841..ef2a68c 100644
--- a/cpp/object.cpp
+++ b/cpp/object.cpp
@@ -155,35 +155,35 @@ inline void numeric_pack(dynamic_packer& p, V v);
template <>
inline void numeric_pack<uint8_t>(dynamic_packer& p, uint8_t v)
- { p.pack_unsigned_int_8(v); }
+ { p.pack_uint8(v); }
template <>
inline void numeric_pack<uint16_t>(dynamic_packer& p, uint16_t v)
- { p.pack_unsigned_int_16(v); }
+ { p.pack_uint16(v); }
template <>
inline void numeric_pack<uint32_t>(dynamic_packer& p, uint32_t v)
- { p.pack_unsigned_int_32(v); }
+ { p.pack_uint32(v); }
template <>
inline void numeric_pack<uint64_t>(dynamic_packer& p, uint64_t v)
- { p.pack_unsigned_int_64(v); }
+ { p.pack_uint64(v); }
template <>
inline void numeric_pack<int8_t>(dynamic_packer& p, int8_t v)
- { p.pack_unsigned_int_8(v); }
+ { p.pack_int8(v); }
template <>
inline void numeric_pack<int16_t>(dynamic_packer& p, int16_t v)
- { p.pack_unsigned_int_16(v); }
+ { p.pack_int16(v); }
template <>
inline void numeric_pack<int32_t>(dynamic_packer& p, int32_t v)
- { p.pack_unsigned_int_32(v); }
+ { p.pack_int32(v); }
template <>
inline void numeric_pack<int64_t>(dynamic_packer& p, int64_t v)
- { p.pack_unsigned_int_64(v); }
+ { p.pack_int64(v); }
template <>
inline void numeric_pack<float>(dynamic_packer& p, float v)
diff --git a/cpp/pack.hpp b/cpp/pack.hpp
index 9580679..f3eeb34 100644
--- a/cpp/pack.hpp
+++ b/cpp/pack.hpp
@@ -34,14 +34,14 @@ public:
public:
void pack_int(int d) { pack_int_impl(m_stream, d); }
void pack_unsigned_int(unsigned int d) { pack_unsigned_int_impl(m_stream, d); }
- void pack_unsigned_int_8(uint8_t d) { pack_unsigned_int_8_impl(m_stream, d); }
- void pack_unsigned_int_16(uint16_t d) { pack_unsigned_int_16_impl(m_stream, d); }
- void pack_unsigned_int_32(uint32_t d) { pack_unsigned_int_32_impl(m_stream, d); }
- void pack_unsigned_int_64(uint64_t d) { pack_unsigned_int_64_impl(m_stream, d); }
- void pack_signed_int_8(uint8_t d) { pack_signed_int_8_impl(m_stream, d); }
- void pack_signed_int_16(uint16_t d) { pack_signed_int_16_impl(m_stream, d); }
- void pack_signed_int_32(uint32_t d) { pack_signed_int_32_impl(m_stream, d); }
- void pack_signed_int_64(uint64_t d) { pack_signed_int_64_impl(m_stream, d); }
+ void pack_uint8(uint8_t d) { pack_uint8_impl(m_stream, d); }
+ void pack_uint16(uint16_t d) { pack_uint16_impl(m_stream, d); }
+ void pack_uint32(uint32_t d) { pack_uint32_impl(m_stream, d); }
+ void pack_uint64(uint64_t d) { pack_uint64_impl(m_stream, d); }
+ void pack_int8(uint8_t d) { pack_int8_impl(m_stream, d); }
+ void pack_int16(uint16_t d) { pack_int16_impl(m_stream, d); }
+ void pack_int32(uint32_t d) { pack_int32_impl(m_stream, d); }
+ void pack_int64(uint64_t d) { pack_int64_impl(m_stream, d); }
void pack_float(float d) { pack_float_impl(m_stream, d); }
void pack_double(double d) { pack_double_impl(m_stream, d); }
void pack_nil() { pack_nil(m_stream); }
@@ -49,20 +49,19 @@ public:
void pack_false() { pack_false(m_stream); }
void pack_array(unsigned int n) { pack_array_impl(m_stream, n); }
void pack_map(unsigned int n) { pack_map_impl(m_stream, n); }
- void pack_string(const char* b) { pack_string_impl(m_stream, b); }
void pack_raw(const char* b, size_t l) { pack_raw_impl(m_stream, (const void*)b, l); }
private:
static void pack_int_impl(Stream& x, int d);
static void pack_unsigned_int_impl(Stream& x, unsigned int d);
- static void pack_unsigned_int_8_impl(Stream& x, uint8_t d);
- static void pack_unsigned_int_16_impl(Stream& x, uint16_t d);
- static void pack_unsigned_int_32_impl(Stream& x, uint32_t d);
- static void pack_unsigned_int_64_impl(Stream& x, uint64_t d);
- static void pack_signed_int_8_impl(Stream& x, int8_t d);
- static void pack_signed_int_16_impl(Stream& x, int16_t d);
- static void pack_signed_int_32_impl(Stream& x, int32_t d);
- static void pack_signed_int_64_impl(Stream& x, int64_t d);
+ static void pack_uint8_impl(Stream& x, uint8_t d);
+ static void pack_uint16_impl(Stream& x, uint16_t d);
+ static void pack_uint32_impl(Stream& x, uint32_t d);
+ static void pack_uint64_impl(Stream& x, uint64_t d);
+ static void pack_int8_impl(Stream& x, int8_t d);
+ static void pack_int16_impl(Stream& x, int16_t d);
+ static void pack_int32_impl(Stream& x, int32_t d);
+ static void pack_int64_impl(Stream& x, int64_t d);
static void pack_float_impl(Stream& x, float d);
static void pack_double_impl(Stream& x, double d);
static void pack_nil_impl(Stream& x);
@@ -70,7 +69,6 @@ private:
static void pack_false_impl(Stream& x);
static void pack_array_impl(Stream& x, unsigned int n);
static void pack_map_impl(Stream& x, unsigned int n);
- static void pack_string_impl(Stream& x, const char* b);
static void pack_raw_impl(Stream& x, const void* b, size_t l);
static void append_buffer(Stream& x, const unsigned char* buf, unsigned int len)
{ x.write((const char*)buf, len); }
@@ -85,11 +83,10 @@ private:
#define msgpack_pack_inline_func(name) \
template <typename Stream> \
inline void packer<Stream>::pack_ ## name ## _impl
-#define msgpack_pack_context Stream&
+#define msgpack_pack_user Stream&
#define msgpack_pack_append_buffer append_buffer
-#include "msgpack/pack/inline_impl.h"
-#undef msgpack_pack_context
-#undef msgpack_pack_append_buffer
+#include "msgpack/pack_template.h"
+
template <typename Stream>
packer<Stream>::packer(Stream& s) : m_stream(s) { }
@@ -118,14 +115,14 @@ public:
public:
void pack_int(int d) { pack_int_impl(m_stream, d); }
void pack_unsigned_int(unsigned int d) { pack_unsigned_int_impl(m_stream, d); }
- void pack_unsigned_int_8(uint8_t d) { pack_unsigned_int_8_impl(m_stream, d); }
- void pack_unsigned_int_16(uint16_t d) { pack_unsigned_int_16_impl(m_stream, d); }
- void pack_unsigned_int_32(uint32_t d) { pack_unsigned_int_32_impl(m_stream, d); }
- void pack_unsigned_int_64(uint64_t d) { pack_unsigned_int_64_impl(m_stream, d); }
- void pack_signed_int_8(uint8_t d) { pack_signed_int_8_impl(m_stream, d); }
- void pack_signed_int_16(uint16_t d) { pack_signed_int_16_impl(m_stream, d); }
- void pack_signed_int_32(uint32_t d) { pack_signed_int_32_impl(m_stream, d); }
- void pack_signed_int_64(uint64_t d) { pack_signed_int_64_impl(m_stream, d); }
+ void pack_uint8(uint8_t d) { pack_uint8_impl(m_stream, d); }
+ void pack_uint16(uint16_t d) { pack_uint16_impl(m_stream, d); }
+ void pack_uint32(uint32_t d) { pack_uint32_impl(m_stream, d); }
+ void pack_uint64(uint64_t d) { pack_uint64_impl(m_stream, d); }
+ void pack_int8(uint8_t d) { pack_int8_impl(m_stream, d); }
+ void pack_int16(uint16_t d) { pack_int16_impl(m_stream, d); }
+ void pack_int32(uint32_t d) { pack_int32_impl(m_stream, d); }
+ void pack_int64(uint64_t d) { pack_int64_impl(m_stream, d); }
void pack_float(float d) { pack_float_impl(m_stream, d); }
void pack_double(double d) { pack_double_impl(m_stream, d); }
void pack_nil() { pack_nil_impl(m_stream); }
@@ -139,14 +136,14 @@ public:
private:
static void pack_int_impl(dynamic_stream& x, int d);
static void pack_unsigned_int_impl(dynamic_stream& x, unsigned int d);
- static void pack_unsigned_int_8_impl(dynamic_stream& x, uint8_t d);
- static void pack_unsigned_int_16_impl(dynamic_stream& x, uint16_t d);
- static void pack_unsigned_int_32_impl(dynamic_stream& x, uint32_t d);
- static void pack_unsigned_int_64_impl(dynamic_stream& x, uint64_t d);
- static void pack_signed_int_8_impl(dynamic_stream& x, int8_t d);
- static void pack_signed_int_16_impl(dynamic_stream& x, int16_t d);
- static void pack_signed_int_32_impl(dynamic_stream& x, int32_t d);
- static void pack_signed_int_64_impl(dynamic_stream& x, int64_t d);
+ static void pack_uint8_impl(dynamic_stream& x, uint8_t d);
+ static void pack_uint16_impl(dynamic_stream& x, uint16_t d);
+ static void pack_uint32_impl(dynamic_stream& x, uint32_t d);
+ static void pack_uint64_impl(dynamic_stream& x, uint64_t d);
+ static void pack_int8_impl(dynamic_stream& x, int8_t d);
+ static void pack_int16_impl(dynamic_stream& x, int16_t d);
+ static void pack_int32_impl(dynamic_stream& x, int32_t d);
+ static void pack_int64_impl(dynamic_stream& x, int64_t d);
static void pack_float_impl(dynamic_stream& x, float d);
static void pack_double_impl(dynamic_stream& x, double d);
static void pack_nil_impl(dynamic_stream& x);
@@ -166,14 +163,11 @@ private:
dynamic_packer();
};
-#undef MSGPACK_PACK_INLINE_IMPL_H__
#define msgpack_pack_inline_func(name) \
inline void dynamic_packer::pack_ ## name ## _impl
-#define msgpack_pack_context dynamic_stream&
+#define msgpack_pack_user dynamic_stream&
#define msgpack_pack_append_buffer append_buffer
-#include "msgpack/pack/inline_impl.h"
-#undef msgpack_pack_context
-#undef msgpack_pack_append_buffer
+#include "msgpack/pack_template.h"
template <typename Stream>
dynamic_packer::dynamic_packer(Stream& s) : m_stream(s) { }
diff --git a/cpp/unpack.cpp b/cpp/unpack.cpp
index fe7f4b5..873d3da 100644
--- a/cpp/unpack.cpp
+++ b/cpp/unpack.cpp
@@ -16,12 +16,97 @@
// limitations under the License.
//
#include "msgpack/unpack.hpp"
-#include "unpack_context.hpp"
+#include "msgpack/unpack_define.h"
#include <stdlib.h>
namespace msgpack {
+#define msgpack_unpack_struct(name) \
+ struct msgpack_unpacker_##name
+
+#define msgpack_unpack_func(ret, name) \
+ ret msgpack_unpacker_##name
+
+#define msgpack_unpack_callback(name) \
+ msgpack_unpack_##name
+
+#define msgpack_unpack_object object_class*
+
+#define msgpack_unpack_user zone*
+
+
+struct msgpack_unpacker_context;
+
+static void msgpack_unpacker_init(struct msgpack_unpacker_context* ctx);
+
+static object_class* msgpack_unpacker_data(struct msgpack_unpacker_context* ctx);
+
+static int msgpack_unpacker_execute(struct msgpack_unpacker_context* ctx,
+ const char* data, size_t len, size_t* off);
+
+
+static inline object_class* msgpack_unpack_init(zone** z)
+{ return NULL; }
+
+static inline object_class* msgpack_unpack_uint8(zone** z, uint8_t d)
+{ return (*z)->nu8(d); }
+
+static inline object_class* msgpack_unpack_uint16(zone** z, uint16_t d)
+{ return (*z)->nu16(d); }
+
+static inline object_class* msgpack_unpack_uint32(zone** z, uint32_t d)
+{ return (*z)->nu32(d); }
+
+static inline object_class* msgpack_unpack_uint64(zone** z, uint64_t d)
+{ return (*z)->nu64(d); }
+
+static inline object_class* msgpack_unpack_int8(zone** z, int8_t d)
+{ return (*z)->ni8(d); }
+
+static inline object_class* msgpack_unpack_int16(zone** z, int16_t d)
+{ return (*z)->ni16(d); }
+
+static inline object_class* msgpack_unpack_int32(zone** z, int32_t d)
+{ return (*z)->ni32(d); }
+
+static inline object_class* msgpack_unpack_int64(zone** z, int64_t d)
+{ return (*z)->ni64(d); }
+
+static inline object_class* msgpack_unpack_float(zone** z, float d)
+{ return (*z)->nfloat(d); }
+
+static inline object_class* msgpack_unpack_double(zone** z, double d)
+{ return (*z)->ndouble(d); }
+
+static inline object_class* msgpack_unpack_nil(zone** z)
+{ return (*z)->nnil(); }
+
+static inline object_class* msgpack_unpack_true(zone** z)
+{ return (*z)->ntrue(); }
+
+static inline object_class* msgpack_unpack_false(zone** z)
+{ return (*z)->nfalse(); }
+
+static inline object_class* msgpack_unpack_array(zone** z, unsigned int n)
+{ return (*z)->narray(n); }
+
+static inline void msgpack_unpack_array_item(zone** z, object_class* c, object_class* o)
+{ reinterpret_cast<object_array*>(c)->push_back(o); }
+
+static inline object_class* msgpack_unpack_map(zone** z, unsigned int n)
+{ return (*z)->nmap(); }
+
+static inline void msgpack_unpack_map_item(zone** z, object_class* c, object_class* k, object_class* v)
+{ reinterpret_cast<object_map*>(c)->store(k, v); }
+
+static inline object_class* msgpack_unpack_raw(zone** z, const char* b, const char* p, unsigned int l)
+{ return (*z)->nraw_ref(p, l); }
+
+
+#include "msgpack/unpack_template.h"
+
+
struct unpacker::context {
context(zone* z)
{
@@ -65,7 +150,7 @@ struct unpacker::context {
}
private:
- msgpack_unpacker m_ctx;
+ msgpack_unpacker_context m_ctx;
private:
context();
@@ -171,17 +256,26 @@ void unpacker::reset()
}
-object unpacker::unpack(const char* data, size_t len, zone& z)
+object unpacker::unpack(const char* data, size_t len, zone& z, size_t* off)
{
context ctx(&z);
- size_t off = 0;
- int ret = ctx.execute(data, len, &off);
- if(ret < 0) {
- throw unpack_error("parse error");
- } else if(ret == 0) {
- throw unpack_error("insufficient bytes");
- } else if(off < len) {
- throw unpack_error("extra bytes");
+ if(off) {
+ int ret = ctx.execute(data, len, off);
+ if(ret < 0) {
+ throw unpack_error("parse error");
+ } else if(ret == 0) {
+ throw unpack_error("insufficient bytes");
+ }
+ } else {
+ size_t noff = 0;
+ int ret = ctx.execute(data, len, &noff);
+ if(ret < 0) {
+ throw unpack_error("parse error");
+ } else if(ret == 0) {
+ throw unpack_error("insufficient bytes");
+ } else if(noff < len) {
+ throw unpack_error("extra bytes");
+ }
}
return ctx.data();
}
diff --git a/cpp/unpack.hpp b/cpp/unpack.hpp
index 473e8e9..86cfb6e 100644
--- a/cpp/unpack.hpp
+++ b/cpp/unpack.hpp
@@ -100,7 +100,7 @@ private:
unpacker(const unpacker&);
public:
- static object unpack(const char* data, size_t len, zone& z);
+ static object unpack(const char* data, size_t len, zone& z, size_t* off = NULL);
};
@@ -136,9 +136,9 @@ inline void unpacker::remove_nonparsed_buffer()
{ m_used = m_off; }
-inline object unpack(const char* data, size_t len, zone& z)
+inline object unpack(const char* data, size_t len, zone& z, size_t* off = NULL)
{
- return unpacker::unpack(data, len, z);
+ return unpacker::unpack(data, len, z, off);
}
diff --git a/cpp/unpack_context.hpp b/cpp/unpack_context.hpp
deleted file mode 100644
index 59bd872..0000000
--- a/cpp/unpack_context.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-// MessagePack for C++ deserializing routine
-//
-// Copyright (C) 2008 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-#ifndef UNPACK_CONTEXT_HPP__
-#define UNPACK_CONTEXT_HPP__
-
-#include "msgpack/zone.hpp"
-#include "msgpack/object.hpp"
-
-typedef msgpack::object_class* msgpack_object;
-
-typedef msgpack::zone* msgpack_unpack_context;
-
-#include "msgpack/unpack/inline_context.h"
-
-#endif /* unpack_context.h */
-
diff --git a/cpp/unpack_inline.cpp b/cpp/unpack_inline.cpp
deleted file mode 100644
index 40f2769..0000000
--- a/cpp/unpack_inline.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-//
-// MessagePack for C++ deserializing routine
-//
-// Copyright (C) 2008 FURUHASHI Sadayuki
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-#include "unpack_context.hpp"
-
-
-extern "C" {
-using namespace msgpack;
-
-
-static inline object_class* msgpack_unpack_init(zone** z)
-{ return NULL; }
-
-static inline object_class* msgpack_unpack_unsigned_int_8(zone** z, uint8_t d)
-{ return (*z)->nu8(d); }
-
-static inline object_class* msgpack_unpack_unsigned_int_16(zone** z, uint16_t d)
-{ return (*z)->nu16(d); }
-
-static inline object_class* msgpack_unpack_unsigned_int_32(zone** z, uint32_t d)
-{ return (*z)->nu32(d); }
-
-static inline object_class* msgpack_unpack_unsigned_int_64(zone** z, uint64_t d)
-{ return (*z)->nu64(d); }
-
-static inline object_class* msgpack_unpack_signed_int_8(zone** z, int8_t d)
-{ return (*z)->ni8(d); }
-
-static inline object_class* msgpack_unpack_signed_int_16(zone** z, int16_t d)
-{ return (*z)->ni16(d); }
-
-static inline object_class* msgpack_unpack_signed_int_32(zone** z, int32_t d)
-{ return (*z)->ni32(d); }
-
-static inline object_class* msgpack_unpack_signed_int_64(zone** z, int64_t d)
-{ return (*z)->ni64(d); }
-
-static inline object_class* msgpack_unpack_float(zone** z, float d)
-{ return (*z)->nfloat(d); }
-
-static inline object_class* msgpack_unpack_double(zone** z, double d)
-{ return (*z)->ndouble(d); }
-
-static inline object_class* msgpack_unpack_nil(zone** z)
-{ return (*z)->nnil(); }
-
-static inline object_class* msgpack_unpack_true(zone** z)
-{ return (*z)->ntrue(); }
-
-static inline object_class* msgpack_unpack_false(zone** z)
-{ return (*z)->nfalse(); }
-
-static inline object_class* msgpack_unpack_array_start(zone** z, unsigned int n)
-{ return (*z)->narray(n); }
-
-static inline void msgpack_unpack_array_item(zone** z, object_class* c, object_class* o)
-{ reinterpret_cast<object_array*>(c)->push_back(o); }
-
-static inline object_class* msgpack_unpack_map_start(zone** z, unsigned int n)
-{ return (*z)->nmap(); }
-
-static inline void msgpack_unpack_map_item(zone** z, object_class* c, object_class* k, object_class* v)
-{ reinterpret_cast<object_map*>(c)->store(k, v); }
-
-static inline object_class* msgpack_unpack_raw(zone** z, const char* b, const char* p, unsigned int l)
-{ return (*z)->nraw_ref(p, l); }
-
-
-} // extern "C"
-
-#include "msgpack/unpack/inline_impl.h"
-