msgpack 0.4.7 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/.gitignore +17 -0
  2. data/ChangeLog +47 -0
  3. data/README.rdoc +102 -0
  4. data/Rakefile +88 -0
  5. data/doclib/msgpack.rb +55 -0
  6. data/doclib/msgpack/buffer.rb +193 -0
  7. data/doclib/msgpack/core_ext.rb +101 -0
  8. data/doclib/msgpack/error.rb +14 -0
  9. data/doclib/msgpack/packer.rb +131 -0
  10. data/doclib/msgpack/unpacker.rb +130 -0
  11. data/ext/msgpack/buffer.c +679 -0
  12. data/ext/msgpack/buffer.h +442 -0
  13. data/ext/msgpack/buffer_class.c +507 -0
  14. data/ext/msgpack/buffer_class.h +32 -0
  15. data/ext/msgpack/compat.h +112 -0
  16. data/ext/msgpack/core_ext.c +129 -0
  17. data/ext/{pack.h → msgpack/core_ext.h} +7 -7
  18. data/ext/msgpack/extconf.rb +17 -0
  19. data/ext/msgpack/packer.c +137 -0
  20. data/ext/msgpack/packer.h +319 -0
  21. data/ext/msgpack/packer_class.c +285 -0
  22. data/ext/{unpack.h → msgpack/packer_class.h} +11 -7
  23. data/ext/msgpack/rbinit.c +33 -0
  24. data/ext/msgpack/rmem.c +110 -0
  25. data/ext/msgpack/rmem.h +100 -0
  26. data/ext/msgpack/sysdep.h +115 -0
  27. data/ext/msgpack/sysdep_endian.h +50 -0
  28. data/ext/msgpack/sysdep_types.h +46 -0
  29. data/ext/msgpack/unpacker.c +669 -0
  30. data/ext/msgpack/unpacker.h +112 -0
  31. data/ext/msgpack/unpacker_class.c +376 -0
  32. data/{msgpack/pack_define.h → ext/msgpack/unpacker_class.h} +12 -8
  33. data/lib/msgpack.rb +10 -0
  34. data/{ext → lib/msgpack}/version.rb +1 -1
  35. data/msgpack.gemspec +25 -0
  36. data/spec/buffer_io_spec.rb +237 -0
  37. data/spec/buffer_spec.rb +572 -0
  38. data/{test → spec}/cases.json +0 -0
  39. data/{test/cases.mpac → spec/cases.msg} +0 -0
  40. data/{test/cases_compact.mpac → spec/cases_compact.msg} +0 -0
  41. data/spec/cases_spec.rb +39 -0
  42. data/spec/format_spec.rb +225 -0
  43. data/spec/packer_spec.rb +127 -0
  44. data/spec/random_compat.rb +24 -0
  45. data/spec/spec_helper.rb +21 -0
  46. data/spec/unpacker_spec.rb +128 -0
  47. metadata +171 -34
  48. data/ext/compat.h +0 -99
  49. data/ext/extconf.rb +0 -7
  50. data/ext/pack.c +0 -314
  51. data/ext/rbinit.c +0 -66
  52. data/ext/unpack.c +0 -1001
  53. data/msgpack/pack_template.h +0 -771
  54. data/msgpack/sysdep.h +0 -195
  55. data/msgpack/unpack_define.h +0 -93
  56. data/msgpack/unpack_template.h +0 -413
  57. data/test/test_cases.rb +0 -46
  58. data/test/test_encoding.rb +0 -68
  59. data/test/test_helper.rb +0 -10
  60. data/test/test_pack_unpack.rb +0 -308
