msgpack 0.3.1 → 0.3.2

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/Rakefile CHANGED
@@ -15,9 +15,9 @@ AUTHOR = "FURUHASHI Sadayuki"
15
15
  EMAIL = "frsyuki _at_ users.sourceforge.jp"
16
16
  DESCRIPTION = "Binary-based efficient data interchange format."
17
17
  RUBYFORGE_PROJECT = "msgpack"
18
- HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
18
+ HOMEPATH = "http://msgpack.sourceforge.jp/"
19
19
  BIN_FILES = %w( )
20
- VERS = "0.3.1"
20
+ VERS = "0.3.2"
21
21
 
22
22
  #REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
23
23
  REV = nil
@@ -44,7 +44,7 @@ spec = Gem::Specification.new do |s|
44
44
  s.name = NAME
45
45
  s.version = VERS
46
46
  s.platform = Gem::Platform::RUBY
47
- s.has_rdoc = true
47
+ s.has_rdoc = false
48
48
  s.extra_rdoc_files = ["README", "ChangeLog", "AUTHORS"]
49
49
  s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
50
50
  s.summary = DESCRIPTION
@@ -127,6 +127,15 @@ static inline int template_callback_raw(unpack_user* u, const char* b, const cha
127
127
  static VALUE cUnpacker;
128
128
  static VALUE eUnpackError;
129
129
 
130
+ // FIXME slow operation
131
+ static void init_stack(msgpack_unpack_t* mp)
132
+ {
133
+ size_t i;
134
+ for(i=0; i < MSGPACK_MAX_STACK_SIZE; ++i) {
135
+ mp->stack[i].map_key = Qnil; /* GC */
136
+ }
137
+ }
138
+
130
139
  static void MessagePack_Unpacker_free(void* data)
131
140
  {
132
141
  if(data) { free(data); }
@@ -137,7 +146,7 @@ static void MessagePack_Unpacker_mark(msgpack_unpack_t *mp)
137
146
  unsigned int i;
138
147
  for(i=0; i < mp->top; ++i) {
139
148
  rb_gc_mark(mp->stack[i].obj);
140
- rb_gc_mark(mp->stack[i].map_key);
149
+ rb_gc_mark(mp->stack[i].map_key); /* maybe map_key is not initialized */
141
150
  }
142
151
  }
143
152
 
@@ -154,6 +163,7 @@ static VALUE MessagePack_Unpacker_reset(VALUE self)
154
163
  {
155
164
  UNPACKER(self, mp);
156
165
  template_init(mp);
166
+ init_stack(mp);
157
167
  unpack_user u = {0, Qnil};
158
168
  mp->user = u;
159
169
  return self;
@@ -281,6 +291,7 @@ static VALUE MessagePack_unpack_limit(VALUE self, VALUE data, VALUE limit)
281
291
 
282
292
  msgpack_unpack_t mp;
283
293
  template_init(&mp);
294
+ init_stack(&mp);
284
295
  unpack_user u = {0, Qnil};
285
296
  mp.user = u;
286
297
 
@@ -18,8 +18,7 @@
18
18
  #ifndef MSGPACK_PACK_DEFINE_H__
19
19
  #define MSGPACK_PACK_DEFINE_H__
20
20
 
21
- #include <stddef.h>
22
- #include <stdint.h>
21
+ #include "msgpack/sysdep.h"
23
22
  #include <limits.h>
24
23
 
25
24
  #endif /* msgpack/pack_define.h */
@@ -16,88 +16,16 @@
16
16
  * limitations under the License.
17
17
  */
18
18
 
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
26
-
27
-
28
19
  #ifdef __LITTLE_ENDIAN__
29
-
30
- #define STORE8_BE8(d) \
31
- ((uint8_t*)&d)[0]
32
-
33
-
34
- #define STORE16_BE8(d) \
35
- ((uint8_t*)&d)[0]
36
-
37
- #define STORE16_BE16(d) \
38
- ((uint8_t*)&d)[1], ((uint8_t*)&d)[0]
39
-
40
-
41
- #define STORE32_BE8(d) \
42
- ((uint8_t*)&d)[0]
43
-
44
- #define STORE32_BE16(d) \
45
- ((uint8_t*)&d)[1], ((uint8_t*)&d)[0]
46
-
47
- #define STORE32_BE32(d) \
48
- ((uint8_t*)&d)[3], ((uint8_t*)&d)[2], ((uint8_t*)&d)[1], ((uint8_t*)&d)[0]
49
-
50
-
51
- #define STORE64_BE8(d) \
52
- ((uint8_t*)&d)[0]
53
-
54
- #define STORE64_BE16(d) \
55
- ((uint8_t*)&d)[1], ((uint8_t*)&d)[0]
56
-
57
- #define STORE64_BE32(d) \
58
- ((uint8_t*)&d)[3], ((uint8_t*)&d)[2], ((uint8_t*)&d)[1], ((uint8_t*)&d)[0]
59
-
60
- #define STORE64_BE64(d) \
61
- ((uint8_t*)&d)[7], ((uint8_t*)&d)[6], ((uint8_t*)&d)[5], ((uint8_t*)&d)[4], \
62
- ((uint8_t*)&d)[3], ((uint8_t*)&d)[2], ((uint8_t*)&d)[1], ((uint8_t*)&d)[0]
63
-
64
-
20
+ #define TAKE8_8(d) ((uint8_t*)&d)[0]
21
+ #define TAKE8_16(d) ((uint8_t*)&d)[0]
22
+ #define TAKE8_32(d) ((uint8_t*)&d)[0]
23
+ #define TAKE8_64(d) ((uint8_t*)&d)[0]
65
24
  #elif __BIG_ENDIAN__
66
-
67
- #define STORE8_BE8(d) \
68
- ((uint8_t*)&d)[0]
69
-
70
-
71
- #define STORE16_BE8(d) \
72
- ((uint8_t*)&d)[1]
73
-
74
- #define STORE16_BE16(d) \
75
- ((uint8_t*)&d)[0], ((uint8_t*)&d)[1]
76
-
77
-
78
- #define STORE32_BE8(d) \
79
- ((uint8_t*)&d)[3]
80
-
81
- #define STORE32_BE16(d) \
82
- ((uint8_t*)&d)[2], ((uint8_t*)&d)[3]
83
-
84
- #define STORE32_BE32(d) \
85
- ((uint8_t*)&d)[0], ((uint8_t*)&d)[1], ((uint8_t*)&d)[2], ((uint8_t*)&d)[3]
86
-
87
-
88
- #define STORE64_BE8(d) \
89
- ((uint8_t*)&d)[7]
90
-
91
- #define STORE64_BE16(d) \
92
- ((uint8_t*)&d)[6], ((uint8_t*)&d)[7]
93
-
94
- #define STORE64_BE32(d) \
95
- ((uint8_t*)&d)[4], ((uint8_t*)&d)[5], ((uint8_t*)&d)[6], ((uint8_t*)&d)[7]
96
-
97
- #define STORE64_BE64(d) \
98
- ((uint8_t*)&d)[0], ((uint8_t*)&d)[1], ((uint8_t*)&d)[2], ((uint8_t*)&d)[3], \
99
- ((uint8_t*)&d)[4], ((uint8_t*)&d)[5], ((uint8_t*)&d)[6], ((uint8_t*)&d)[7]
100
-
25
+ #define TAKE8_8(d) ((uint8_t*)&d)[0]
26
+ #define TAKE8_16(d) ((uint8_t*)&d)[1]
27
+ #define TAKE8_32(d) ((uint8_t*)&d)[3]
28
+ #define TAKE8_64(d) ((uint8_t*)&d)[7]
101
29
  #endif
102
30
 
103
31
  #ifndef msgpack_pack_inline_func
@@ -121,10 +49,10 @@
121
49
  do { \
122
50
  if(d < (1<<7)) { \
123
51
  /* fixnum */ \
124
- msgpack_pack_append_buffer(x, &STORE8_BE8(d), 1); \
52
+ msgpack_pack_append_buffer(x, &TAKE8_8(d), 1); \
125
53
  } else { \
126
54
  /* unsigned 8 */ \
127
- const unsigned char buf[2] = {0xcc, STORE8_BE8(d)}; \
55
+ unsigned char buf[2] = {0xcc, TAKE8_8(d)}; \
128
56
  msgpack_pack_append_buffer(x, buf, 2); \
129
57
  } \
130
58
  } while(0)
@@ -133,14 +61,15 @@ do { \
133
61
  do { \
134
62
  if(d < (1<<7)) { \
135
63
  /* fixnum */ \
136
- msgpack_pack_append_buffer(x, &STORE16_BE8(d), 1); \
64
+ msgpack_pack_append_buffer(x, &TAKE8_16(d), 1); \
137
65
  } else if(d < (1<<8)) { \
138
66
  /* unsigned 8 */ \
139
- const unsigned char buf[2] = {0xcc, STORE16_BE8(d)}; \
67
+ unsigned char buf[2] = {0xcc, TAKE8_16(d)}; \
140
68
  msgpack_pack_append_buffer(x, buf, 2); \
141
69
  } else { \
142
70
  /* unsigned 16 */ \
143
- const unsigned char buf[3] = {0xcd, STORE16_BE16(d)}; \
71
+ unsigned char buf[3]; \
72
+ buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
144
73
  msgpack_pack_append_buffer(x, buf, 3); \
145
74
  } \
146
75
  } while(0)
@@ -150,20 +79,22 @@ do { \
150
79
  if(d < (1<<8)) { \
151
80
  if(d < (1<<7)) { \
152
81
  /* fixnum */ \
153
- msgpack_pack_append_buffer(x, &STORE32_BE8(d), 1); \
82
+ msgpack_pack_append_buffer(x, &TAKE8_32(d), 1); \
154
83
  } else { \
155
84
  /* unsigned 8 */ \
156
- const unsigned char buf[2] = {0xcc, STORE32_BE8(d)}; \
85
+ unsigned char buf[2] = {0xcc, TAKE8_32(d)}; \
157
86
  msgpack_pack_append_buffer(x, buf, 2); \
158
87
  } \
159
88
  } else { \
160
89
  if(d < (1<<16)) { \
161
90
  /* unsigned 16 */ \
162
- const unsigned char buf[3] = {0xcd, STORE32_BE16(d)}; \
91
+ unsigned char buf[3]; \
92
+ buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
163
93
  msgpack_pack_append_buffer(x, buf, 3); \
164
94
  } else { \
165
95
  /* unsigned 32 */ \
166
- const unsigned char buf[5] = {0xce, STORE32_BE32(d)}; \
96
+ unsigned char buf[5]; \
97
+ buf[0] = 0xce; *(uint32_t*)&buf[1] = _msgpack_be32(d); \
167
98
  msgpack_pack_append_buffer(x, buf, 5); \
168
99
  } \
169
100
  } \
@@ -174,24 +105,27 @@ do { \
174
105
  if(d < (1ULL<<8)) { \
175
106
  if(d < (1<<7)) { \
176
107
  /* fixnum */ \
177
- msgpack_pack_append_buffer(x, &STORE64_BE8(d), 1); \
108
+ msgpack_pack_append_buffer(x, &TAKE8_64(d), 1); \
178
109
  } else { \
179
110
  /* unsigned 8 */ \
180
- const unsigned char buf[2] = {0xcc, STORE64_BE8(d)}; \
111
+ unsigned char buf[2] = {0xcc, TAKE8_64(d)}; \
181
112
  msgpack_pack_append_buffer(x, buf, 2); \
182
113
  } \
183
114
  } else { \
184
115
  if(d < (1ULL<<16)) { \
185
116
  /* signed 16 */ \
186
- const unsigned char buf[3] = {0xcd, STORE64_BE16(d)}; \
117
+ unsigned char buf[3]; \
118
+ buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
187
119
  msgpack_pack_append_buffer(x, buf, 3); \
188
120
  } else if(d < (1ULL<<32)) { \
189
121
  /* signed 32 */ \
190
- const unsigned char buf[5] = {0xce, STORE64_BE32(d)}; \
122
+ unsigned char buf[5]; \
123
+ buf[0] = 0xce; *(uint32_t*)&buf[1] = _msgpack_be32(d); \
191
124
  msgpack_pack_append_buffer(x, buf, 5); \
192
125
  } else { \
193
126
  /* signed 64 */ \
194
- const unsigned char buf[9] = {0xcf, STORE64_BE64(d)}; \
127
+ unsigned char buf[9]; \
128
+ buf[0] = 0xcf; *(uint64_t*)&buf[1] = _msgpack_be64(d); \
195
129
  msgpack_pack_append_buffer(x, buf, 9); \
196
130
  } \
197
131
  } \
@@ -201,11 +135,11 @@ do { \
201
135
  do { \
202
136
  if(d < -(1<<5)) { \
203
137
  /* signed 8 */ \
204
- const unsigned char buf[2] = {0xd0, STORE8_BE8(d)}; \
138
+ unsigned char buf[2] = {0xd0, TAKE8_8(d)}; \
205
139
  msgpack_pack_append_buffer(x, buf, 2); \
206
140
  } else { \
207
141
  /* fixnum */ \
208
- msgpack_pack_append_buffer(x, &STORE8_BE8(d), 1); \
142
+ msgpack_pack_append_buffer(x, &TAKE8_8(d), 1); \
209
143
  } \
210
144
  } while(0)
211
145
 
@@ -214,24 +148,26 @@ do { \
214
148
  if(d < -(1<<5)) { \
215
149
  if(d < -(1<<7)) { \
216
150
  /* signed 16 */ \
217
- const unsigned char buf[3] = {0xd1, STORE16_BE16(d)}; \
151
+ unsigned char buf[3]; \
152
+ buf[0] = 0xd1; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
218
153
  msgpack_pack_append_buffer(x, buf, 3); \
219
154
  } else { \
220
155
  /* signed 8 */ \
221
- const unsigned char buf[2] = {0xd0, STORE16_BE8(d)}; \
156
+ unsigned char buf[2] = {0xd0, TAKE8_16(d)}; \
222
157
  msgpack_pack_append_buffer(x, buf, 2); \
223
158
  } \
224
159
  } else if(d < (1<<7)) { \
225
160
  /* fixnum */ \
226
- msgpack_pack_append_buffer(x, &STORE16_BE8(d), 1); \
161
+ msgpack_pack_append_buffer(x, &TAKE8_16(d), 1); \
227
162
  } else { \
228
163
  if(d < (1<<8)) { \
229
164
  /* unsigned 8 */ \
230
- const unsigned char buf[2] = {0xcc, STORE16_BE8(d)}; \
165
+ unsigned char buf[2] = {0xcc, TAKE8_16(d)}; \
231
166
  msgpack_pack_append_buffer(x, buf, 2); \
232
167
  } else { \
233
168
  /* unsigned 16 */ \
234
- const unsigned char buf[3] = {0xcd, STORE16_BE16(d)}; \
169
+ unsigned char buf[3]; \
170
+ buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
235
171
  msgpack_pack_append_buffer(x, buf, 3); \
236
172
  } \
237
173
  } \
@@ -242,32 +178,36 @@ do { \
242
178
  if(d < -(1<<5)) { \
243
179
  if(d < -(1<<15)) { \
244
180
  /* signed 32 */ \
245
- const unsigned char buf[5] = {0xd2, STORE32_BE32(d)}; \
181
+ unsigned char buf[5]; \
182
+ buf[0] = 0xd2; *(uint32_t*)&buf[1] = _msgpack_be32(d); \
246
183
  msgpack_pack_append_buffer(x, buf, 5); \
247
184
  } else if(d < -(1<<7)) { \
248
185
  /* signed 16 */ \
249
- const unsigned char buf[3] = {0xd1, STORE32_BE16(d)}; \
186
+ unsigned char buf[3]; \
187
+ buf[0] = 0xd1; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
250
188
  msgpack_pack_append_buffer(x, buf, 3); \
251
189
  } else { \
252
190
  /* signed 8 */ \
253
- const unsigned char buf[2] = {0xd0, STORE32_BE8(d)}; \
191
+ unsigned char buf[2] = {0xd0, TAKE8_32(d)}; \
254
192
  msgpack_pack_append_buffer(x, buf, 2); \
255
193
  } \
256
194
  } else if(d < (1<<7)) { \
257
195
  /* fixnum */ \
258
- msgpack_pack_append_buffer(x, &STORE32_BE8(d), 1); \
196
+ msgpack_pack_append_buffer(x, &TAKE8_32(d), 1); \
259
197
  } else { \
260
198
  if(d < (1<<8)) { \
261
199
  /* unsigned 8 */ \
262
- const unsigned char buf[2] = {0xcc, STORE32_BE8(d)}; \
200
+ unsigned char buf[2] = {0xcc, TAKE8_32(d)}; \
263
201
  msgpack_pack_append_buffer(x, buf, 2); \
264
202
  } else if(d < (1<<16)) { \
265
203
  /* unsigned 16 */ \
266
- const unsigned char buf[3] = {0xcd, STORE32_BE16(d)}; \
204
+ unsigned char buf[3]; \
205
+ buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
267
206
  msgpack_pack_append_buffer(x, buf, 3); \
268
207
  } else { \
269
208
  /* unsigned 32 */ \
270
- const unsigned char buf[5] = {0xce, STORE32_BE32(d)}; \
209
+ unsigned char buf[5]; \
210
+ buf[0] = 0xce; *(uint32_t*)&buf[1] = _msgpack_be32(d); \
271
211
  msgpack_pack_append_buffer(x, buf, 5); \
272
212
  } \
273
213
  } \
@@ -279,46 +219,52 @@ do { \
279
219
  if(d < -(1LL<<15)) { \
280
220
  if(d < -(1LL<<31)) { \
281
221
  /* signed 64 */ \
282
- const unsigned char buf[9] = {0xd3, STORE64_BE64(d)}; \
222
+ unsigned char buf[9]; \
223
+ buf[0] = 0xd3; *(uint64_t*)&buf[1] = _msgpack_be64(d); \
283
224
  msgpack_pack_append_buffer(x, buf, 9); \
284
225
  } else { \
285
226
  /* signed 32 */ \
286
- const unsigned char buf[5] = {0xd2, STORE64_BE32(d)}; \
227
+ unsigned char buf[5]; \
228
+ buf[0] = 0xd2; *(uint32_t*)&buf[1] = _msgpack_be32(d); \
287
229
  msgpack_pack_append_buffer(x, buf, 5); \
288
230
  } \
289
231
  } else { \
290
232
  if(d < -(1<<7)) { \
291
233
  /* signed 16 */ \
292
- const unsigned char buf[3] = {0xd1, STORE64_BE16(d)}; \
234
+ unsigned char buf[3]; \
235
+ buf[0] = 0xd1; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
293
236
  msgpack_pack_append_buffer(x, buf, 3); \
294
237
  } else { \
295
238
  /* signed 8 */ \
296
- const unsigned char buf[2] = {0xd0, STORE64_BE8(d)}; \
239
+ unsigned char buf[2] = {0xd0, TAKE8_64(d)}; \
297
240
  msgpack_pack_append_buffer(x, buf, 2); \
298
241
  } \
299
242
  } \
300
243
  } else if(d < (1<<7)) { \
301
244
  /* fixnum */ \
302
- msgpack_pack_append_buffer(x, &STORE64_BE8(d), 1); \
245
+ msgpack_pack_append_buffer(x, &TAKE8_64(d), 1); \
303
246
  } else { \
304
247
  if(d < (1LL<<16)) { \
305
248
  if(d < (1<<8)) { \
306
249
  /* unsigned 8 */ \
307
- const unsigned char buf[2] = {0xcc, STORE64_BE8(d)}; \
250
+ unsigned char buf[2] = {0xcc, TAKE8_64(d)}; \
308
251
  msgpack_pack_append_buffer(x, buf, 2); \
309
252
  } else { \
310
253
  /* unsigned 16 */ \
311
- const unsigned char buf[3] = {0xcd, STORE64_BE16(d)}; \
254
+ unsigned char buf[3]; \
255
+ buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d); \
312
256
  msgpack_pack_append_buffer(x, buf, 3); \
313
257
  } \
314
258
  } else { \
315
259
  if(d < (1LL<<32)) { \
316
260
  /* unsigned 32 */ \
317
- const unsigned char buf[5] = {0xce, STORE64_BE32(d)}; \
261
+ unsigned char buf[5]; \
262
+ buf[0] = 0xce; *(uint32_t*)&buf[1] = _msgpack_be32(d); \
318
263
  msgpack_pack_append_buffer(x, buf, 5); \
319
264
  } else { \
320
265
  /* unsigned 64 */ \
321
- const unsigned char buf[9] = {0xcf, STORE64_BE64(d)}; \
266
+ unsigned char buf[9]; \
267
+ buf[0] = 0xcf; *(uint64_t*)&buf[1] = _msgpack_be64(d); \
322
268
  msgpack_pack_append_buffer(x, buf, 9); \
323
269
  } \
324
270
  } \
@@ -330,49 +276,55 @@ do { \
330
276
 
331
277
  msgpack_pack_inline_func_fastint(_uint8)(msgpack_pack_user x, uint8_t d)
332
278
  {
333
- const unsigned char buf[2] = {0xcc, STORE8_BE8(d)};
279
+ unsigned char buf[2] = {0xcc, TAKE8_8(d)};
334
280
  msgpack_pack_append_buffer(x, buf, 2);
335
281
  }
336
282
 
337
283
  msgpack_pack_inline_func_fastint(_uint16)(msgpack_pack_user x, uint16_t d)
338
284
  {
339
- const unsigned char buf[3] = {0xcd, STORE16_BE16(d)};
285
+ unsigned char buf[3];
286
+ buf[0] = 0xcd; *(uint16_t*)&buf[1] = _msgpack_be16(d);
340
287
  msgpack_pack_append_buffer(x, buf, 3);
341
288
  }
342
289
 
343
290
  msgpack_pack_inline_func_fastint(_uint32)(msgpack_pack_user x, uint32_t d)
344
291
  {
345
- const unsigned char buf[5] = {0xce, STORE32_BE32(d)};
292
+ unsigned char buf[5];
293
+ buf[0] = 0xce; *(uint32_t*)&buf[1] = _msgpack_be32(d);
346
294
  msgpack_pack_append_buffer(x, buf, 5);
347
295
  }
348
296
 
349
297
  msgpack_pack_inline_func_fastint(_uint64)(msgpack_pack_user x, uint64_t d)
350
298
  {
351
- const unsigned char buf[9] = {0xcf, STORE64_BE64(d)};
299
+ unsigned char buf[9];
300
+ buf[0] = 0xcf; *(uint64_t*)&buf[1] = _msgpack_be64(d);
352
301
  msgpack_pack_append_buffer(x, buf, 9);
353
302
  }
354
303
 
355
304
  msgpack_pack_inline_func_fastint(_int8)(msgpack_pack_user x, int8_t d)
356
305
  {
357
- const unsigned char buf[2] = {0xd0, STORE8_BE8(d)};
306
+ unsigned char buf[2] = {0xd0, TAKE8_8(d)};
358
307
  msgpack_pack_append_buffer(x, buf, 2);
359
308
  }
360
309
 
361
310
  msgpack_pack_inline_func_fastint(_int16)(msgpack_pack_user x, int16_t d)
362
311
  {
363
- const unsigned char buf[3] = {0xd1, STORE16_BE16(d)};
312
+ unsigned char buf[3];
313
+ buf[0] = 0xd1; *(uint16_t*)&buf[1] = _msgpack_be16(d);
364
314
  msgpack_pack_append_buffer(x, buf, 3);
365
315
  }
366
316
 
367
317
  msgpack_pack_inline_func_fastint(_int32)(msgpack_pack_user x, int32_t d)
368
318
  {
369
- const unsigned char buf[5] = {0xd2, STORE32_BE32(d)};
319
+ unsigned char buf[5];
320
+ buf[0] = 0xd2; *(uint32_t*)&buf[1] = _msgpack_be32(d);
370
321
  msgpack_pack_append_buffer(x, buf, 5);
371
322
  }
372
323
 
373
324
  msgpack_pack_inline_func_fastint(_int64)(msgpack_pack_user x, int64_t d)
374
325
  {
375
- const unsigned char buf[9] = {0xd3, STORE64_BE64(d)};
326
+ unsigned char buf[9];
327
+ buf[0] = 0xd3; *(uint64_t*)&buf[1] = _msgpack_be64(d);
376
328
  msgpack_pack_append_buffer(x, buf, 9);
377
329
  }
378
330
 
@@ -604,7 +556,8 @@ msgpack_pack_inline_func(_float)(msgpack_pack_user x, float d)
604
556
  {
605
557
  union { char buf[4]; uint32_t num; } f;
606
558
  *((float*)&f.buf) = d; // FIXME
607
- const unsigned char buf[5] = {0xca, STORE32_BE32(f.num)};
559
+ unsigned char buf[5];
560
+ buf[0] = 0xca; *(uint32_t*)&buf[1] = _msgpack_be32(f.num);
608
561
  msgpack_pack_append_buffer(x, buf, 5);
609
562
  }
610
563
 
@@ -612,7 +565,8 @@ msgpack_pack_inline_func(_double)(msgpack_pack_user x, double d)
612
565
  {
613
566
  union { char buf[8]; uint64_t num; } f;
614
567
  *((double*)&f.buf) = d; // FIXME
615
- const unsigned char buf[9] = {0xcb, STORE64_BE64(f.num)};
568
+ unsigned char buf[9];
569
+ buf[0] = 0xcb; *(uint64_t*)&buf[1] = _msgpack_be64(f.num);
616
570
  msgpack_pack_append_buffer(x, buf, 9);
617
571
  }
618
572
 
@@ -655,12 +609,12 @@ msgpack_pack_inline_func(_array)(msgpack_pack_user x, unsigned int n)
655
609
  unsigned char d = 0x90 | n;
656
610
  msgpack_pack_append_buffer(x, &d, 1);
657
611
  } else if(n < 65536) {
658
- uint16_t d = (uint16_t)n;
659
- unsigned char buf[3] = {0xdc, STORE16_BE16(d)};
612
+ unsigned char buf[3];
613
+ buf[0] = 0xdc; *(uint16_t*)&buf[1] = _msgpack_be16(n);
660
614
  msgpack_pack_append_buffer(x, buf, 3);
661
615
  } else {
662
- uint32_t d = (uint32_t)n;
663
- unsigned char buf[5] = {0xdd, STORE32_BE32(d)};
616
+ unsigned char buf[5];
617
+ buf[0] = 0xdd; *(uint32_t*)&buf[1] = _msgpack_be32(n);
664
618
  msgpack_pack_append_buffer(x, buf, 5);
665
619
  }
666
620
  }
@@ -674,14 +628,14 @@ msgpack_pack_inline_func(_map)(msgpack_pack_user x, unsigned int n)
674
628
  {
675
629
  if(n < 16) {
676
630
  unsigned char d = 0x80 | n;
677
- msgpack_pack_append_buffer(x, &STORE8_BE8(d), 1);
631
+ msgpack_pack_append_buffer(x, &TAKE8_8(d), 1);
678
632
  } else if(n < 65536) {
679
- uint16_t d = (uint16_t)n;
680
- unsigned char buf[3] = {0xde, STORE16_BE16(d)};
633
+ unsigned char buf[3];
634
+ buf[0] = 0xde; *(uint16_t*)&buf[1] = _msgpack_be16(n);
681
635
  msgpack_pack_append_buffer(x, buf, 3);
682
636
  } else {
683
- uint32_t d = (uint32_t)n;
684
- unsigned char buf[5] = {0xdf, STORE32_BE32(d)};
637
+ unsigned char buf[5];
638
+ buf[0] = 0xdf; *(uint32_t*)&buf[1] = _msgpack_be32(n);
685
639
  msgpack_pack_append_buffer(x, buf, 5);
686
640
  }
687
641
  }
@@ -695,14 +649,14 @@ msgpack_pack_inline_func(_raw)(msgpack_pack_user x, size_t l)
695
649
  {
696
650
  if(l < 32) {
697
651
  unsigned char d = 0xa0 | l;
698
- msgpack_pack_append_buffer(x, &STORE8_BE8(d), 1);
652
+ msgpack_pack_append_buffer(x, &TAKE8_8(d), 1);
699
653
  } else if(l < 65536) {
700
- uint16_t d = (uint16_t)l;
701
- unsigned char buf[3] = {0xda, STORE16_BE16(d)};
654
+ unsigned char buf[3];
655
+ buf[0] = 0xda; *(uint16_t*)&buf[1] = _msgpack_be16(l);
702
656
  msgpack_pack_append_buffer(x, buf, 3);
703
657
  } else {
704
- uint32_t d = (uint32_t)l;
705
- unsigned char buf[5] = {0xdb, STORE32_BE32(d)};
658
+ unsigned char buf[5];
659
+ buf[0] = 0xdb; *(uint32_t*)&buf[1] = _msgpack_be32(l);
706
660
  msgpack_pack_append_buffer(x, buf, 5);
707
661
  }
708
662
  }
@@ -716,19 +670,10 @@ msgpack_pack_inline_func(_raw_body)(msgpack_pack_user x, const void* b, size_t l
716
670
  #undef msgpack_pack_user
717
671
  #undef msgpack_pack_append_buffer
718
672
 
719
- #undef STORE8_BE8
720
-
721
- #undef STORE16_BE8
722
- #undef STORE16_BE16
723
-
724
- #undef STORE32_BE8
725
- #undef STORE32_BE16
726
- #undef STORE32_BE32
727
-
728
- #undef STORE64_BE8
729
- #undef STORE64_BE16
730
- #undef STORE64_BE32
731
- #undef STORE64_BE64
673
+ #undef TAKE8_8
674
+ #undef TAKE8_16
675
+ #undef TAKE8_32
676
+ #undef TAKE8_64
732
677
 
733
678
  #undef msgpack_pack_real_uint8
734
679
  #undef msgpack_pack_real_uint16
@@ -0,0 +1,94 @@
1
+ /*
2
+ * MessagePack system dependencies
3
+ *
4
+ * Copyright (C) 2008-2009 FURUHASHI Sadayuki
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+ #ifndef MSGPACK_SYSDEP_H__
19
+ #define MSGPACK_SYSDEP_H__
20
+
21
+
22
+ #ifdef _MSC_VER
23
+ typedef __int8 int8_t;
24
+ typedef unsigned __int8 uint8_t;
25
+ typedef __int16 int16_t;
26
+ typedef unsigned __int16 uint16_t;
27
+ typedef __int32 int32_t;
28
+ typedef unsigned __int32 uint32_t;
29
+ typedef __int64 int64_t;
30
+ typedef unsigned __int64 uint64_t;
31
+ #else
32
+ #include <stddef.h>
33
+ #include <stdint.h>
34
+ #include <stdbool.h>
35
+ #endif
36
+
37
+
38
+ #ifdef _WIN32
39
+ typedef long _msgpack_atomic_counter_t;
40
+ #define _msgpack_sync_decr_and_fetch(ptr) InterlockedDecrement(ptr)
41
+ #define _msgpack_sync_incr_and_fetch(ptr) InterlockedIncrement(ptr)
42
+ #else
43
+ typedef unsigned int _msgpack_atomic_counter_t;
44
+ #define _msgpack_sync_decr_and_fetch(ptr) __sync_sub_and_fetch(ptr, 1)
45
+ #define _msgpack_sync_incr_and_fetch(ptr) __sync_add_and_fetch(ptr, 1)
46
+ #endif
47
+
48
+
49
+ #ifdef _WIN32
50
+ #include <winsock2.h>
51
+ #else
52
+ #include <arpa/inet.h> /* __BYTE_ORDER */
53
+ #endif
54
+
55
+ #if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
56
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
57
+ #define __LITTLE_ENDIAN__
58
+ #elif __BYTE_ORDER == __BIG_ENDIAN
59
+ #define __BIG_ENDIAN__
60
+ #endif
61
+ #endif
62
+
63
+ #ifdef __LITTLE_ENDIAN__
64
+
65
+ #define _msgpack_be16(x) ntohs(x)
66
+ #define _msgpack_be32(x) ntohl(x)
67
+
68
+ #if defined(_byteswap_uint64)
69
+ # define _msgpack_be64(x) (_byteswap_uint64(x))
70
+ #elif defined(bswap_64)
71
+ # define _msgpack_be64(x) bswap_64(x)
72
+ #elif defined(__DARWIN_OSSwapInt64)
73
+ # define _msgpack_be64(x) __DARWIN_OSSwapInt64(x)
74
+ #else
75
+ #define _msgpack_be64(x) \
76
+ ( ((((uint64_t)x) << 56) & 0xff00000000000000ULL ) | \
77
+ ((((uint64_t)x) << 40) & 0x00ff000000000000ULL ) | \
78
+ ((((uint64_t)x) << 24) & 0x0000ff0000000000ULL ) | \
79
+ ((((uint64_t)x) << 8) & 0x000000ff00000000ULL ) | \
80
+ ((((uint64_t)x) >> 8) & 0x00000000ff000000ULL ) | \
81
+ ((((uint64_t)x) >> 24) & 0x0000000000ff0000ULL ) | \
82
+ ((((uint64_t)x) >> 40) & 0x000000000000ff00ULL ) | \
83
+ ((((uint64_t)x) >> 56) & 0x00000000000000ffULL ) )
84
+ #endif
85
+
86
+ #else
87
+ #define _msgpack_be16(x) (x)
88
+ #define _msgpack_be32(x) (x)
89
+ #define _msgpack_be64(x) (x)
90
+ #endif
91
+
92
+
93
+ #endif /* msgpack/sysdep.h */
94
+
@@ -18,14 +18,10 @@
18
18
  #ifndef MSGPACK_UNPACK_DEFINE_H__
19
19
  #define MSGPACK_UNPACK_DEFINE_H__
20
20
 
21
- #include <stddef.h>
22
- #include <stdint.h>
21
+ #include "msgpack/sysdep.h"
23
22
  #include <string.h>
24
23
  #include <assert.h>
25
24
  #include <stdio.h>
26
- #ifndef __WIN32__
27
- #include <arpa/inet.h>
28
- #endif
29
25
 
30
26
  #ifdef __cplusplus
31
27
  extern "C" {
@@ -37,39 +33,6 @@ extern "C" {
37
33
  #endif
38
34
 
39
35
 
40
- #if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
41
- #if __BYTE_ORDER == __LITTLE_ENDIAN
42
- #define __LITTLE_ENDIAN__
43
- #elif __BYTE_ORDER == __BIG_ENDIAN
44
- #define __BIG_ENDIAN__
45
- #endif
46
- #endif
47
-
48
- #define msgpack_betoh16(x) ntohs(x)
49
- #define msgpack_betoh32(x) ntohl(x)
50
-
51
- #ifdef __LITTLE_ENDIAN__
52
- #if defined(__bswap_64)
53
- # define msgpack_betoh64(x) __bswap_64(x)
54
- #elif defined(__DARWIN_OSSwapInt64)
55
- # define msgpack_betoh64(x) __DARWIN_OSSwapInt64(x)
56
- #else
57
- static inline uint64_t msgpack_betoh64(uint64_t x) {
58
- return ((x << 56) & 0xff00000000000000ULL ) |
59
- ((x << 40) & 0x00ff000000000000ULL ) |
60
- ((x << 24) & 0x0000ff0000000000ULL ) |
61
- ((x << 8) & 0x000000ff00000000ULL ) |
62
- ((x >> 8) & 0x00000000ff000000ULL ) |
63
- ((x >> 24) & 0x0000000000ff0000ULL ) |
64
- ((x >> 40) & 0x000000000000ff00ULL ) |
65
- ((x >> 56) & 0x00000000000000ffULL ) ;
66
- }
67
- #endif
68
- #else
69
- #define msgpack_betoh64(x) (x)
70
- #endif
71
-
72
-
73
36
  typedef enum {
74
37
  CS_HEADER = 0x00, // nil
75
38
 
@@ -40,6 +40,11 @@
40
40
  #error msgpack_unpack_user type is not defined
41
41
  #endif
42
42
 
43
+ #ifndef USE_CASE_RANGE
44
+ #if !defined(_MSC_VER)
45
+ #define USE_CASE_RANGE
46
+ #endif
47
+ #endif
43
48
 
44
49
  msgpack_unpack_struct_decl(_stack) {
45
50
  msgpack_unpack_object obj;
@@ -126,20 +131,32 @@ msgpack_unpack_func(int, _execute)(msgpack_unpack_struct(_context)* ctx, const c
126
131
  ((unsigned int)*p & 0x1f)
127
132
 
128
133
  #define PTR_CAST_8(ptr) (*(uint8_t*)ptr)
129
- #define PTR_CAST_16(ptr) msgpack_betoh16(*(uint16_t*)ptr)
130
- #define PTR_CAST_32(ptr) msgpack_betoh32(*(uint32_t*)ptr)
131
- #define PTR_CAST_64(ptr) msgpack_betoh64(*(uint64_t*)ptr)
134
+ #define PTR_CAST_16(ptr) _msgpack_be16(*(uint16_t*)ptr)
135
+ #define PTR_CAST_32(ptr) _msgpack_be32(*(uint32_t*)ptr)
136
+ #define PTR_CAST_64(ptr) _msgpack_be64(*(uint64_t*)ptr)
137
+
138
+ #ifdef USE_CASE_RANGE
139
+ #define SWITCH_RANGE_BEGIN switch(*p) {
140
+ #define SWITCH_RANGE(FROM, TO) case FROM ... TO:
141
+ #define SWITCH_RANGE_DEFAULT default:
142
+ #define SWITCH_RANGE_END }
143
+ #else
144
+ #define SWITCH_RANGE_BEGIN { if(0) {
145
+ #define SWITCH_RANGE(FROM, TO) } else if(FROM <= *p && *p <= TO) {
146
+ #define SWITCH_RANGE_DEFAULT } else {
147
+ #define SWITCH_RANGE_END } }
148
+ #endif
132
149
 
133
150
  if(p == pe) { goto _out; }
134
151
  do {
135
152
  switch(cs) {
136
153
  case CS_HEADER:
137
- switch(*p) {
138
- case 0x00 ... 0x7f: // Positive Fixnum
154
+ SWITCH_RANGE_BEGIN
155
+ SWITCH_RANGE(0x00, 0x7f) // Positive Fixnum
139
156
  push_fixed_value(_uint8, *(uint8_t*)p);
140
- case 0xe0 ... 0xff: // Negative Fixnum
157
+ SWITCH_RANGE(0xe0, 0xff) // Negative Fixnum
141
158
  push_fixed_value(_int8, *(int8_t*)p);
142
- case 0xc0 ... 0xdf: // Variable
159
+ SWITCH_RANGE(0xc0, 0xdf) // Variable
143
160
  switch(*p) {
144
161
  case 0xc0: // nil
145
162
  push_simple_value(_nil);
@@ -182,16 +199,16 @@ msgpack_unpack_func(int, _execute)(msgpack_unpack_struct(_context)* ctx, const c
182
199
  default:
183
200
  goto _failed;
184
201
  }
185
- case 0xa0 ... 0xbf: // FixRaw
202
+ SWITCH_RANGE(0xa0, 0xbf) // FixRaw
186
203
  again_fixed_trail_if_zero(ACS_RAW_VALUE, ((unsigned int)*p & 0x1f), _raw_zero);
187
- case 0x90 ... 0x9f: // FixArray
204
+ SWITCH_RANGE(0x90, 0x9f) // FixArray
188
205
  start_container(_array, ((unsigned int)*p) & 0x0f, CT_ARRAY_ITEM);
189
- case 0x80 ... 0x8f: // FixMap
206
+ SWITCH_RANGE(0x80, 0x8f) // FixMap
190
207
  start_container(_map, ((unsigned int)*p) & 0x0f, CT_MAP_KEY);
191
208
 
192
- default:
209
+ SWITCH_RANGE_DEFAULT
193
210
  goto _failed;
194
- }
211
+ SWITCH_RANGE_END
195
212
  // end CS_HEADER
196
213
 
197
214
 
@@ -219,6 +219,7 @@ class MessagePackTestFormat < Test::Unit::TestCase
219
219
 
220
220
  def match(obj, buf)
221
221
  assert_equal(obj.to_msgpack, buf)
222
+ assert_equal(MessagePack::unpack(buf), obj)
222
223
  end
223
224
  end
224
225
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: msgpack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - FURUHASHI Sadayuki
@@ -9,7 +9,7 @@ autorequire: ""
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-04 00:00:00 +09:00
12
+ date: 2009-12-11 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -37,11 +37,14 @@ files:
37
37
  - ext/extconf.rb
38
38
  - msgpack/pack_define.h
39
39
  - msgpack/pack_template.h
40
+ - msgpack/sysdep.h
40
41
  - msgpack/unpack_define.h
41
42
  - msgpack/unpack_template.h
42
43
  - AUTHORS
43
44
  has_rdoc: true
44
- homepage: http://msgpack.rubyforge.org
45
+ homepage: http://msgpack.sourceforge.jp/
46
+ licenses: []
47
+
45
48
  post_install_message:
46
49
  rdoc_options:
47
50
  - --title
@@ -73,9 +76,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
76
  requirements: []
74
77
 
75
78
  rubyforge_project: msgpack
76
- rubygems_version: 1.3.1
79
+ rubygems_version: 1.3.5
77
80
  signing_key:
78
- specification_version: 2
81
+ specification_version: 3
79
82
  summary: Binary-based efficient data interchange format.
80
83
  test_files:
81
84
  - test/test_helper.rb