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;
         |