@@ -1,771 +0,0 @@
1
- /*
2
- * MessagePack packing routine template
3
- *
4
- * Copyright (C) 2008-2010 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
-
19
- #if defined(__LITTLE_ENDIAN__)
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]
24
- #elif defined(__BIG_ENDIAN__)
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]
29
- #endif
30
-
31
- #ifndef msgpack_pack_inline_func
32
- #error msgpack_pack_inline_func template is not defined
33
- #endif
34
-
35
- #ifndef msgpack_pack_user
36
- #error msgpack_pack_user type is not defined
37
- #endif
38
-
39
- #ifndef msgpack_pack_append_buffer
40
- #error msgpack_pack_append_buffer callback is not defined
41
- #endif
42
-
43
-
44
- /*
45
- * Integer
46
- */
47
-
48
- #define msgpack_pack_real_uint8(x, d) \
49
- do { \
50
- if(d < (1<<7)) { \
51
- /* fixnum */ \
52
- msgpack_pack_append_buffer(x, &TAKE8_8(d), 1); \
53
- } else { \
54
- /* unsigned 8 */ \
55
- unsigned char buf[2] = {0xcc, TAKE8_8(d)}; \
56
- msgpack_pack_append_buffer(x, buf, 2); \
57
- } \
58
- } while(0)
59
-
60
- #define msgpack_pack_real_uint16(x, d) \
61
- do { \
62
- if(d < (1<<7)) { \
63
- /* fixnum */ \
64
- msgpack_pack_append_buffer(x, &TAKE8_16(d), 1); \
65
- } else if(d < (1<<8)) { \
66
- /* unsigned 8 */ \
67
- unsigned char buf[2] = {0xcc, TAKE8_16(d)}; \
68
- msgpack_pack_append_buffer(x, buf, 2); \
69
- } else { \
70
- /* unsigned 16 */ \
71
- unsigned char buf[3]; \
72
- buf[0] = 0xcd; _msgpack_store16(&buf[1], (uint16_t)d); \
73
- msgpack_pack_append_buffer(x, buf, 3); \
74
- } \
75
- } while(0)
76
-
77
- #define msgpack_pack_real_uint32(x, d) \
78
- do { \
79
- if(d < (1<<8)) { \
80
- if(d < (1<<7)) { \
81
- /* fixnum */ \
82
- msgpack_pack_append_buffer(x, &TAKE8_32(d), 1); \
83
- } else { \
84
- /* unsigned 8 */ \
85
- unsigned char buf[2] = {0xcc, TAKE8_32(d)}; \
86
- msgpack_pack_append_buffer(x, buf, 2); \
87
- } \
88
- } else { \
89
- if(d < (1<<16)) { \
90
- /* unsigned 16 */ \
91
- unsigned char buf[3]; \
92
- buf[0] = 0xcd; _msgpack_store16(&buf[1], (uint16_t)d); \
93
- msgpack_pack_append_buffer(x, buf, 3); \
94
- } else { \
95
- /* unsigned 32 */ \
96
- unsigned char buf[5]; \
97
- buf[0] = 0xce; _msgpack_store32(&buf[1], (uint32_t)d); \
98
- msgpack_pack_append_buffer(x, buf, 5); \
99
- } \
100
- } \
101
- } while(0)
102
-
103
- #define msgpack_pack_real_uint64(x, d) \
104
- do { \
105
- if(d < (1ULL<<8)) { \
106
- if(d < (1ULL<<7)) { \
107
- /* fixnum */ \
108
- msgpack_pack_append_buffer(x, &TAKE8_64(d), 1); \
109
- } else { \
110
- /* unsigned 8 */ \
111
- unsigned char buf[2] = {0xcc, TAKE8_64(d)}; \
112
- msgpack_pack_append_buffer(x, buf, 2); \
113
- } \
114
- } else { \
115
- if(d < (1ULL<<16)) { \
116
- /* unsigned 16 */ \
117
- unsigned char buf[3]; \
118
- buf[0] = 0xcd; _msgpack_store16(&buf[1], (uint16_t)d); \
119
- msgpack_pack_append_buffer(x, buf, 3); \
120
- } else if(d < (1ULL<<32)) { \
121
- /* unsigned 32 */ \
122
- unsigned char buf[5]; \
123
- buf[0] = 0xce; _msgpack_store32(&buf[1], (uint32_t)d); \
124
- msgpack_pack_append_buffer(x, buf, 5); \
125
- } else { \
126
- /* unsigned 64 */ \
127
- unsigned char buf[9]; \
128
- buf[0] = 0xcf; _msgpack_store64(&buf[1], d); \
129
- msgpack_pack_append_buffer(x, buf, 9); \
130
- } \
131
- } \
132
- } while(0)
133
-
134
- #define msgpack_pack_real_int8(x, d) \
135
- do { \
136
- if(d < -(1<<5)) { \
137
- /* signed 8 */ \
138
- unsigned char buf[2] = {0xd0, TAKE8_8(d)}; \
139
- msgpack_pack_append_buffer(x, buf, 2); \
140
- } else { \
141
- /* fixnum */ \
142
- msgpack_pack_append_buffer(x, &TAKE8_8(d), 1); \
143
- } \
144
- } while(0)
145
-
146
- #define msgpack_pack_real_int16(x, d) \
147
- do { \
148
- if(d < -(1<<5)) { \
149
- if(d < -(1<<7)) { \
150
- /* signed 16 */ \
151
- unsigned char buf[3]; \
152
- buf[0] = 0xd1; _msgpack_store16(&buf[1], (int16_t)d); \
153
- msgpack_pack_append_buffer(x, buf, 3); \
154
- } else { \
155
- /* signed 8 */ \
156
- unsigned char buf[2] = {0xd0, TAKE8_16(d)}; \
157
- msgpack_pack_append_buffer(x, buf, 2); \
158
- } \
159
- } else if(d < (1<<7)) { \
160
- /* fixnum */ \
161
- msgpack_pack_append_buffer(x, &TAKE8_16(d), 1); \
162
- } else { \
163
- if(d < (1<<8)) { \
164
- /* unsigned 8 */ \
165
- unsigned char buf[2] = {0xcc, TAKE8_16(d)}; \
166
- msgpack_pack_append_buffer(x, buf, 2); \
167
- } else { \
168
- /* unsigned 16 */ \
169
- unsigned char buf[3]; \
170
- buf[0] = 0xcd; _msgpack_store16(&buf[1], (uint16_t)d); \
171
- msgpack_pack_append_buffer(x, buf, 3); \
172
- } \
173
- } \
174
- } while(0)
175
-
176
- #define msgpack_pack_real_int32(x, d) \
177
- do { \
178
- if(d < -(1<<5)) { \
179
- if(d < -(1<<15)) { \
180
- /* signed 32 */ \
181
- unsigned char buf[5]; \
182
- buf[0] = 0xd2; _msgpack_store32(&buf[1], (int32_t)d); \
183
- msgpack_pack_append_buffer(x, buf, 5); \
184
- } else if(d < -(1<<7)) { \
185
- /* signed 16 */ \
186
- unsigned char buf[3]; \
187
- buf[0] = 0xd1; _msgpack_store16(&buf[1], (int16_t)d); \
188
- msgpack_pack_append_buffer(x, buf, 3); \
189
- } else { \
190
- /* signed 8 */ \
191
- unsigned char buf[2] = {0xd0, TAKE8_32(d)}; \
192
- msgpack_pack_append_buffer(x, buf, 2); \
193
- } \
194
- } else if(d < (1<<7)) { \
195
- /* fixnum */ \
196
- msgpack_pack_append_buffer(x, &TAKE8_32(d), 1); \
197
- } else { \
198
- if(d < (1<<8)) { \
199
- /* unsigned 8 */ \
200
- unsigned char buf[2] = {0xcc, TAKE8_32(d)}; \
201
- msgpack_pack_append_buffer(x, buf, 2); \
202
- } else if(d < (1<<16)) { \
203
- /* unsigned 16 */ \
204
- unsigned char buf[3]; \
205
- buf[0] = 0xcd; _msgpack_store16(&buf[1], (uint16_t)d); \
206
- msgpack_pack_append_buffer(x, buf, 3); \
207
- } else { \
208
- /* unsigned 32 */ \
209
- unsigned char buf[5]; \
210
- buf[0] = 0xce; _msgpack_store32(&buf[1], (uint32_t)d); \
211
- msgpack_pack_append_buffer(x, buf, 5); \
212
- } \
213
- } \
214
- } while(0)
215
-
216
- #define msgpack_pack_real_int64(x, d) \
217
- do { \
218
- if(d < -(1LL<<5)) { \
219
- if(d < -(1LL<<15)) { \
220
- if(d < -(1LL<<31)) { \
221
- /* signed 64 */ \
222
- unsigned char buf[9]; \
223
- buf[0] = 0xd3; _msgpack_store64(&buf[1], d); \
224
- msgpack_pack_append_buffer(x, buf, 9); \
225
- } else { \
226
- /* signed 32 */ \
227
- unsigned char buf[5]; \
228
- buf[0] = 0xd2; _msgpack_store32(&buf[1], (int32_t)d); \
229
- msgpack_pack_append_buffer(x, buf, 5); \
230
- } \
231
- } else { \
232
- if(d < -(1<<7)) { \
233
- /* signed 16 */ \
234
- unsigned char buf[3]; \
235
- buf[0] = 0xd1; _msgpack_store16(&buf[1], (int16_t)d); \
236
- msgpack_pack_append_buffer(x, buf, 3); \
237
- } else { \
238
- /* signed 8 */ \
239
- unsigned char buf[2] = {0xd0, TAKE8_64(d)}; \
240
- msgpack_pack_append_buffer(x, buf, 2); \
241
- } \
242
- } \
243
- } else if(d < (1<<7)) { \
244
- /* fixnum */ \
245
- msgpack_pack_append_buffer(x, &TAKE8_64(d), 1); \
246
- } else { \
247
- if(d < (1LL<<16)) { \
248
- if(d < (1<<8)) { \
249
- /* unsigned 8 */ \
250
- unsigned char buf[2] = {0xcc, TAKE8_64(d)}; \
251
- msgpack_pack_append_buffer(x, buf, 2); \
252
- } else { \
253
- /* unsigned 16 */ \
254
- unsigned char buf[3]; \
255
- buf[0] = 0xcd; _msgpack_store16(&buf[1], (uint16_t)d); \
256
- msgpack_pack_append_buffer(x, buf, 3); \
257
- } \
258
- } else { \
259
- if(d < (1LL<<32)) { \
260
- /* unsigned 32 */ \
261
- unsigned char buf[5]; \
262
- buf[0] = 0xce; _msgpack_store32(&buf[1], (uint32_t)d); \
263
- msgpack_pack_append_buffer(x, buf, 5); \
264
- } else { \
265
- /* unsigned 64 */ \
266
- unsigned char buf[9]; \
267
- buf[0] = 0xcf; _msgpack_store64(&buf[1], d); \
268
- msgpack_pack_append_buffer(x, buf, 9); \
269
- } \
270
- } \
271
- } \
272
- } while(0)
273
-
274
-
275
- #ifdef msgpack_pack_inline_func_fixint
276
-
277
- msgpack_pack_inline_func_fixint(_uint8)(msgpack_pack_user x, uint8_t d)
278
- {
279
- unsigned char buf[2] = {0xcc, TAKE8_8(d)};
280
- msgpack_pack_append_buffer(x, buf, 2);
281
- }
282
-
283
- msgpack_pack_inline_func_fixint(_uint16)(msgpack_pack_user x, uint16_t d)
284
- {
285
- unsigned char buf[3];
286
- buf[0] = 0xcd; _msgpack_store16(&buf[1], d);
287
- msgpack_pack_append_buffer(x, buf, 3);
288
- }
289
-
290
- msgpack_pack_inline_func_fixint(_uint32)(msgpack_pack_user x, uint32_t d)
291
- {
292
- unsigned char buf[5];
293
- buf[0] = 0xce; _msgpack_store32(&buf[1], d);
294
- msgpack_pack_append_buffer(x, buf, 5);
295
- }
296
-
297
- msgpack_pack_inline_func_fixint(_uint64)(msgpack_pack_user x, uint64_t d)
298
- {
299
- unsigned char buf[9];
300
- buf[0] = 0xcf; _msgpack_store64(&buf[1], d);
301
- msgpack_pack_append_buffer(x, buf, 9);
302
- }
303
-
304
- msgpack_pack_inline_func_fixint(_int8)(msgpack_pack_user x, int8_t d)
305
- {
306
- unsigned char buf[2] = {0xd0, TAKE8_8(d)};
307
- msgpack_pack_append_buffer(x, buf, 2);
308
- }
309
-
310
- msgpack_pack_inline_func_fixint(_int16)(msgpack_pack_user x, int16_t d)
311
- {
312
- unsigned char buf[3];
313
- buf[0] = 0xd1; _msgpack_store16(&buf[1], d);
314
- msgpack_pack_append_buffer(x, buf, 3);
315
- }
316
-
317
- msgpack_pack_inline_func_fixint(_int32)(msgpack_pack_user x, int32_t d)
318
- {
319
- unsigned char buf[5];
320
- buf[0] = 0xd2; _msgpack_store32(&buf[1], d);
321
- msgpack_pack_append_buffer(x, buf, 5);
322
- }
323
-
324
- msgpack_pack_inline_func_fixint(_int64)(msgpack_pack_user x, int64_t d)
325
- {
326
- unsigned char buf[9];
327
- buf[0] = 0xd3; _msgpack_store64(&buf[1], d);
328
- msgpack_pack_append_buffer(x, buf, 9);
329
- }
330
-
331
- #undef msgpack_pack_inline_func_fixint
332
- #endif
333
-
334
-
335
- msgpack_pack_inline_func(_uint8)(msgpack_pack_user x, uint8_t d)
336
- {
337
- msgpack_pack_real_uint8(x, d);
338
- }
339
-
340
- msgpack_pack_inline_func(_uint16)(msgpack_pack_user x, uint16_t d)
341
- {
342
- msgpack_pack_real_uint16(x, d);
343
- }
344
-
345
- msgpack_pack_inline_func(_uint32)(msgpack_pack_user x, uint32_t d)
346
- {
347
- msgpack_pack_real_uint32(x, d);
348
- }
349
-
350
- msgpack_pack_inline_func(_uint64)(msgpack_pack_user x, uint64_t d)
351
- {
352
- msgpack_pack_real_uint64(x, d);
353
- }
354
-
355
- msgpack_pack_inline_func(_int8)(msgpack_pack_user x, int8_t d)
356
- {
357
- msgpack_pack_real_int8(x, d);
358
- }
359
-
360
- msgpack_pack_inline_func(_int16)(msgpack_pack_user x, int16_t d)
361
- {
362
- msgpack_pack_real_int16(x, d);
363
- }
364
-
365
- msgpack_pack_inline_func(_int32)(msgpack_pack_user x, int32_t d)
366
- {
367
- msgpack_pack_real_int32(x, d);
368
- }
369
-
370
- msgpack_pack_inline_func(_int64)(msgpack_pack_user x, int64_t d)
371
- {
372
- msgpack_pack_real_int64(x, d);
373
- }
374
-
375
-
376
- #ifdef msgpack_pack_inline_func_cint
377
-
378
- msgpack_pack_inline_func_cint(_short)(msgpack_pack_user x, short d)
379
- {
380
- #if defined(SIZEOF_SHORT)
381
- #if SIZEOF_SHORT == 2
382
- msgpack_pack_real_int16(x, d);
383
- #elif SIZEOF_SHORT == 4
384
- msgpack_pack_real_int32(x, d);
385
- #else
386
- msgpack_pack_real_int64(x, d);
387
- #endif
388
-
389
- #elif defined(SHRT_MAX)
390
- #if SHRT_MAX == 0x7fff
391
- msgpack_pack_real_int16(x, d);
392
- #elif SHRT_MAX == 0x7fffffff
393
- msgpack_pack_real_int32(x, d);
394
- #else
395
- msgpack_pack_real_int64(x, d);
396
- #endif
397
-
398
- #else
399
- if(sizeof(short) == 2) {
400
- msgpack_pack_real_int16(x, d);
401
- } else if(sizeof(short) == 4) {
402
- msgpack_pack_real_int32(x, d);
403
- } else {
404
- msgpack_pack_real_int64(x, d);
405
- }
406
- #endif
407
- }
408
-
409
- msgpack_pack_inline_func_cint(_int)(msgpack_pack_user x, int d)
410
- {
411
- #if defined(SIZEOF_INT)
412
- #if SIZEOF_INT == 2
413
- msgpack_pack_real_int16(x, d);
414
- #elif SIZEOF_INT == 4
415
- msgpack_pack_real_int32(x, d);
416
- #else
417
- msgpack_pack_real_int64(x, d);
418
- #endif
419
-
420
- #elif defined(INT_MAX)
421
- #if INT_MAX == 0x7fff
422
- msgpack_pack_real_int16(x, d);
423
- #elif INT_MAX == 0x7fffffff
424
- msgpack_pack_real_int32(x, d);
425
- #else
426
- msgpack_pack_real_int64(x, d);
427
- #endif
428
-
429
- #else
430
- if(sizeof(int) == 2) {
431
- msgpack_pack_real_int16(x, d);
432
- } else if(sizeof(int) == 4) {
433
- msgpack_pack_real_int32(x, d);
434
- } else {
435
- msgpack_pack_real_int64(x, d);
436
- }
437
- #endif
438
- }
439
-
440
- msgpack_pack_inline_func_cint(_long)(msgpack_pack_user x, long d)
441
- {
442
- #if defined(SIZEOF_LONG)
443
- #if SIZEOF_LONG == 2
444
- msgpack_pack_real_int16(x, d);
445
- #elif SIZEOF_LONG == 4
446
- msgpack_pack_real_int32(x, d);
447
- #else
448
- msgpack_pack_real_int64(x, d);
449
- #endif
450
-
451
- #elif defined(LONG_MAX)
452
- #if LONG_MAX == 0x7fffL
453
- msgpack_pack_real_int16(x, d);
454
- #elif LONG_MAX == 0x7fffffffL
455
- msgpack_pack_real_int32(x, d);
456
- #else
457
- msgpack_pack_real_int64(x, d);
458
- #endif
459
-
460
- #else
461
- if(sizeof(long) == 2) {
462
- msgpack_pack_real_int16(x, d);
463
- } else if(sizeof(long) == 4) {
464
- msgpack_pack_real_int32(x, d);
465
- } else {
466
- msgpack_pack_real_int64(x, d);
467
- }
468
- #endif
469
- }
470
-
471
- msgpack_pack_inline_func_cint(_long_long)(msgpack_pack_user x, long long d)
472
- {
473
- #if defined(SIZEOF_LONG_LONG)
474
- #if SIZEOF_LONG_LONG == 2
475
- msgpack_pack_real_int16(x, d);
476
- #elif SIZEOF_LONG_LONG == 4
477
- msgpack_pack_real_int32(x, d);
478
- #else
479
- msgpack_pack_real_int64(x, d);
480
- #endif
481
-
482
- #elif defined(LLONG_MAX)
483
- #if LLONG_MAX == 0x7fffL
484
- msgpack_pack_real_int16(x, d);
485
- #elif LLONG_MAX == 0x7fffffffL
486
- msgpack_pack_real_int32(x, d);
487
- #else
488
- msgpack_pack_real_int64(x, d);
489
- #endif
490
-
491
- #else
492
- if(sizeof(long long) == 2) {
493
- msgpack_pack_real_int16(x, d);
494
- } else if(sizeof(long long) == 4) {
495
- msgpack_pack_real_int32(x, d);
496
- } else {
497
- msgpack_pack_real_int64(x, d);
498
- }
499
- #endif
500
- }
501
-
502
- msgpack_pack_inline_func_cint(_unsigned_short)(msgpack_pack_user x, unsigned short d)
503
- {
504
- #if defined(SIZEOF_SHORT)
505
- #if SIZEOF_SHORT == 2
506
- msgpack_pack_real_uint16(x, d);
507
- #elif SIZEOF_SHORT == 4
508
- msgpack_pack_real_uint32(x, d);
509
- #else
510
- msgpack_pack_real_uint64(x, d);
511
- #endif
512
-
513
- #elif defined(USHRT_MAX)
514
- #if USHRT_MAX == 0xffffU
515
- msgpack_pack_real_uint16(x, d);
516
- #elif USHRT_MAX == 0xffffffffU
517
- msgpack_pack_real_uint32(x, d);
518
- #else
519
- msgpack_pack_real_uint64(x, d);
520
- #endif
521
-
522
- #else
523
- if(sizeof(unsigned short) == 2) {
524
- msgpack_pack_real_uint16(x, d);
525
- } else if(sizeof(unsigned short) == 4) {
526
- msgpack_pack_real_uint32(x, d);
527
- } else {
528
- msgpack_pack_real_uint64(x, d);
529
- }
530
- #endif
531
- }
532
-
533
- msgpack_pack_inline_func_cint(_unsigned_int)(msgpack_pack_user x, unsigned int d)
534
- {
535
- #if defined(SIZEOF_INT)
536
- #if SIZEOF_INT == 2
537
- msgpack_pack_real_uint16(x, d);
538
- #elif SIZEOF_INT == 4
539
- msgpack_pack_real_uint32(x, d);
540
- #else
541
- msgpack_pack_real_uint64(x, d);
542
- #endif
543
-
544
- #elif defined(UINT_MAX)
545
- #if UINT_MAX == 0xffffU
546
- msgpack_pack_real_uint16(x, d);
547
- #elif UINT_MAX == 0xffffffffU
548
- msgpack_pack_real_uint32(x, d);
549
- #else
550
- msgpack_pack_real_uint64(x, d);
551
- #endif
552
-
553
- #else
554
- if(sizeof(unsigned int) == 2) {
555
- msgpack_pack_real_uint16(x, d);
556
- } else if(sizeof(unsigned int) == 4) {
557
- msgpack_pack_real_uint32(x, d);
558
- } else {
559
- msgpack_pack_real_uint64(x, d);
560
- }
561
- #endif
562
- }
563
-
564
- msgpack_pack_inline_func_cint(_unsigned_long)(msgpack_pack_user x, unsigned long d)
565
- {
566
- #if defined(SIZEOF_LONG)
567
- #if SIZEOF_LONG == 2
568
- msgpack_pack_real_uint16(x, d);
569
- #elif SIZEOF_LONG == 4
570
- msgpack_pack_real_uint32(x, d);
571
- #else
572
- msgpack_pack_real_uint64(x, d);
573
- #endif
574
-
575
- #elif defined(ULONG_MAX)
576
- #if ULONG_MAX == 0xffffUL
577
- msgpack_pack_real_uint16(x, d);
578
- #elif ULONG_MAX == 0xffffffffUL
579
- msgpack_pack_real_uint32(x, d);
580
- #else
581
- msgpack_pack_real_uint64(x, d);
582
- #endif
583
-
584
- #else
585
- if(sizeof(unsigned long) == 2) {
586
- msgpack_pack_real_uint16(x, d);
587
- } else if(sizeof(unsigned long) == 4) {
588
- msgpack_pack_real_uint32(x, d);
589
- } else {
590
- msgpack_pack_real_uint64(x, d);
591
- }
592
- #endif
593
- }
594
-
595
- msgpack_pack_inline_func_cint(_unsigned_long_long)(msgpack_pack_user x, unsigned long long d)
596
- {
597
- #if defined(SIZEOF_LONG_LONG)
598
- #if SIZEOF_LONG_LONG == 2
599
- msgpack_pack_real_uint16(x, d);
600
- #elif SIZEOF_LONG_LONG == 4
601
- msgpack_pack_real_uint32(x, d);
602
- #else
603
- msgpack_pack_real_uint64(x, d);
604
- #endif
605
-
606
- #elif defined(ULLONG_MAX)
607
- #if ULLONG_MAX == 0xffffUL
608
- msgpack_pack_real_uint16(x, d);
609
- #elif ULLONG_MAX == 0xffffffffUL
610
- msgpack_pack_real_uint32(x, d);
611
- #else
612
- msgpack_pack_real_uint64(x, d);
613
- #endif
614
-
615
- #else
616
- if(sizeof(unsigned long long) == 2) {
617
- msgpack_pack_real_uint16(x, d);
618
- } else if(sizeof(unsigned long long) == 4) {
619
- msgpack_pack_real_uint32(x, d);
620
- } else {
621
- msgpack_pack_real_uint64(x, d);
622
- }
623
- #endif
624
- }
625
-
626
- #undef msgpack_pack_inline_func_cint
627
- #endif
628
-
629
-
630
-
631
- /*
632
- * Float
633
- */
634
-
635
- msgpack_pack_inline_func(_float)(msgpack_pack_user x, float d)
636
- {
637
- union { float f; uint32_t i; } mem;
638
- mem.f = d;
639
- unsigned char buf[5];
640
- buf[0] = 0xca; _msgpack_store32(&buf[1], mem.i);
641
- msgpack_pack_append_buffer(x, buf, 5);
642
- }
643
-
644
- msgpack_pack_inline_func(_double)(msgpack_pack_user x, double d)
645
- {
646
- union { double f; uint64_t i; } mem;
647
- mem.f = d;
648
- unsigned char buf[9];
649
- buf[0] = 0xcb;
650
- #if defined(__arm__) && !(__ARM_EABI__) // arm-oabi
651
- // https://github.com/msgpack/msgpack-perl/pull/1
652
- mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL);
653
- #endif
654
- _msgpack_store64(&buf[1], mem.i);
655
- msgpack_pack_append_buffer(x, buf, 9);
656
- }
657
-
658
-
659
- /*
660
- * Nil
661
- */
662
-
663
- msgpack_pack_inline_func(_nil)(msgpack_pack_user x)
664
- {
665
- static const unsigned char d = 0xc0;
666
- msgpack_pack_append_buffer(x, &d, 1);
667
- }
668
-
669
-
670
- /*
671
- * Boolean
672
- */
673
-
674
- msgpack_pack_inline_func(_true)(msgpack_pack_user x)
675
- {
676
- static const unsigned char d = 0xc3;
677
- msgpack_pack_append_buffer(x, &d, 1);
678
- }
679
-
680
- msgpack_pack_inline_func(_false)(msgpack_pack_user x)
681
- {
682
- static const unsigned char d = 0xc2;
683
- msgpack_pack_append_buffer(x, &d, 1);
684
- }
685
-
686
-
687
- /*
688
- * Array
689
- */
690
-
691
- msgpack_pack_inline_func(_array)(msgpack_pack_user x, unsigned int n)
692
- {
693
- if(n < 16) {
694
- unsigned char d = 0x90 | n;
695
- msgpack_pack_append_buffer(x, &d, 1);
696
- } else if(n < 65536) {
697
- unsigned char buf[3];
698
- buf[0] = 0xdc; _msgpack_store16(&buf[1], (uint16_t)n);
699
- msgpack_pack_append_buffer(x, buf, 3);
700
- } else {
701
- unsigned char buf[5];
702
- buf[0] = 0xdd; _msgpack_store32(&buf[1], (uint32_t)n);
703
- msgpack_pack_append_buffer(x, buf, 5);
704
- }
705
- }
706
-
707
-
708
- /*
709
- * Map
710
- */
711
-
712
- msgpack_pack_inline_func(_map)(msgpack_pack_user x, unsigned int n)
713
- {
714
- if(n < 16) {
715
- unsigned char d = 0x80 | n;
716
- msgpack_pack_append_buffer(x, &TAKE8_8(d), 1);
717
- } else if(n < 65536) {
718
- unsigned char buf[3];
719
- buf[0] = 0xde; _msgpack_store16(&buf[1], (uint16_t)n);
720
- msgpack_pack_append_buffer(x, buf, 3);
721
- } else {
722
- unsigned char buf[5];
723
- buf[0] = 0xdf; _msgpack_store32(&buf[1], (uint32_t)n);
724
- msgpack_pack_append_buffer(x, buf, 5);
725
- }
726
- }
727
-
728
-
729
- /*
730
- * Raw
731
- */
732
-
733
- msgpack_pack_inline_func(_raw)(msgpack_pack_user x, size_t l)
734
- {
735
- if(l < 32) {
736
- unsigned char d = 0xa0 | (uint8_t)l;
737
- msgpack_pack_append_buffer(x, &TAKE8_8(d), 1);
738
- } else if(l < 65536) {
739
- unsigned char buf[3];
740
- buf[0] = 0xda; _msgpack_store16(&buf[1], (uint16_t)l);
741
- msgpack_pack_append_buffer(x, buf, 3);
742
- } else {
743
- unsigned char buf[5];
744
- buf[0] = 0xdb; _msgpack_store32(&buf[1], (uint32_t)l);
745
- msgpack_pack_append_buffer(x, buf, 5);
746
- }
747
- }
748
-
749
- msgpack_pack_inline_func(_raw_body)(msgpack_pack_user x, const void* b, size_t l)
750
- {
751
- msgpack_pack_append_buffer(x, (const unsigned char*)b, l);
752
- }
753
-
754
- #undef msgpack_pack_inline_func
755
- #undef msgpack_pack_user
756
- #undef msgpack_pack_append_buffer
757
-
758
- #undef TAKE8_8
759
- #undef TAKE8_16
760
- #undef TAKE8_32
761
- #undef TAKE8_64
762
-
763
- #undef msgpack_pack_real_uint8
764
- #undef msgpack_pack_real_uint16
765
- #undef msgpack_pack_real_uint32
766
- #undef msgpack_pack_real_uint64
767
- #undef msgpack_pack_real_int8
768
- #undef msgpack_pack_real_int16
769
- #undef msgpack_pack_real_int32
770
- #undef msgpack_pack_real_int64
771
-