msgpack 0.0.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Manifest.txt +3 -7
- data/README.txt +5 -2
- data/ext/extconf.rb +1 -1
- data/ext/pack.c +56 -2
- data/ext/unpack.c +102 -11
- data/lib/msgpack/version.rb +2 -2
- data/msgpack/{pack/inline_impl.h → pack_template.h} +103 -77
- data/msgpack/unpack_define.h +127 -0
- data/msgpack/unpack_template.h +360 -0
- metadata +5 -9
- data/ext/pack_inline.h +0 -33
- data/ext/unpack_context.h +0 -35
- data/ext/unpack_inline.c +0 -81
- data/msgpack/pack/inline_context.h +0 -2
- data/msgpack/unpack/inline_context.h +0 -52
- data/msgpack/unpack/inline_impl.h +0 -438
data/Manifest.txt
CHANGED
@@ -7,16 +7,12 @@ config/requirements.rb
|
|
7
7
|
ext/extconf.rb
|
8
8
|
ext/pack.c
|
9
9
|
ext/pack.h
|
10
|
-
ext/pack_inline.h
|
11
10
|
ext/rbinit.c
|
12
11
|
ext/unpack.c
|
13
12
|
ext/unpack.h
|
14
|
-
|
15
|
-
|
16
|
-
msgpack/
|
17
|
-
msgpack/pack/inline_impl.h
|
18
|
-
msgpack/unpack/inline_context.h
|
19
|
-
msgpack/unpack/inline_impl.h
|
13
|
+
msgpack/pack_template.h
|
14
|
+
msgpack/unpack_define.h
|
15
|
+
msgpack/unpack_template.h
|
20
16
|
lib/msgpack/version.rb
|
21
17
|
script/console
|
22
18
|
script/destroy
|
data/README.txt
CHANGED
data/ext/extconf.rb
CHANGED
data/ext/pack.c
CHANGED
@@ -15,7 +15,42 @@
|
|
15
15
|
* See the License for the specific language governing permissions and
|
16
16
|
* limitations under the License.
|
17
17
|
*/
|
18
|
-
#include "
|
18
|
+
#include "ruby.h"
|
19
|
+
#include <stddef.h>
|
20
|
+
#include <stdint.h>
|
21
|
+
|
22
|
+
#define msgpack_pack_inline_func(name) \
|
23
|
+
static void msgpack_pack_##name
|
24
|
+
|
25
|
+
#define msgpack_pack_user VALUE
|
26
|
+
|
27
|
+
#define msgpack_pack_append_buffer(user, buf, len) \
|
28
|
+
rb_str_buf_cat(user, (const void*)buf, len)
|
29
|
+
|
30
|
+
/*
|
31
|
+
static void msgpack_pack_int(VALUE x, int d);
|
32
|
+
static void msgpack_pack_unsigned_int(VALUE x, unsigned int d);
|
33
|
+
static void msgpack_pack_uint8(VALUE x, uint8_t d);
|
34
|
+
static void msgpack_pack_uint16(VALUE x, uint16_t d);
|
35
|
+
static void msgpack_pack_uint32(VALUE x, uint32_t d);
|
36
|
+
static void msgpack_pack_uint64(VALUE x, uint64_t d);
|
37
|
+
static void msgpack_pack_int8(VALUE x, int8_t d);
|
38
|
+
static void msgpack_pack_int16(VALUE x, int16_t d);
|
39
|
+
static void msgpack_pack_int32(VALUE x, int32_t d);
|
40
|
+
static void msgpack_pack_int64(VALUE x, int64_t d);
|
41
|
+
static void msgpack_pack_float(VALUE x, float d);
|
42
|
+
static void msgpack_pack_double(VALUE x, double d);
|
43
|
+
static void msgpack_pack_nil(VALUE x);
|
44
|
+
static void msgpack_pack_true(VALUE x);
|
45
|
+
static void msgpack_pack_false(VALUE x);
|
46
|
+
static void msgpack_pack_array(VALUE x, unsigned int n);
|
47
|
+
static void msgpack_pack_map(VALUE x, unsigned int n);
|
48
|
+
static void msgpack_pack_raw(VALUE x, size_t l);
|
49
|
+
static void msgpack_pack_raw_body(VALUE x, const void* b, size_t l);
|
50
|
+
*/
|
51
|
+
|
52
|
+
#include "msgpack/pack_template.h"
|
53
|
+
|
19
54
|
|
20
55
|
#ifndef RUBY_VM
|
21
56
|
#include "st.h" // ruby hash
|
@@ -62,6 +97,23 @@ static VALUE MessagePack_Fixnum_to_msgpack(int argc, VALUE *argv, VALUE self)
|
|
62
97
|
return out;
|
63
98
|
}
|
64
99
|
|
100
|
+
|
101
|
+
#ifndef RBIGNUM_SIGN // Ruby 1.8
|
102
|
+
#define RBIGNUM_SIGN(b) (RBIGNUM(b)->sign)
|
103
|
+
#endif
|
104
|
+
|
105
|
+
static VALUE MessagePack_Bignum_to_msgpack(int argc, VALUE *argv, VALUE self)
|
106
|
+
{
|
107
|
+
ARG_BUFFER(out, argc, argv);
|
108
|
+
// FIXME bignum
|
109
|
+
if(RBIGNUM_SIGN(self)) { // positive
|
110
|
+
msgpack_pack_uint64(out, rb_big2ull(self));
|
111
|
+
} else { // negative
|
112
|
+
msgpack_pack_int64(out, rb_big2ll(self));
|
113
|
+
}
|
114
|
+
return out;
|
115
|
+
}
|
116
|
+
|
65
117
|
static VALUE MessagePack_Float_to_msgpack(int argc, VALUE *argv, VALUE self)
|
66
118
|
{
|
67
119
|
ARG_BUFFER(out, argc, argv);
|
@@ -72,7 +124,8 @@ static VALUE MessagePack_Float_to_msgpack(int argc, VALUE *argv, VALUE self)
|
|
72
124
|
static VALUE MessagePack_String_to_msgpack(int argc, VALUE *argv, VALUE self)
|
73
125
|
{
|
74
126
|
ARG_BUFFER(out, argc, argv);
|
75
|
-
msgpack_pack_raw(out,
|
127
|
+
msgpack_pack_raw(out, RSTRING_LEN(self));
|
128
|
+
msgpack_pack_raw_body(out, RSTRING_PTR(self), RSTRING_LEN(self));
|
76
129
|
return out;
|
77
130
|
}
|
78
131
|
|
@@ -122,6 +175,7 @@ void Init_msgpack_pack(VALUE mMessagePack)
|
|
122
175
|
rb_define_method_id(rb_cTrueClass, s_to_msgpack, MessagePack_TrueClass_to_msgpack, -1);
|
123
176
|
rb_define_method_id(rb_cFalseClass, s_to_msgpack, MessagePack_FalseClass_to_msgpack, -1);
|
124
177
|
rb_define_method_id(rb_cFixnum, s_to_msgpack, MessagePack_Fixnum_to_msgpack, -1);
|
178
|
+
rb_define_method_id(rb_cBignum, s_to_msgpack, MessagePack_Bignum_to_msgpack, -1);
|
125
179
|
rb_define_method_id(rb_cFloat, s_to_msgpack, MessagePack_Float_to_msgpack, -1);
|
126
180
|
rb_define_method_id(rb_cString, s_to_msgpack, MessagePack_String_to_msgpack, -1);
|
127
181
|
rb_define_method_id(rb_cArray, s_to_msgpack, MessagePack_Array_to_msgpack, -1);
|
data/ext/unpack.c
CHANGED
@@ -16,8 +16,99 @@
|
|
16
16
|
* limitations under the License.
|
17
17
|
*/
|
18
18
|
#include "ruby.h"
|
19
|
-
#include "
|
20
|
-
|
19
|
+
#include "msgpack/unpack_define.h"
|
20
|
+
|
21
|
+
|
22
|
+
typedef struct {
|
23
|
+
int finished;
|
24
|
+
} msgpack_unpack_context;
|
25
|
+
|
26
|
+
|
27
|
+
#define msgpack_unpack_struct(name) \
|
28
|
+
struct msgpack_unpacker_##name
|
29
|
+
|
30
|
+
#define msgpack_unpack_func(ret, name) \
|
31
|
+
ret msgpack_unpacker_##name
|
32
|
+
|
33
|
+
#define msgpack_unpack_callback(name) \
|
34
|
+
template_callback_##name
|
35
|
+
|
36
|
+
#define msgpack_unpack_object VALUE
|
37
|
+
|
38
|
+
#define msgpack_unpack_user msgpack_unpack_context
|
39
|
+
|
40
|
+
|
41
|
+
struct msgpack_unpacker_context;
|
42
|
+
typedef struct msgpack_unpacker_context msgpack_unpacker;
|
43
|
+
|
44
|
+
static void msgpack_unpacker_init(msgpack_unpacker* ctx);
|
45
|
+
|
46
|
+
static VALUE msgpack_unpacker_data(msgpack_unpacker* ctx);
|
47
|
+
|
48
|
+
static int msgpack_unpacker_execute(msgpack_unpacker* ctx,
|
49
|
+
const char* data, size_t len, size_t* off);
|
50
|
+
|
51
|
+
|
52
|
+
static inline VALUE template_callback_init(msgpack_unpack_context* x)
|
53
|
+
{ return Qnil; }
|
54
|
+
|
55
|
+
static inline VALUE template_callback_uint8(msgpack_unpack_context* x, uint8_t d)
|
56
|
+
{ return INT2FIX(d); }
|
57
|
+
|
58
|
+
static inline VALUE template_callback_uint16(msgpack_unpack_context* x, uint16_t d)
|
59
|
+
{ return INT2FIX(d); }
|
60
|
+
|
61
|
+
static inline VALUE template_callback_uint32(msgpack_unpack_context* x, uint32_t d)
|
62
|
+
{ return UINT2NUM(d); }
|
63
|
+
|
64
|
+
static inline VALUE template_callback_uint64(msgpack_unpack_context* x, uint64_t d)
|
65
|
+
{ return rb_ull2inum(d); }
|
66
|
+
|
67
|
+
static inline VALUE template_callback_int8(msgpack_unpack_context* x, int8_t d)
|
68
|
+
{ return INT2FIX((long)d); }
|
69
|
+
|
70
|
+
static inline VALUE template_callback_int16(msgpack_unpack_context* x, int16_t d)
|
71
|
+
{ return INT2FIX((long)d); }
|
72
|
+
|
73
|
+
static inline VALUE template_callback_int32(msgpack_unpack_context* x, int32_t d)
|
74
|
+
{ return INT2NUM((long)d); }
|
75
|
+
|
76
|
+
static inline VALUE template_callback_int64(msgpack_unpack_context* x, int64_t d)
|
77
|
+
{ return rb_ll2inum(d); }
|
78
|
+
|
79
|
+
static inline VALUE template_callback_float(msgpack_unpack_context* x, float d)
|
80
|
+
{ return rb_float_new(d); }
|
81
|
+
|
82
|
+
static inline VALUE template_callback_double(msgpack_unpack_context* x, double d)
|
83
|
+
{ return rb_float_new(d); }
|
84
|
+
|
85
|
+
static inline VALUE template_callback_nil(msgpack_unpack_context* x)
|
86
|
+
{ return Qnil; }
|
87
|
+
|
88
|
+
static inline VALUE template_callback_true(msgpack_unpack_context* x)
|
89
|
+
{ return Qtrue; }
|
90
|
+
|
91
|
+
static inline VALUE template_callback_false(msgpack_unpack_context* x)
|
92
|
+
{ return Qfalse; }
|
93
|
+
|
94
|
+
static inline VALUE template_callback_array(msgpack_unpack_context* x, unsigned int n)
|
95
|
+
{ return rb_ary_new2(n); }
|
96
|
+
|
97
|
+
static inline void template_callback_array_item(msgpack_unpack_context* x, VALUE* c, VALUE o)
|
98
|
+
{ rb_ary_push(*c, o); } // FIXME set value directry RARRAY_PTR(obj)[RARRAY_LEN(obj)++]
|
99
|
+
|
100
|
+
static inline VALUE template_callback_map(msgpack_unpack_context* x, unsigned int n)
|
101
|
+
{ return rb_hash_new(); }
|
102
|
+
|
103
|
+
static inline void template_callback_map_item(msgpack_unpack_context* x, VALUE* c, VALUE k, VALUE v)
|
104
|
+
{ rb_hash_aset(*c, k, v); }
|
105
|
+
|
106
|
+
static inline VALUE template_callback_raw(msgpack_unpack_context* x, const char* b, const char* p, unsigned int l)
|
107
|
+
{ return rb_str_new(p, l); }
|
108
|
+
|
109
|
+
|
110
|
+
#include "msgpack/unpack_template.h"
|
111
|
+
|
21
112
|
|
22
113
|
#define UNPACKER(from, name) \
|
23
114
|
msgpack_unpacker *name = NULL; \
|
@@ -45,7 +136,7 @@ static void MessagePack_Unpacker_mark(msgpack_unpacker *mp)
|
|
45
136
|
unsigned int i;
|
46
137
|
for(i=0; i < mp->top; ++i) {
|
47
138
|
rb_gc_mark(mp->stack[i].obj);
|
48
|
-
rb_gc_mark(mp->stack[i].
|
139
|
+
rb_gc_mark(mp->stack[i].map_key);
|
49
140
|
}
|
50
141
|
}
|
51
142
|
|
@@ -61,7 +152,7 @@ static VALUE MessagePack_Unpacker_alloc(VALUE klass)
|
|
61
152
|
static VALUE MessagePack_Unpacker_reset(VALUE self)
|
62
153
|
{
|
63
154
|
UNPACKER(self, mp);
|
64
|
-
mp->user.finished =
|
155
|
+
mp->user.finished = 0;
|
65
156
|
msgpack_unpacker_init(mp);
|
66
157
|
return self;
|
67
158
|
}
|
@@ -85,18 +176,18 @@ static VALUE MessagePack_Unpacker_execute_impl(VALUE args)
|
|
85
176
|
int ret;
|
86
177
|
|
87
178
|
if(from >= dlen) {
|
88
|
-
rb_raise(eUnpackError, "
|
179
|
+
rb_raise(eUnpackError, "offset is bigger than data buffer size.");
|
89
180
|
}
|
90
181
|
|
91
182
|
ret = msgpack_unpacker_execute(mp, dptr, (size_t)dlen, &from);
|
92
183
|
|
93
184
|
if(ret < 0) {
|
94
|
-
rb_raise(eUnpackError, "
|
185
|
+
rb_raise(eUnpackError, "parse error.");
|
95
186
|
} else if(ret > 0) {
|
96
|
-
mp->user.finished =
|
187
|
+
mp->user.finished = 1;
|
97
188
|
return ULONG2NUM(from);
|
98
189
|
} else {
|
99
|
-
mp->user.finished =
|
190
|
+
mp->user.finished = 0;
|
100
191
|
return ULONG2NUM(from);
|
101
192
|
}
|
102
193
|
}
|
@@ -151,12 +242,12 @@ static VALUE MessagePack_unpack_impl(VALUE args)
|
|
151
242
|
ret = msgpack_unpacker_execute(mp, dptr, (size_t)dlen, &from);
|
152
243
|
|
153
244
|
if(ret < 0) {
|
154
|
-
rb_raise(eUnpackError, "
|
245
|
+
rb_raise(eUnpackError, "parse error.");
|
155
246
|
} else if(ret == 0) {
|
156
|
-
rb_raise(eUnpackError, "
|
247
|
+
rb_raise(eUnpackError, "insufficient bytes.");
|
157
248
|
} else {
|
158
249
|
if(from < dlen) {
|
159
|
-
rb_raise(eUnpackError, "
|
250
|
+
rb_raise(eUnpackError, "extra bytes.");
|
160
251
|
}
|
161
252
|
return msgpack_unpacker_data(mp);
|
162
253
|
}
|
data/lib/msgpack/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* MessagePack packing routine
|
2
|
+
* MessagePack packing routine template
|
3
3
|
*
|
4
4
|
* Copyright (C) 2008 FURUHASHI Sadayuki
|
5
5
|
*
|
@@ -15,58 +15,78 @@
|
|
15
15
|
* See the License for the specific language governing permissions and
|
16
16
|
* limitations under the License.
|
17
17
|
*/
|
18
|
-
#ifndef MSGPACK_PACK_INLINE_IMPL_H__
|
19
|
-
#define MSGPACK_PACK_INLINE_IMPL_H__
|
20
18
|
|
21
|
-
#
|
22
|
-
#
|
19
|
+
#if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
|
20
|
+
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
21
|
+
#define __LITTLE_ENDIAN__
|
22
|
+
#elif __BYTE_ORDER == __BIG_ENDIAN
|
23
|
+
#define __BIG_ENDIAN__
|
24
|
+
#endif
|
25
|
+
#endif
|
23
26
|
|
24
27
|
#ifdef __LITTLE_ENDIAN__
|
25
28
|
|
26
|
-
#define
|
29
|
+
#define STORE_BE16(d) \
|
27
30
|
((char*)&d)[1], ((char*)&d)[0]
|
28
31
|
|
29
|
-
#define
|
32
|
+
#define STORE_BE32(d) \
|
30
33
|
((char*)&d)[3], ((char*)&d)[2], ((char*)&d)[1], ((char*)&d)[0]
|
31
34
|
|
32
|
-
#define
|
35
|
+
#define STORE_BE64(d) \
|
33
36
|
((char*)&d)[7], ((char*)&d)[6], ((char*)&d)[5], ((char*)&d)[4], \
|
34
37
|
((char*)&d)[3], ((char*)&d)[2], ((char*)&d)[1], ((char*)&d)[0]
|
35
38
|
|
36
39
|
#elif __BIG_ENDIAN__
|
37
40
|
|
38
|
-
#define
|
39
|
-
((char*)&d)[
|
41
|
+
#define STORE_BE16(d) \
|
42
|
+
((char*)&d)[0], ((char*)&d)[1]
|
40
43
|
|
41
|
-
#define
|
44
|
+
#define STORE_BE32(d) \
|
42
45
|
((char*)&d)[0], ((char*)&d)[1], ((char*)&d)[2], ((char*)&d)[3]
|
43
46
|
|
44
|
-
#define
|
47
|
+
#define STORE_BE64(d) \
|
45
48
|
((char*)&d)[0], ((char*)&d)[1], ((char*)&d)[2], ((char*)&d)[3], \
|
46
49
|
((char*)&d)[4], ((char*)&d)[5], ((char*)&d)[6], ((char*)&d)[7]
|
47
50
|
|
48
51
|
#endif
|
49
52
|
|
50
53
|
|
54
|
+
#ifndef msgpack_pack_inline_func
|
55
|
+
#error msgpack_pack_inline_func template is not defined
|
56
|
+
#endif
|
57
|
+
|
58
|
+
#ifndef msgpack_pack_user
|
59
|
+
#error msgpack_pack_user type is not defined
|
60
|
+
#endif
|
61
|
+
|
62
|
+
#ifndef msgpack_pack_append_buffer
|
63
|
+
#error msgpack_pack_append_buffer callback is not defined
|
64
|
+
#endif
|
65
|
+
|
66
|
+
|
51
67
|
/*
|
52
68
|
* Integer
|
53
69
|
*/
|
54
70
|
|
55
71
|
// wrapper
|
56
|
-
|
72
|
+
msgpack_pack_inline_func(int)(msgpack_pack_user x, int d)
|
57
73
|
{
|
58
74
|
if(d < -32) {
|
59
|
-
if(d < -32768) {
|
60
|
-
|
75
|
+
if(d < -32768) {
|
76
|
+
// signed 32
|
77
|
+
const unsigned char buf[5] = {0xd2, STORE_BE32(d)};
|
61
78
|
msgpack_pack_append_buffer(x, buf, 5);
|
62
|
-
} else if(d < -128) {
|
63
|
-
|
79
|
+
} else if(d < -128) {
|
80
|
+
// signed 16
|
81
|
+
const unsigned char buf[3] = {0xd1, STORE_BE16(d)};
|
64
82
|
msgpack_pack_append_buffer(x, buf, 3);
|
65
|
-
} else {
|
83
|
+
} else {
|
84
|
+
// signed 8
|
66
85
|
const unsigned char buf[2] = {0xd0, (uint8_t)d};
|
67
86
|
msgpack_pack_append_buffer(x, buf, 2);
|
68
87
|
}
|
69
|
-
} else if(d < 128) {
|
88
|
+
} else if(d < 128) {
|
89
|
+
// fixnum
|
70
90
|
msgpack_pack_append_buffer(x, (uint8_t*)&d, 1);
|
71
91
|
} else {
|
72
92
|
if(d < 256) {
|
@@ -75,38 +95,42 @@ inline void msgpack_pack_int(msgpack_pack_context x, int d)
|
|
75
95
|
msgpack_pack_append_buffer(x, buf, 2);
|
76
96
|
} else if(d < 65536) {
|
77
97
|
// unsigned 16
|
78
|
-
const unsigned char buf[3] = {0xcd,
|
98
|
+
const unsigned char buf[3] = {0xcd, STORE_BE16(d)};
|
79
99
|
msgpack_pack_append_buffer(x, buf, 3);
|
80
100
|
} else {
|
81
101
|
// unsigned 32
|
82
|
-
const unsigned char buf[5] = {0xce,
|
102
|
+
const unsigned char buf[5] = {0xce, STORE_BE32(d)};
|
83
103
|
msgpack_pack_append_buffer(x, buf, 5);
|
84
104
|
}
|
85
105
|
}
|
86
106
|
}
|
87
107
|
|
88
108
|
// wrapper
|
89
|
-
|
109
|
+
msgpack_pack_inline_func(unsigned_int)(msgpack_pack_user x, unsigned int d)
|
90
110
|
{
|
91
|
-
if(d <
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
const unsigned char buf[3] = {0xcd, STORE_16(d)};
|
101
|
-
msgpack_pack_append_buffer(x, buf, 3);
|
111
|
+
if(d < 256) {
|
112
|
+
if(d < 128) {
|
113
|
+
// fixnum
|
114
|
+
msgpack_pack_append_buffer(x, (unsigned char*)&d, 1);
|
115
|
+
} else {
|
116
|
+
// unsigned 8
|
117
|
+
const unsigned char buf[2] = {0xcc, (uint8_t)d};
|
118
|
+
msgpack_pack_append_buffer(x, buf, 2);
|
119
|
+
}
|
102
120
|
} else {
|
103
|
-
|
104
|
-
|
105
|
-
|
121
|
+
if(d < 65536) {
|
122
|
+
// unsigned 16
|
123
|
+
const unsigned char buf[3] = {0xcd, STORE_BE16(d)};
|
124
|
+
msgpack_pack_append_buffer(x, buf, 3);
|
125
|
+
} else {
|
126
|
+
// unsigned 32
|
127
|
+
const unsigned char buf[5] = {0xce, STORE_BE32(d)};
|
128
|
+
msgpack_pack_append_buffer(x, buf, 5);
|
129
|
+
}
|
106
130
|
}
|
107
131
|
}
|
108
132
|
|
109
|
-
|
133
|
+
msgpack_pack_inline_func(uint8)(msgpack_pack_user x, uint8_t d)
|
110
134
|
{
|
111
135
|
if(d < 128) {
|
112
136
|
msgpack_pack_append_buffer(x, &d, 1);
|
@@ -116,26 +140,25 @@ inline void msgpack_pack_unsigned_int_8(msgpack_pack_context x, uint8_t d)
|
|
116
140
|
}
|
117
141
|
}
|
118
142
|
|
119
|
-
|
143
|
+
msgpack_pack_inline_func(uint16)(msgpack_pack_user x, uint16_t d)
|
120
144
|
{
|
121
|
-
const unsigned char buf[3] = {0xcd,
|
145
|
+
const unsigned char buf[3] = {0xcd, STORE_BE16(d)};
|
122
146
|
msgpack_pack_append_buffer(x, buf, 3);
|
123
147
|
}
|
124
148
|
|
125
|
-
|
149
|
+
msgpack_pack_inline_func(uint32)(msgpack_pack_user x, uint32_t d)
|
126
150
|
{
|
127
|
-
const unsigned char buf[5] = {0xce,
|
151
|
+
const unsigned char buf[5] = {0xce, STORE_BE32(d)};
|
128
152
|
msgpack_pack_append_buffer(x, buf, 5);
|
129
153
|
}
|
130
154
|
|
131
|
-
|
155
|
+
msgpack_pack_inline_func(uint64)(msgpack_pack_user x, uint64_t d)
|
132
156
|
{
|
133
|
-
|
134
|
-
const unsigned char buf[9] = {0xcf, STORE_64(d)};
|
157
|
+
const unsigned char buf[9] = {0xcf, STORE_BE64(d)};
|
135
158
|
msgpack_pack_append_buffer(x, buf, 9);
|
136
159
|
}
|
137
160
|
|
138
|
-
|
161
|
+
msgpack_pack_inline_func(int8)(msgpack_pack_user x, int8_t d)
|
139
162
|
{
|
140
163
|
if(d > 0) {
|
141
164
|
msgpack_pack_append_buffer(x, (uint8_t*)&d, 1);
|
@@ -147,22 +170,21 @@ inline void msgpack_pack_signed_int_8(msgpack_pack_context x, int8_t d)
|
|
147
170
|
}
|
148
171
|
}
|
149
172
|
|
150
|
-
|
173
|
+
msgpack_pack_inline_func(int16)(msgpack_pack_user x, int16_t d)
|
151
174
|
{
|
152
|
-
const unsigned char buf[3] = {0xd1,
|
175
|
+
const unsigned char buf[3] = {0xd1, STORE_BE16(d)};
|
153
176
|
msgpack_pack_append_buffer(x, buf, 3);
|
154
177
|
}
|
155
178
|
|
156
|
-
|
179
|
+
msgpack_pack_inline_func(int32)(msgpack_pack_user x, int32_t d)
|
157
180
|
{
|
158
|
-
const unsigned char buf[5] = {0xd2,
|
181
|
+
const unsigned char buf[5] = {0xd2, STORE_BE32(d)};
|
159
182
|
msgpack_pack_append_buffer(x, buf, 5);
|
160
183
|
}
|
161
184
|
|
162
|
-
|
185
|
+
msgpack_pack_inline_func(int64)(msgpack_pack_user x, int64_t d)
|
163
186
|
{
|
164
|
-
|
165
|
-
const unsigned char buf[9] = {0xd3, STORE_64(d)};
|
187
|
+
const unsigned char buf[9] = {0xd3, STORE_BE64(d)};
|
166
188
|
msgpack_pack_append_buffer(x, buf, 9);
|
167
189
|
}
|
168
190
|
|
@@ -171,17 +193,17 @@ inline void msgpack_pack_signed_int_64(msgpack_pack_context x, int64_t d)
|
|
171
193
|
* Float
|
172
194
|
*/
|
173
195
|
|
174
|
-
|
196
|
+
msgpack_pack_inline_func(float)(msgpack_pack_user x, float d)
|
175
197
|
{
|
176
198
|
uint32_t n = *((uint32_t*)&d); // FIXME
|
177
|
-
const unsigned char buf[5] = {0xca,
|
199
|
+
const unsigned char buf[5] = {0xca, STORE_BE32(n)};
|
178
200
|
msgpack_pack_append_buffer(x, buf, 5);
|
179
201
|
}
|
180
202
|
|
181
|
-
|
203
|
+
msgpack_pack_inline_func(double)(msgpack_pack_user x, double d)
|
182
204
|
{
|
183
205
|
uint64_t n = *((uint64_t*)&d); // FIXME
|
184
|
-
const unsigned char buf[9] = {0xcb,
|
206
|
+
const unsigned char buf[9] = {0xcb, STORE_BE64(n)};
|
185
207
|
msgpack_pack_append_buffer(x, buf, 9);
|
186
208
|
}
|
187
209
|
|
@@ -190,7 +212,7 @@ inline void msgpack_pack_double(msgpack_pack_context x, double d)
|
|
190
212
|
* Nil
|
191
213
|
*/
|
192
214
|
|
193
|
-
|
215
|
+
msgpack_pack_inline_func(nil)(msgpack_pack_user x)
|
194
216
|
{
|
195
217
|
static const unsigned char d = 0xc0;
|
196
218
|
msgpack_pack_append_buffer(x, &d, 1);
|
@@ -200,13 +222,14 @@ inline void msgpack_pack_nil(msgpack_pack_context x)
|
|
200
222
|
/*
|
201
223
|
* Boolean
|
202
224
|
*/
|
203
|
-
|
225
|
+
|
226
|
+
msgpack_pack_inline_func(true)(msgpack_pack_user x)
|
204
227
|
{
|
205
228
|
static const unsigned char d = 0xc3;
|
206
229
|
msgpack_pack_append_buffer(x, &d, 1);
|
207
230
|
}
|
208
231
|
|
209
|
-
|
232
|
+
msgpack_pack_inline_func(false)(msgpack_pack_user x)
|
210
233
|
{
|
211
234
|
static const unsigned char d = 0xc2;
|
212
235
|
msgpack_pack_append_buffer(x, &d, 1);
|
@@ -217,18 +240,18 @@ inline void msgpack_pack_false(msgpack_pack_context x)
|
|
217
240
|
* Array
|
218
241
|
*/
|
219
242
|
|
220
|
-
|
243
|
+
msgpack_pack_inline_func(array)(msgpack_pack_user x, unsigned int n)
|
221
244
|
{
|
222
245
|
if(n < 16) {
|
223
246
|
unsigned char d = 0x90 | n;
|
224
247
|
msgpack_pack_append_buffer(x, &d, 1);
|
225
248
|
} else if(n < 65536) {
|
226
249
|
uint16_t d = (uint16_t)n;
|
227
|
-
unsigned char buf[3] = {0xdc,
|
250
|
+
unsigned char buf[3] = {0xdc, STORE_BE16(d)};
|
228
251
|
msgpack_pack_append_buffer(x, buf, 3);
|
229
252
|
} else {
|
230
253
|
uint32_t d = (uint32_t)n;
|
231
|
-
unsigned char buf[5] = {0xdd,
|
254
|
+
unsigned char buf[5] = {0xdd, STORE_BE32(d)};
|
232
255
|
msgpack_pack_append_buffer(x, buf, 5);
|
233
256
|
}
|
234
257
|
}
|
@@ -238,50 +261,53 @@ inline void msgpack_pack_array(msgpack_pack_context x, unsigned int n)
|
|
238
261
|
* Map
|
239
262
|
*/
|
240
263
|
|
241
|
-
|
264
|
+
msgpack_pack_inline_func(map)(msgpack_pack_user x, unsigned int n)
|
242
265
|
{
|
243
266
|
if(n < 16) {
|
244
267
|
unsigned char d = 0x80 | n;
|
245
268
|
msgpack_pack_append_buffer(x, &d, 1);
|
246
269
|
} else if(n < 65536) {
|
247
270
|
uint16_t d = (uint16_t)n;
|
248
|
-
unsigned char buf[3] = {0xde,
|
271
|
+
unsigned char buf[3] = {0xde, STORE_BE16(d)};
|
249
272
|
msgpack_pack_append_buffer(x, buf, 3);
|
250
273
|
} else {
|
251
274
|
uint32_t d = (uint32_t)n;
|
252
|
-
unsigned char buf[5] = {0xdf,
|
275
|
+
unsigned char buf[5] = {0xdf, STORE_BE32(d)};
|
253
276
|
msgpack_pack_append_buffer(x, buf, 5);
|
254
277
|
}
|
255
278
|
}
|
256
279
|
|
257
280
|
|
258
281
|
/*
|
259
|
-
*
|
282
|
+
* Raw
|
260
283
|
*/
|
261
284
|
|
262
|
-
|
263
|
-
{
|
264
|
-
uint32_t l = strlen(b);
|
265
|
-
msgpack_pack_append_buffer(x, (const unsigned char*)b, l+1);
|
266
|
-
}
|
267
|
-
|
268
|
-
inline void msgpack_pack_raw(msgpack_pack_context x, const void* b, size_t l)
|
285
|
+
msgpack_pack_inline_func(raw)(msgpack_pack_user x, size_t l)
|
269
286
|
{
|
270
287
|
if(l < 32) {
|
271
288
|
unsigned char d = 0xa0 | l;
|
272
289
|
msgpack_pack_append_buffer(x, &d, 1);
|
273
290
|
} else if(l < 65536) {
|
274
291
|
uint16_t d = (uint16_t)l;
|
275
|
-
unsigned char buf[3] = {0xda,
|
292
|
+
unsigned char buf[3] = {0xda, STORE_BE16(d)};
|
276
293
|
msgpack_pack_append_buffer(x, buf, 3);
|
277
294
|
} else {
|
278
295
|
uint32_t d = (uint32_t)l;
|
279
|
-
unsigned char buf[5] = {0xdb,
|
296
|
+
unsigned char buf[5] = {0xdb, STORE_BE32(d)};
|
280
297
|
msgpack_pack_append_buffer(x, buf, 5);
|
281
298
|
}
|
282
|
-
msgpack_pack_append_buffer(x, b, l);
|
283
299
|
}
|
284
300
|
|
301
|
+
msgpack_pack_inline_func(raw_body)(msgpack_pack_user x, const void* b, size_t l)
|
302
|
+
{
|
303
|
+
msgpack_pack_append_buffer(x, (const unsigned char*)b, l);
|
304
|
+
}
|
305
|
+
|
306
|
+
#undef msgpack_pack_inline_func
|
307
|
+
#undef msgpack_pack_user
|
308
|
+
#undef msgpack_pack_append_buffer
|
285
309
|
|
286
|
-
#
|
310
|
+
#undef STORE_BE16
|
311
|
+
#undef STORE_BE32
|
312
|
+
#undef STORE_BE64
|
287
313
|
|