Array

最終更新:

tmtbnc

- view
管理者のみ編集可

Array


Object > Array

Ruby C
Array rb_cArray
Array.new rb_ary_new()
Array.new(size) rb_ary_new2(len)
rb_ary_new3(n, va_alist)
rb_ary_new4(n, elts)
Array#[] rb_ary_aref(argc, argv, ary)
Array#[](nth) rb_ary_entry(ary, long offset)
Array#[]=(nth, val) rb_ary_store(ary, long idx, val)
Array#+ rb_ary_plus(x, y)
Array#<< rb_ary_push(ary, item)
Array#<=> rb_ary_cmp(ary1, ary2)
Array#assoc rb_ary_assoc(ary, key)
Array#at rb_ary_entry(ary, long offset)
Array#clear rb_ary_clear(ary)
Array#concat rb_ary_concat(x, y)
Array#delete rb_ary_delete(ary, item)
Array#delete_at rb_ary_delete_at(ary, long pos)
Array#dup rb_ary_dup(ary)
Array#each rb_ary_each(ary)
Array#freeze rb_ary_freeze(ary)
Array#include? rb_ary_includes(ary, item)
Array#join rb_ary_join(ary, sep)
Array#pop rb_ary_pop(ary)
Array#rassoc rb_ary_rassoc(ary, value)
Array#reverse! rb_ary_reverse(ary)
Array#shift rb_ary_shift(ary)
Array#slice rb_ary_aref(argc, argv, ary)
Array#sort rb_ary_sort(ary)
Array#sort! rb_ary_sort_bang(ary)
Array#to_s rb_ary_to_s(ary)
Array#unshift rb_ary_unshift(ary, item)
obj.to_ary rb_ary_to_ary(obj)
rb_values_at(obj, olen, argc, argv, func)

static VALUE
ary_alloc(klass)
    VALUE klass;
{
    NEWOBJ(ary, struct RArray);
    OBJSETUP(ary, klass, T_ARRAY);
 
    ary->len = 0;
    ary->ptr = 0;
    ary->aux.capa = 0;
 
    return (VALUE)ary;
}
 

static VALUE
ary_new(klass, len)
    VALUE klass;
    long len;
{
    VALUE ary = ary_alloc(klass);
 
    if (len < 0) {
	rb_raise(rb_eArgError, "negative array size (or size too big)");
    }
    if (len > ARY_MAX_SIZE) {
	rb_raise(rb_eArgError, "array size too big");
    }
    if (len == 0) len++;
    RARRAY(ary)->ptr = ALLOC_N(VALUE, len);
    RARRAY(ary)->aux.capa = len;
 
    return ary;
}
 

VALUE
rb_ary_new2(len)
    long len;
{
    return ary_new(rb_cArray, len);
}
 

VALUE
rb_ary_new()
{
    return rb_ary_new2(ARY_DEFAULT_SIZE);
}
 

VALUE
#ifdef HAVE_STDARG_PROTOTYPES
rb_ary_new3(long n, ...)
#else
rb_ary_new3(n, va_alist)
    long n;
    va_dcl
#endif
{
    va_list ar;
    VALUE ary;
    long i;
 
    ary = rb_ary_new2(n);
 
    va_init_list(ar, n);
    for (i=0; i<n; i++) {
	RARRAY(ary)->ptr[i] = va_arg(ar, VALUE);
    }
    va_end(ar);
 
    RARRAY(ary)->len = n;
    return ary;
}
 

VALUE
rb_ary_new4(n, elts)
    long n;
    const VALUE *elts;
{
    VALUE ary;
 
    ary = rb_ary_new2(n);
    if (n > 0 && elts) {
	MEMCPY(RARRAY(ary)->ptr, elts, VALUE, n);
    }
 
    /* This assignment to len will be moved to the above "if" block in Ruby 1.9 */
    RARRAY(ary)->len = n;
 
    return ary;
}
 
記事メニュー
目安箱バナー