mirror of
https://github.com/msgpack/msgpack-python.git
synced 2026-02-07 02:09:59 +00:00
lang/c/msgpack: c-macro based template
git-svn-id: file:///Users/frsyuki/project/msgpack-git/svn/x@66 5a5092ae-2292-43ba-b2d5-dcab9c1a2731
This commit is contained in:
parent
76dda6d36e
commit
1222466a1c
35 changed files with 1034 additions and 1507 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
9
cpp/bench.mk
Normal file
9
cpp/bench.mk
Normal file
|
|
@ -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 $@
|
||||
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
80
cpp/pack.hpp
80
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) { }
|
||||
|
|
|
|||
116
cpp/unpack.cpp
116
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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
||||
|
|
@ -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"
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue