msgpack 0.2.2 → 0.3.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/AUTHORS +1 -0
- data/ChangeLog +0 -0
- data/README +29 -0
- data/Rakefile +133 -4
- data/ext/pack.c +4 -4
- data/ext/pack.h +2 -2
- data/ext/rbinit.c +1 -1
- data/ext/unpack.c +94 -78
- data/ext/unpack.h +2 -2
- data/msgpack/pack_define.h +1 -1
- data/msgpack/pack_template.h +40 -38
- data/msgpack/unpack_define.h +1 -1
- data/msgpack/unpack_template.h +49 -48
- data/test/msgpack_test.rb +150 -0
- data/test/test_helper.rb +3 -0
- metadata +33 -43
- data/License.txt +0 -13
- data/Manifest.txt +0 -23
- data/README.txt +0 -23
- data/config/hoe.rb +0 -75
- data/config/requirements.rb +0 -15
- data/lib/msgpack/version.rb +0 -9
- data/script/console +0 -10
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/setup.rb +0 -1585
- data/tasks/deployment.rake +0 -34
- data/tasks/environment.rake +0 -7
data/ext/unpack.h
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
|
-
* MessagePack unpacking routine
|
2
|
+
* MessagePack for Ruby unpacking routine
|
3
3
|
*
|
4
|
-
* Copyright (C) 2008 FURUHASHI Sadayuki
|
4
|
+
* Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
5
5
|
*
|
6
6
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
7
7
|
* you may not use this file except in compliance with the License.
|
data/msgpack/pack_define.h
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* MessagePack unpacking routine template
|
3
3
|
*
|
4
|
-
* Copyright (C) 2008 FURUHASHI Sadayuki
|
4
|
+
* Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
5
5
|
*
|
6
6
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
7
7
|
* you may not use this file except in compliance with the License.
|
data/msgpack/pack_template.h
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* MessagePack packing routine template
|
3
3
|
*
|
4
|
-
* Copyright (C) 2008 FURUHASHI Sadayuki
|
4
|
+
* Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
5
5
|
*
|
6
6
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
7
7
|
* you may not use this file except in compliance with the License.
|
@@ -278,49 +278,49 @@ do { \
|
|
278
278
|
|
279
279
|
#ifdef msgpack_pack_inline_func_fastint
|
280
280
|
|
281
|
-
msgpack_pack_inline_func_fastint(
|
281
|
+
msgpack_pack_inline_func_fastint(_uint8)(msgpack_pack_user x, uint8_t d)
|
282
282
|
{
|
283
283
|
const unsigned char buf[2] = {0xcc, d};
|
284
284
|
msgpack_pack_append_buffer(x, buf, 2);
|
285
285
|
}
|
286
286
|
|
287
|
-
msgpack_pack_inline_func_fastint(
|
287
|
+
msgpack_pack_inline_func_fastint(_uint16)(msgpack_pack_user x, uint16_t d)
|
288
288
|
{
|
289
289
|
const unsigned char buf[3] = {0xcd, STORE_BE16(d)};
|
290
290
|
msgpack_pack_append_buffer(x, buf, 3);
|
291
291
|
}
|
292
292
|
|
293
|
-
msgpack_pack_inline_func_fastint(
|
293
|
+
msgpack_pack_inline_func_fastint(_uint32)(msgpack_pack_user x, uint32_t d)
|
294
294
|
{
|
295
295
|
const unsigned char buf[5] = {0xce, STORE_BE32(d)};
|
296
296
|
msgpack_pack_append_buffer(x, buf, 5);
|
297
297
|
}
|
298
298
|
|
299
|
-
msgpack_pack_inline_func_fastint(
|
299
|
+
msgpack_pack_inline_func_fastint(_uint64)(msgpack_pack_user x, uint64_t d)
|
300
300
|
{
|
301
301
|
const unsigned char buf[9] = {0xcf, STORE_BE64(d)};
|
302
302
|
msgpack_pack_append_buffer(x, buf, 9);
|
303
303
|
}
|
304
304
|
|
305
|
-
msgpack_pack_inline_func_fastint(
|
305
|
+
msgpack_pack_inline_func_fastint(_int8)(msgpack_pack_user x, int8_t d)
|
306
306
|
{
|
307
307
|
const unsigned char buf[2] = {0xd0, d};
|
308
308
|
msgpack_pack_append_buffer(x, buf, 2);
|
309
309
|
}
|
310
310
|
|
311
|
-
msgpack_pack_inline_func_fastint(
|
311
|
+
msgpack_pack_inline_func_fastint(_int16)(msgpack_pack_user x, int16_t d)
|
312
312
|
{
|
313
313
|
const unsigned char buf[3] = {0xd1, STORE_BE16(d)};
|
314
314
|
msgpack_pack_append_buffer(x, buf, 3);
|
315
315
|
}
|
316
316
|
|
317
|
-
msgpack_pack_inline_func_fastint(
|
317
|
+
msgpack_pack_inline_func_fastint(_int32)(msgpack_pack_user x, int32_t d)
|
318
318
|
{
|
319
319
|
const unsigned char buf[5] = {0xd2, STORE_BE32(d)};
|
320
320
|
msgpack_pack_append_buffer(x, buf, 5);
|
321
321
|
}
|
322
322
|
|
323
|
-
msgpack_pack_inline_func_fastint(
|
323
|
+
msgpack_pack_inline_func_fastint(_int64)(msgpack_pack_user x, int64_t d)
|
324
324
|
{
|
325
325
|
const unsigned char buf[9] = {0xd3, STORE_BE64(d)};
|
326
326
|
msgpack_pack_append_buffer(x, buf, 9);
|
@@ -330,42 +330,42 @@ msgpack_pack_inline_func_fastint(int64)(msgpack_pack_user x, int64_t d)
|
|
330
330
|
#endif
|
331
331
|
|
332
332
|
|
333
|
-
msgpack_pack_inline_func(
|
333
|
+
msgpack_pack_inline_func(_uint8)(msgpack_pack_user x, uint8_t d)
|
334
334
|
{
|
335
335
|
msgpack_pack_real_uint8(x, d);
|
336
336
|
}
|
337
337
|
|
338
|
-
msgpack_pack_inline_func(
|
338
|
+
msgpack_pack_inline_func(_uint16)(msgpack_pack_user x, uint16_t d)
|
339
339
|
{
|
340
340
|
msgpack_pack_real_uint16(x, d);
|
341
341
|
}
|
342
342
|
|
343
|
-
msgpack_pack_inline_func(
|
343
|
+
msgpack_pack_inline_func(_uint32)(msgpack_pack_user x, uint32_t d)
|
344
344
|
{
|
345
345
|
msgpack_pack_real_uint32(x, d);
|
346
346
|
}
|
347
347
|
|
348
|
-
msgpack_pack_inline_func(
|
348
|
+
msgpack_pack_inline_func(_uint64)(msgpack_pack_user x, uint64_t d)
|
349
349
|
{
|
350
350
|
msgpack_pack_real_uint64(x, d);
|
351
351
|
}
|
352
352
|
|
353
|
-
msgpack_pack_inline_func(
|
353
|
+
msgpack_pack_inline_func(_int8)(msgpack_pack_user x, int8_t d)
|
354
354
|
{
|
355
355
|
msgpack_pack_real_int8(x, d);
|
356
356
|
}
|
357
357
|
|
358
|
-
msgpack_pack_inline_func(
|
358
|
+
msgpack_pack_inline_func(_int16)(msgpack_pack_user x, int16_t d)
|
359
359
|
{
|
360
360
|
msgpack_pack_real_int16(x, d);
|
361
361
|
}
|
362
362
|
|
363
|
-
msgpack_pack_inline_func(
|
363
|
+
msgpack_pack_inline_func(_int32)(msgpack_pack_user x, int32_t d)
|
364
364
|
{
|
365
365
|
msgpack_pack_real_int32(x, d);
|
366
366
|
}
|
367
367
|
|
368
|
-
msgpack_pack_inline_func(
|
368
|
+
msgpack_pack_inline_func(_int64)(msgpack_pack_user x, int64_t d)
|
369
369
|
{
|
370
370
|
msgpack_pack_real_int64(x, d);
|
371
371
|
}
|
@@ -373,7 +373,7 @@ msgpack_pack_inline_func(int64)(msgpack_pack_user x, int64_t d)
|
|
373
373
|
|
374
374
|
#ifdef msgpack_pack_inline_func_cint
|
375
375
|
|
376
|
-
msgpack_pack_inline_func_cint(
|
376
|
+
msgpack_pack_inline_func_cint(_short)(msgpack_pack_user x, short d)
|
377
377
|
{
|
378
378
|
#if defined(SIZEOF_SHORT) || defined(SHRT_MAX)
|
379
379
|
#if SIZEOF_SHORT == 2 || SHRT_MAX == 0x7fff
|
@@ -394,7 +394,7 @@ if(sizeof(short) == 2) {
|
|
394
394
|
#endif
|
395
395
|
}
|
396
396
|
|
397
|
-
msgpack_pack_inline_func_cint(
|
397
|
+
msgpack_pack_inline_func_cint(_int)(msgpack_pack_user x, int d)
|
398
398
|
{
|
399
399
|
#if defined(SIZEOF_INT) || defined(INT_MAX)
|
400
400
|
#if SIZEOF_INT == 2 || INT_MAX == 0x7fff
|
@@ -415,7 +415,7 @@ if(sizeof(int) == 2) {
|
|
415
415
|
#endif
|
416
416
|
}
|
417
417
|
|
418
|
-
msgpack_pack_inline_func_cint(
|
418
|
+
msgpack_pack_inline_func_cint(_long)(msgpack_pack_user x, long d)
|
419
419
|
{
|
420
420
|
#if defined(SIZEOF_LONG) || defined(LONG_MAX)
|
421
421
|
#if SIZEOF_LONG == 2 || LONG_MAX == 0x7fffL
|
@@ -436,7 +436,7 @@ if(sizeof(long) == 2) {
|
|
436
436
|
#endif
|
437
437
|
}
|
438
438
|
|
439
|
-
msgpack_pack_inline_func_cint(
|
439
|
+
msgpack_pack_inline_func_cint(_long_long)(msgpack_pack_user x, long long d)
|
440
440
|
{
|
441
441
|
#if defined(SIZEOF_LONG_LONG) || defined(LLONG_MAX)
|
442
442
|
#if SIZEOF_LONG_LONG == 2 || LLONG_MAX == 0x7fffL
|
@@ -457,7 +457,7 @@ if(sizeof(long long) == 2) {
|
|
457
457
|
#endif
|
458
458
|
}
|
459
459
|
|
460
|
-
msgpack_pack_inline_func_cint(
|
460
|
+
msgpack_pack_inline_func_cint(_unsigned_short)(msgpack_pack_user x, unsigned short d)
|
461
461
|
{
|
462
462
|
#if defined(SIZEOF_SHORT) || defined(USHRT_MAX)
|
463
463
|
#if SIZEOF_SHORT == 2 || USHRT_MAX == 0xffffU
|
@@ -478,7 +478,7 @@ if(sizeof(unsigned short) == 2) {
|
|
478
478
|
#endif
|
479
479
|
}
|
480
480
|
|
481
|
-
msgpack_pack_inline_func_cint(
|
481
|
+
msgpack_pack_inline_func_cint(_unsigned_int)(msgpack_pack_user x, unsigned int d)
|
482
482
|
{
|
483
483
|
#if defined(SIZEOF_INT) || defined(UINT_MAX)
|
484
484
|
#if SIZEOF_INT == 2 || UINT_MAX == 0xffffU
|
@@ -499,7 +499,7 @@ if(sizeof(unsigned int) == 2) {
|
|
499
499
|
#endif
|
500
500
|
}
|
501
501
|
|
502
|
-
msgpack_pack_inline_func_cint(
|
502
|
+
msgpack_pack_inline_func_cint(_unsigned_long)(msgpack_pack_user x, unsigned long d)
|
503
503
|
{
|
504
504
|
#if defined(SIZEOF_LONG) || defined(ULONG_MAX)
|
505
505
|
#if SIZEOF_LONG == 2 || ULONG_MAX == 0xffffUL
|
@@ -520,7 +520,7 @@ if(sizeof(unsigned int) == 2) {
|
|
520
520
|
#endif
|
521
521
|
}
|
522
522
|
|
523
|
-
msgpack_pack_inline_func_cint(
|
523
|
+
msgpack_pack_inline_func_cint(_unsigned_long_long)(msgpack_pack_user x, unsigned long long d)
|
524
524
|
{
|
525
525
|
#if defined(SIZEOF_LONG_LONG) || defined(ULLONG_MAX)
|
526
526
|
#if SIZEOF_LONG_LONG == 2 || ULLONG_MAX == 0xffffUL
|
@@ -550,17 +550,19 @@ if(sizeof(unsigned long long) == 2) {
|
|
550
550
|
* Float
|
551
551
|
*/
|
552
552
|
|
553
|
-
msgpack_pack_inline_func(
|
553
|
+
msgpack_pack_inline_func(_float)(msgpack_pack_user x, float d)
|
554
554
|
{
|
555
|
-
|
556
|
-
|
555
|
+
union { char buf[4]; uint32_t num; } f;
|
556
|
+
*((float*)&f.buf) = d; // FIXME
|
557
|
+
const unsigned char buf[5] = {0xca, STORE_BE32(f.num)};
|
557
558
|
msgpack_pack_append_buffer(x, buf, 5);
|
558
559
|
}
|
559
560
|
|
560
|
-
msgpack_pack_inline_func(
|
561
|
+
msgpack_pack_inline_func(_double)(msgpack_pack_user x, double d)
|
561
562
|
{
|
562
|
-
|
563
|
-
|
563
|
+
union { char buf[8]; uint64_t num; } f;
|
564
|
+
*((double*)&f.buf) = d; // FIXME
|
565
|
+
const unsigned char buf[9] = {0xcb, STORE_BE64(f.num)};
|
564
566
|
msgpack_pack_append_buffer(x, buf, 9);
|
565
567
|
}
|
566
568
|
|
@@ -569,7 +571,7 @@ msgpack_pack_inline_func(double)(msgpack_pack_user x, double d)
|
|
569
571
|
* Nil
|
570
572
|
*/
|
571
573
|
|
572
|
-
msgpack_pack_inline_func(
|
574
|
+
msgpack_pack_inline_func(_nil)(msgpack_pack_user x)
|
573
575
|
{
|
574
576
|
static const unsigned char d = 0xc0;
|
575
577
|
msgpack_pack_append_buffer(x, &d, 1);
|
@@ -580,13 +582,13 @@ msgpack_pack_inline_func(nil)(msgpack_pack_user x)
|
|
580
582
|
* Boolean
|
581
583
|
*/
|
582
584
|
|
583
|
-
msgpack_pack_inline_func(
|
585
|
+
msgpack_pack_inline_func(_true)(msgpack_pack_user x)
|
584
586
|
{
|
585
587
|
static const unsigned char d = 0xc3;
|
586
588
|
msgpack_pack_append_buffer(x, &d, 1);
|
587
589
|
}
|
588
590
|
|
589
|
-
msgpack_pack_inline_func(
|
591
|
+
msgpack_pack_inline_func(_false)(msgpack_pack_user x)
|
590
592
|
{
|
591
593
|
static const unsigned char d = 0xc2;
|
592
594
|
msgpack_pack_append_buffer(x, &d, 1);
|
@@ -597,7 +599,7 @@ msgpack_pack_inline_func(false)(msgpack_pack_user x)
|
|
597
599
|
* Array
|
598
600
|
*/
|
599
601
|
|
600
|
-
msgpack_pack_inline_func(
|
602
|
+
msgpack_pack_inline_func(_array)(msgpack_pack_user x, unsigned int n)
|
601
603
|
{
|
602
604
|
if(n < 16) {
|
603
605
|
unsigned char d = 0x90 | n;
|
@@ -618,7 +620,7 @@ msgpack_pack_inline_func(array)(msgpack_pack_user x, unsigned int n)
|
|
618
620
|
* Map
|
619
621
|
*/
|
620
622
|
|
621
|
-
msgpack_pack_inline_func(
|
623
|
+
msgpack_pack_inline_func(_map)(msgpack_pack_user x, unsigned int n)
|
622
624
|
{
|
623
625
|
if(n < 16) {
|
624
626
|
unsigned char d = 0x80 | n;
|
@@ -639,7 +641,7 @@ msgpack_pack_inline_func(map)(msgpack_pack_user x, unsigned int n)
|
|
639
641
|
* Raw
|
640
642
|
*/
|
641
643
|
|
642
|
-
msgpack_pack_inline_func(
|
644
|
+
msgpack_pack_inline_func(_raw)(msgpack_pack_user x, size_t l)
|
643
645
|
{
|
644
646
|
if(l < 32) {
|
645
647
|
unsigned char d = 0xa0 | l;
|
@@ -655,7 +657,7 @@ msgpack_pack_inline_func(raw)(msgpack_pack_user x, size_t l)
|
|
655
657
|
}
|
656
658
|
}
|
657
659
|
|
658
|
-
msgpack_pack_inline_func(
|
660
|
+
msgpack_pack_inline_func(_raw_body)(msgpack_pack_user x, const void* b, size_t l)
|
659
661
|
{
|
660
662
|
msgpack_pack_append_buffer(x, (const unsigned char*)b, l);
|
661
663
|
}
|
data/msgpack/unpack_define.h
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* MessagePack unpacking routine template
|
3
3
|
*
|
4
|
-
* Copyright (C) 2008 FURUHASHI Sadayuki
|
4
|
+
* Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
5
5
|
*
|
6
6
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
7
7
|
* you may not use this file except in compliance with the License.
|
data/msgpack/unpack_template.h
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* MessagePack unpacking routine template
|
3
3
|
*
|
4
|
-
* Copyright (C) 2008 FURUHASHI Sadayuki
|
4
|
+
* Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
5
5
|
*
|
6
6
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
7
7
|
* you may not use this file except in compliance with the License.
|
@@ -41,38 +41,37 @@
|
|
41
41
|
#endif
|
42
42
|
|
43
43
|
|
44
|
-
msgpack_unpack_struct_decl(
|
44
|
+
msgpack_unpack_struct_decl(_stack) {
|
45
45
|
msgpack_unpack_object obj;
|
46
46
|
size_t count;
|
47
47
|
unsigned int ct;
|
48
48
|
msgpack_unpack_object map_key;
|
49
49
|
};
|
50
50
|
|
51
|
-
msgpack_unpack_struct_decl(
|
52
|
-
msgpack_unpack_user user;
|
51
|
+
msgpack_unpack_struct_decl(_context) {
|
52
|
+
msgpack_unpack_user user;
|
53
53
|
unsigned int cs;
|
54
54
|
unsigned int trail;
|
55
55
|
unsigned int top;
|
56
|
-
msgpack_unpack_struct(
|
56
|
+
msgpack_unpack_struct(_stack) stack[MSGPACK_MAX_STACK_SIZE];
|
57
57
|
};
|
58
58
|
|
59
59
|
|
60
|
-
msgpack_unpack_func(void,
|
60
|
+
msgpack_unpack_func(void, _init)(msgpack_unpack_struct(_context)* ctx)
|
61
61
|
{
|
62
|
-
/*memset(ctx, 0, sizeof( msgpack_unpack_struct(context) )); FIXME needed? */
|
63
62
|
ctx->cs = CS_HEADER;
|
64
63
|
ctx->trail = 0;
|
65
64
|
ctx->top = 0;
|
66
|
-
ctx->stack[0].obj = msgpack_unpack_callback(
|
65
|
+
ctx->stack[0].obj = msgpack_unpack_callback(_root)(&ctx->user);
|
67
66
|
}
|
68
67
|
|
69
|
-
msgpack_unpack_func(msgpack_unpack_object,
|
68
|
+
msgpack_unpack_func(msgpack_unpack_object, _data)(msgpack_unpack_struct(_context)* ctx)
|
70
69
|
{
|
71
|
-
return (
|
70
|
+
return (ctx)->stack[0].obj;
|
72
71
|
}
|
73
72
|
|
74
73
|
|
75
|
-
msgpack_unpack_func(int,
|
74
|
+
msgpack_unpack_func(int, _execute)(msgpack_unpack_struct(_context)* ctx, const char* data, size_t len, size_t* off)
|
76
75
|
{
|
77
76
|
assert(len >= *off);
|
78
77
|
|
@@ -83,25 +82,23 @@ msgpack_unpack_func(int, execute)(msgpack_unpack_struct(context)* ctx, const cha
|
|
83
82
|
unsigned int trail = ctx->trail;
|
84
83
|
unsigned int cs = ctx->cs;
|
85
84
|
unsigned int top = ctx->top;
|
86
|
-
msgpack_unpack_struct(
|
85
|
+
msgpack_unpack_struct(_stack)* stack = ctx->stack;
|
87
86
|
msgpack_unpack_user* user = &ctx->user;
|
88
87
|
|
89
88
|
msgpack_unpack_object obj;
|
90
|
-
msgpack_unpack_struct(
|
89
|
+
msgpack_unpack_struct(_stack)* c = NULL;
|
91
90
|
|
92
91
|
int ret;
|
93
92
|
|
94
93
|
#define push_simple_value(func) \
|
95
|
-
|
96
|
-
/*printf("obj %d\n",obj);*/ \
|
94
|
+
if(msgpack_unpack_callback(func)(user, &obj) < 0) { goto _failed; } \
|
97
95
|
goto _push
|
98
96
|
#define push_fixed_value(func, arg) \
|
99
|
-
|
100
|
-
/*printf("obj %d\n",obj);*/ \
|
97
|
+
if(msgpack_unpack_callback(func)(user, arg, &obj) < 0) { goto _failed; } \
|
101
98
|
goto _push
|
102
99
|
#define push_variable_value(func, base, pos, len) \
|
103
|
-
|
104
|
-
|
100
|
+
if(msgpack_unpack_callback(func)(user, \
|
101
|
+
(const char*)base, (const char*)pos, len, &obj) < 0) { goto _failed; } \
|
105
102
|
goto _push
|
106
103
|
|
107
104
|
#define again_fixed_trail(_cs, trail_len) \
|
@@ -115,7 +112,7 @@ msgpack_unpack_func(int, execute)(msgpack_unpack_struct(context)* ctx, const cha
|
|
115
112
|
goto _fixed_trail_again
|
116
113
|
|
117
114
|
#define start_container(func, count_, ct_) \
|
118
|
-
stack[top].obj
|
115
|
+
if(msgpack_unpack_callback(func)(user, count_, &stack[top].obj) < 0) { goto _failed; } \
|
119
116
|
if((count_) == 0) { obj = stack[top].obj; goto _push; } \
|
120
117
|
if(top >= MSGPACK_MAX_STACK_SIZE) { goto _failed; } \
|
121
118
|
stack[top].ct = ct_; \
|
@@ -139,19 +136,19 @@ msgpack_unpack_func(int, execute)(msgpack_unpack_struct(context)* ctx, const cha
|
|
139
136
|
case CS_HEADER:
|
140
137
|
switch(*p) {
|
141
138
|
case 0x00 ... 0x7f: // Positive Fixnum
|
142
|
-
push_fixed_value(
|
139
|
+
push_fixed_value(_uint8, *(uint8_t*)p);
|
143
140
|
case 0xe0 ... 0xff: // Negative Fixnum
|
144
|
-
push_fixed_value(
|
141
|
+
push_fixed_value(_int8, *(int8_t*)p);
|
145
142
|
case 0xc0 ... 0xdf: // Variable
|
146
143
|
switch(*p) {
|
147
144
|
case 0xc0: // nil
|
148
|
-
push_simple_value(
|
145
|
+
push_simple_value(_nil);
|
149
146
|
//case 0xc1: // string
|
150
147
|
// again_terminal_trail(NEXT_CS(p), p+1);
|
151
148
|
case 0xc2: // false
|
152
|
-
push_simple_value(
|
149
|
+
push_simple_value(_false);
|
153
150
|
case 0xc3: // true
|
154
|
-
push_simple_value(
|
151
|
+
push_simple_value(_true);
|
155
152
|
//case 0xc4:
|
156
153
|
//case 0xc5:
|
157
154
|
//case 0xc6:
|
@@ -188,9 +185,9 @@ msgpack_unpack_func(int, execute)(msgpack_unpack_struct(context)* ctx, const cha
|
|
188
185
|
case 0xa0 ... 0xbf: // FixRaw
|
189
186
|
again_fixed_trail_if_zero(ACS_RAW_VALUE, ((unsigned int)*p & 0x1f), _raw_zero);
|
190
187
|
case 0x90 ... 0x9f: // FixArray
|
191
|
-
start_container(
|
188
|
+
start_container(_array, ((unsigned int)*p) & 0x0f, CT_ARRAY_ITEM);
|
192
189
|
case 0x80 ... 0x8f: // FixMap
|
193
|
-
start_container(
|
190
|
+
start_container(_map, ((unsigned int)*p) & 0x0f, CT_MAP_KEY);
|
194
191
|
|
195
192
|
default:
|
196
193
|
goto _failed;
|
@@ -208,28 +205,30 @@ msgpack_unpack_func(int, execute)(msgpack_unpack_struct(context)* ctx, const cha
|
|
208
205
|
//case CS_
|
209
206
|
//case CS_
|
210
207
|
case CS_FLOAT: {
|
211
|
-
uint32_t
|
212
|
-
|
208
|
+
union { uint32_t num; char buf[4]; } f;
|
209
|
+
f.num = PTR_CAST_32(n); // FIXME
|
210
|
+
push_fixed_value(_float, *((float*)f.buf)); }
|
213
211
|
case CS_DOUBLE: {
|
214
|
-
uint64_t
|
215
|
-
|
212
|
+
union { uint64_t num; char buf[8]; } f;
|
213
|
+
f.num = PTR_CAST_64(n); // FIXME
|
214
|
+
push_fixed_value(_double, *((double*)f.buf)); }
|
216
215
|
case CS_UINT_8:
|
217
|
-
push_fixed_value(
|
216
|
+
push_fixed_value(_uint8, (uint8_t)PTR_CAST_8(n));
|
218
217
|
case CS_UINT_16:
|
219
|
-
push_fixed_value(
|
218
|
+
push_fixed_value(_uint16, (uint16_t)PTR_CAST_16(n));
|
220
219
|
case CS_UINT_32:
|
221
|
-
push_fixed_value(
|
220
|
+
push_fixed_value(_uint32, (uint32_t)PTR_CAST_32(n));
|
222
221
|
case CS_UINT_64:
|
223
|
-
push_fixed_value(
|
222
|
+
push_fixed_value(_uint64, (uint64_t)PTR_CAST_64(n));
|
224
223
|
|
225
224
|
case CS_INT_8:
|
226
|
-
push_fixed_value(
|
225
|
+
push_fixed_value(_int8, (int8_t)PTR_CAST_8(n));
|
227
226
|
case CS_INT_16:
|
228
|
-
push_fixed_value(
|
227
|
+
push_fixed_value(_int16, (int16_t)PTR_CAST_16(n));
|
229
228
|
case CS_INT_32:
|
230
|
-
push_fixed_value(
|
229
|
+
push_fixed_value(_int32, (int32_t)PTR_CAST_32(n));
|
231
230
|
case CS_INT_64:
|
232
|
-
push_fixed_value(
|
231
|
+
push_fixed_value(_int64, (int64_t)PTR_CAST_64(n));
|
233
232
|
|
234
233
|
//case CS_
|
235
234
|
//case CS_
|
@@ -240,7 +239,7 @@ msgpack_unpack_func(int, execute)(msgpack_unpack_struct(context)* ctx, const cha
|
|
240
239
|
//case ACS_BIG_INT_VALUE:
|
241
240
|
//_big_int_zero:
|
242
241
|
// // FIXME
|
243
|
-
// push_variable_value(
|
242
|
+
// push_variable_value(_big_int, data, n, trail);
|
244
243
|
|
245
244
|
//case CS_BIG_FLOAT_16:
|
246
245
|
// again_fixed_trail_if_zero(ACS_BIG_FLOAT_VALUE, (uint16_t)PTR_CAST_16(n), _big_float_zero);
|
@@ -249,7 +248,7 @@ msgpack_unpack_func(int, execute)(msgpack_unpack_struct(context)* ctx, const cha
|
|
249
248
|
//case ACS_BIG_FLOAT_VALUE:
|
250
249
|
//_big_float_zero:
|
251
250
|
// // FIXME
|
252
|
-
// push_variable_value(
|
251
|
+
// push_variable_value(_big_float, data, n, trail);
|
253
252
|
|
254
253
|
case CS_RAW_16:
|
255
254
|
again_fixed_trail_if_zero(ACS_RAW_VALUE, (uint16_t)PTR_CAST_16(n), _raw_zero);
|
@@ -257,17 +256,19 @@ msgpack_unpack_func(int, execute)(msgpack_unpack_struct(context)* ctx, const cha
|
|
257
256
|
again_fixed_trail_if_zero(ACS_RAW_VALUE, (uint32_t)PTR_CAST_32(n), _raw_zero);
|
258
257
|
case ACS_RAW_VALUE:
|
259
258
|
_raw_zero:
|
260
|
-
push_variable_value(
|
259
|
+
push_variable_value(_raw, data, n, trail);
|
261
260
|
|
262
261
|
case CS_ARRAY_16:
|
263
|
-
start_container(
|
262
|
+
start_container(_array, (uint16_t)PTR_CAST_16(n), CT_ARRAY_ITEM);
|
264
263
|
case CS_ARRAY_32:
|
265
|
-
|
264
|
+
/* FIXME security guard */
|
265
|
+
start_container(_array, (uint32_t)PTR_CAST_32(n), CT_ARRAY_ITEM);
|
266
266
|
|
267
267
|
case CS_MAP_16:
|
268
|
-
start_container(
|
268
|
+
start_container(_map, (uint16_t)PTR_CAST_16(n), CT_MAP_KEY);
|
269
269
|
case CS_MAP_32:
|
270
|
-
|
270
|
+
/* FIXME security guard */
|
271
|
+
start_container(_map, (uint32_t)PTR_CAST_32(n), CT_MAP_KEY);
|
271
272
|
|
272
273
|
default:
|
273
274
|
goto _failed;
|
@@ -279,7 +280,7 @@ _push:
|
|
279
280
|
c = &stack[top-1];
|
280
281
|
switch(c->ct) {
|
281
282
|
case CT_ARRAY_ITEM:
|
282
|
-
msgpack_unpack_callback(
|
283
|
+
if(msgpack_unpack_callback(_array_item)(user, &c->obj, obj) < 0) { goto _failed; }
|
283
284
|
if(--c->count == 0) {
|
284
285
|
obj = c->obj;
|
285
286
|
--top;
|
@@ -292,7 +293,7 @@ _push:
|
|
292
293
|
c->ct = CT_MAP_VALUE;
|
293
294
|
goto _header_again;
|
294
295
|
case CT_MAP_VALUE:
|
295
|
-
msgpack_unpack_callback(
|
296
|
+
if(msgpack_unpack_callback(_map_item)(user, &c->obj, c->map_key, obj) < 0) { goto _failed; }
|
296
297
|
if(--c->count == 0) {
|
297
298
|
obj = c->obj;
|
298
299
|
--top;
|