4 static VALUE
sa_new_array(VALUE self
) {
10 static VALUE
sa_array_push(VALUE self
, VALUE array
, VALUE item
) {
11 rb_ary_push(array
, item
);
15 static VALUE
sa_array_pop(VALUE self
, VALUE array
) {
16 return rb_ary_pop(array
);
19 static VALUE
sa_array_push2(VALUE self
, VALUE array
, VALUE item
, VALUE i2
) {
20 rb_ary_push(array
, item
);
21 rb_ary_push(array
, i2
);
25 static VALUE
sa_array_entry(VALUE self
, VALUE array
, VALUE offset
) {
26 return rb_ary_entry(array
, FIX2INT(offset
));
29 static VALUE
sa_array_clear(VALUE self
, VALUE array
) {
30 return rb_ary_clear(array
);
33 static VALUE
sa_array_dup(VALUE self
, VALUE array
) {
34 return rb_ary_dup(array
);
37 static VALUE
sa_array_join(VALUE self
, VALUE array1
, VALUE array2
) {
38 return rb_ary_join(array1
, array2
);
41 static VALUE
sa_array_reverse(VALUE self
, VALUE array
) {
42 return rb_ary_reverse(array
);
45 static VALUE
sa_array_unshift(VALUE self
, VALUE array
, VALUE val
) {
46 return rb_ary_unshift(array
, val
);
49 static VALUE
sa_array_shift(VALUE self
, VALUE array
) {
50 return rb_ary_shift(array
);
53 static VALUE
sa_array_store(VALUE self
, VALUE array
, VALUE offset
, VALUE value
) {
54 rb_ary_store(array
, FIX2INT(offset
), value
);
59 static VALUE
sa_rarray_iterate(VALUE self
, VALUE array
) {
61 for(i
= 0; i
< RARRAY(array
)->len
; ++i
) {
62 rb_yield(RARRAY(array
)->ptr
[i
]);
67 static VALUE
sa_rarray_assign_global_alphabet(VALUE self
) {
69 char *str
= ALLOC_N(char, 2);
70 VALUE array
= rb_gv_get("$global_rarray_test");
71 str
[0] = 'a'; str
[1] = 0;
72 RARRAY(array
)->len
= 5;
73 RARRAY(array
)->ptr
= ALLOC_N(VALUE
, 5);
74 for(i
= 0; i
< RARRAY(array
)->len
; ++i
, ++(*str
)) {
75 RARRAY(array
)->ptr
[i
] = rb_str_new2(str
);
81 static VALUE
sa_rarray_set_len(VALUE self
, VALUE array
, VALUE len
) {
82 RARRAY(array
)->len
= NUM2INT(len
);
86 void Init_subtend_array() {
88 cls
= rb_define_class("SubtendArray", rb_cObject
);
89 rb_define_method(cls
, "new_array", sa_new_array
, 0);
90 rb_define_method(cls
, "rb_ary_push", sa_array_push
, 2);
91 rb_define_method(cls
, "rb_ary_push2", sa_array_push2
, 3);
92 rb_define_method(cls
, "rb_ary_entry", sa_array_entry
, 2);
93 rb_define_method(cls
, "rb_ary_clear", sa_array_clear
, 1);
94 rb_define_method(cls
, "rb_ary_dup", sa_array_dup
, 1);
95 rb_define_method(cls
, "rb_ary_join", sa_array_join
, 2);
96 rb_define_method(cls
, "rb_ary_reverse", sa_array_reverse
, 1);
97 rb_define_method(cls
, "rb_ary_unshift", sa_array_unshift
, 2);
98 rb_define_method(cls
, "rb_ary_shift", sa_array_shift
, 1);
99 rb_define_method(cls
, "rb_ary_store", sa_array_store
, 3);
100 rb_define_method(cls
, "rb_ary_pop", sa_array_pop
, 1);
101 rb_define_method(cls
, "rb_rarray_iterate", sa_rarray_iterate
, 1);
102 rb_define_method(cls
, "rb_rarray_assign_global_alphabet", sa_rarray_assign_global_alphabet
, 0);
103 rb_define_method(cls
, "rb_rarray_set_len", sa_rarray_set_len
, 2);