Change soft-fail to use the config, rather than env
[rbx.git] / spec / subtend / ext / subtend_array.c
blobc57b0da3e14b7b7286fad25f76af18616b421de4
1 #include <ruby.h>
2 #include <stdio.h>
4 static VALUE sa_new_array(VALUE self) {
5 VALUE ret;
6 ret = rb_ary_new();
7 return ret;
10 static VALUE sa_array_push(VALUE self, VALUE array, VALUE item) {
11 rb_ary_push(array, item);
12 return array;
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);
22 return array;
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);
56 return Qnil;
59 static VALUE sa_rarray_iterate(VALUE self, VALUE array) {
60 int i;
61 for(i = 0; i < RARRAY(array)->len; ++i) {
62 rb_yield(RARRAY(array)->ptr[i]);
64 return Qnil;
67 static VALUE sa_rarray_assign_global_alphabet(VALUE self) {
68 int i;
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);
77 free(str);
78 return Qnil;
81 static VALUE sa_rarray_set_len(VALUE self, VALUE array, VALUE len) {
82 RARRAY(array)->len = NUM2INT(len);
83 return Qnil;
86 void Init_subtend_array() {
87 VALUE cls;
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);