static VALUE rb_struct_s_members_m(VALUE klass) { VALUE members = rb_struct_s_members(klass); return rb_ary_dup(members); }
static VALUE rb_struct_s_members_m(VALUE klass) { #if WITH_OBJC return rb_ary_dup(rb_struct_s_members(klass)); #else VALUE members, ary; VALUE *p, *pend; members = rb_struct_s_members(klass); ary = rb_ary_new2(RARRAY_LEN(members)); p = RARRAY_PTR(members); pend = p + RARRAY_LEN(members); while (p < pend) { rb_ary_push(ary, *p); p++; } return ary; #endif }
VALUE rb_struct_members(VALUE s) { VALUE members = rb_struct_s_members(rb_obj_class(s)); if (RSTRUCT_LEN(s) != RARRAY_LEN(members)) { rb_raise(rb_eTypeError, "struct size differs (%ld required %ld given)", RARRAY_LEN(members), RSTRUCT_LEN(s)); } return members; }
VALUE rb_struct_members(VALUE s) { VALUE members = rb_struct_s_members(rb_obj_class(s)); if (RSTRUCT(s)->len != RARRAY(members)->len) { rb_raise(rb_eTypeError, "struct size differs (%d required %d given)", RARRAY(members)->len, RSTRUCT(s)->len); } return members; }
/* * call-seq: * ProcTable.fields * * Returns an array of fields that each ProcTableStruct will contain. This * may be useful if you want to know in advance what fields are available * without having to perform at least one read of the /proc table. */ static VALUE pt_fields(VALUE klass){ VALUE v_array = rb_ary_new(); VALUE v_members = rb_struct_s_members(sProcStruct), v_member; long size = RARRAY_LEN(v_members); int i; for(i = 0; i < size; i++) { v_member = rb_funcall(rb_ary_entry(v_members, i), rb_intern("to_s"), 0); rb_ary_push(v_array, v_member); } return v_array; }
static VALUE rb_struct_s_members_m(VALUE klass) { VALUE members, ary; VALUE *p, *pend; members = rb_struct_s_members(klass); ary = rb_ary_new2(RARRAY_LEN(members)); p = RARRAY_PTR(members); pend = p + RARRAY_LEN(members); while (p < pend) { rb_ary_push(ary, *p); p++; } return ary; }
static VALUE rb_struct_s_members_m(VALUE klass) { VALUE members, ary; VALUE *p, *pend; members = rb_struct_s_members(klass); ary = rb_ary_new2(RARRAY(members)->len); p = RARRAY(members)->ptr; pend = p + RARRAY(members)->len; while (p < pend) { rb_ary_push(ary, rb_str_new2(rb_id2name(SYM2ID(*p)))); p++; } return ary; }
static VALUE struct_spec_rb_struct_s_members(VALUE self, VALUE klass) { return rb_ary_dup(rb_struct_s_members(klass)); }