| | 653 | rb_objc_rval_to_ocval(VALUE rval, const char *octype, void **ocval); |
| | 654 | |
| | 655 | static void |
| | 656 | rb_objc_ary_to_ocval(VALUE rval, const char *octype, void **ocval) |
| | 657 | { |
| | 658 | size_t aryCount = 0; |
| | 659 | while (isdigit(*octype)) |
| | 660 | aryCount = aryCount*10 + (*(octype++) - '0'); |
| | 661 | |
| | 662 | size_t offset = rb_objc_octype_size(octype); |
| | 663 | |
| | 664 | if (aryCount != RARRAY_LEN(rval)) |
| | 665 | rb_raise(rb_eArgError, "can't convert Ruby array `%s' to " \ |
| | 666 | "Objective-C value of type `%s' because of length mismatch", |
| | 667 | RSTRING_PTR(rb_inspect(rval)), octype); |
| | 668 | |
| | 669 | void *oc = ocval; |
| | 670 | |
| | 671 | size_t i = 0; |
| | 672 | for (i = 0; i < aryCount; ++i) |
| | 673 | { |
| | 674 | rb_objc_rval_to_ocval(RARRAY_AT(rval, i), octype, oc); |
| | 675 | oc += offset; |
| | 676 | } |
| | 677 | } |
| | 678 | |
| | 679 | static void |
| | 890 | rb_objc_ocval_to_ary(void **ocval, const char *octype, VALUE *rbval) |
| | 891 | { |
| | 892 | size_t aryCount = 0; |
| | 893 | while(isdigit(*octype)) |
| | 894 | aryCount = aryCount*10 + (*(octype++) - '0'); |
| | 895 | |
| | 896 | *rbval = rb_ary_new2(aryCount); |
| | 897 | |
| | 898 | size_t offset = rb_objc_octype_size(octype); |
| | 899 | |
| | 900 | void *oc = ocval; |
| | 901 | size_t i = 0; |
| | 902 | for (i = 0; i < aryCount; ++i) |
| | 903 | { |
| | 904 | VALUE val = 0; |
| | 905 | rb_objc_ocval_to_rval(oc, octype, &val); |
| | 906 | rb_ary_insert(*rbval, i, val); |
| | 907 | oc += offset; |
| | 908 | } |
| | 909 | } |
| | 910 | |
| | 911 | static void |