static mrb_value Packer_write_array_header(mrb_state* mrb, mrb_value self) { mrb_int n; mrb_get_args(mrb, "i", &n); PACKER(mrb, self, pk); msgpack_packer_write_array_header(mrb, pk, n); return self; }
void msgpack_packer_write_array_value(msgpack_packer_t* pk, VALUE v) { /* actual return type of RARRAY_LEN is long */ unsigned long len = RARRAY_LEN(v); if(len > 0xffffffffUL) { rb_raise(rb_eArgError, "size of array is too long to pack: %lu bytes should be <= %lu", len, 0xffffffffUL); } unsigned int len32 = (unsigned int)len; msgpack_packer_write_array_header(pk, len32); unsigned int i; for(i=0; i < len32; ++i) { VALUE e = rb_ary_entry(v, i); msgpack_packer_write_value(pk, e); } }
static VALUE Packer_write_array_header(VALUE self, VALUE n) { PACKER(self, pk); msgpack_packer_write_array_header(pk, NUM2UINT(n)); return self; }