diff options
| -rw-r--r-- | src/array.c | 378 |
1 files changed, 0 insertions, 378 deletions
diff --git a/src/array.c b/src/array.c index d7961b76e..b8916b341 100644 --- a/src/array.c +++ b/src/array.c @@ -735,48 +735,6 @@ mrb_ary_size(mrb_state *mrb, mrb_value self) return mrb_fixnum_value(a->len); } -#if 0 /* --> implement with ruby code */ -mrb_value -mrb_ary_each(mrb_state *mrb, mrb_value self) -{ - long i; - - for (i = 0; i < RARRAY_LEN(self); i++) { - mrb_yield(RARRAY_PTR(self)[i]); - } - - return self; -} -#endif - -#if 0 /* --> implement with ruby code */ -mrb_value -mrb_ary_each_index(mrb_state *mrb, mrb_value self) -{ - long i; - - for (i = 0; i < RARRAY_LEN(self); i++) { - mrb_yield(mrb_fixnum_value(i)); - } - - return self; -} -#endif - -#if 0 /* --> implement with ruby code */ -mrb_value -mrb_ary_collect_bang(mrb_state *mrb, mrb_value self) -{ - long i; - - for (i = 0; i < RARRAY_LEN(self); i++) { - RARRAY_PTR(self)[i] = mrb_yield(RARRAY_PTR(self)[i]); - } - - return self; -} -#endif - mrb_value mrb_ary_clear(mrb_state *mrb, mrb_value self) { @@ -825,134 +783,6 @@ mrb_ary_tmp_new(mrb_state *mrb, long capa) return mrb_ary_new_capa(mrb, capa);//ary_new(0, capa); } -#if 0 -/* - * call-seq: - * ary.sort! -> ary - * ary.sort! {| a,b | block } -> ary - * - * Sorts +self+. Comparisons for - * the sort will be done using the <code><=></code> operator or using - * an optional code block. The block implements a comparison between - * <i>a</i> and <i>b</i>, returning -1, 0, or +1. See also - * <code>Enumerable#sort_by</code>. - * - * a = [ "d", "a", "e", "c", "b" ] - * a.sort #=> ["a", "b", "c", "d", "e"] - * a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"] - */ - -mrb_value -mrb_ary_sort_bang(mrb_value ary) -{ -#if 0 - mrb_ary_modify(ary); - //assert(!ARY_SHARED_P(ary)); - if (RARRAY_LEN(ary) > 1) { - mrb_value tmp = ary_make_substitution(ary); /* only ary refers tmp */ - struct ary_sort_data data; - - RBASIC(tmp)->klass = 0; - data.ary = tmp; - data.opt_methods = 0; - data.opt_inited = 0; - ruby_qsort(RARRAY_PTR(tmp), RARRAY_LEN(tmp), sizeof(VALUE), - mrb_block_given_p()?sort_1:sort_2, &data); - - if (ARY_EMBED_P(tmp)) { - assert(ARY_EMBED_P(tmp)); - if (ARY_SHARED_P(ary)) { /* ary might be destructively operated in the given block */ - mrb_ary_unshare(ary); - } - FL_SET_EMBED(ary); - MEMCPY(RARRAY_PTR(ary), ARY_EMBED_PTR(tmp), VALUE, ARY_EMBED_LEN(tmp)); - ARY_SET_LEN(ary, ARY_EMBED_LEN(tmp)); - } - else { - assert(!ARY_EMBED_P(tmp)); - if (ARY_HEAP_PTR(ary) == ARY_HEAP_PTR(tmp)) { - assert(!ARY_EMBED_P(ary)); - FL_UNSET_SHARED(ary); - ARY_SET_CAPA(ary, ARY_CAPA(tmp)); - } - else { - assert(!ARY_SHARED_P(tmp)); - if (ARY_EMBED_P(ary)) { - FL_UNSET_EMBED(ary); - } - else if (ARY_SHARED_P(ary)) { - /* ary might be destructively operated in the given block */ - mrb_ary_unshare(ary); - } - else { - xfree(ARY_HEAP_PTR(ary)); - } - ARY_SET_PTR(ary, RARRAY_PTR(tmp)); - ARY_SET_HEAP_LEN(ary, RARRAY_LEN(tmp)); - ARY_SET_CAPA(ary, ARY_CAPA(tmp)); - } - /* tmp was lost ownership for the ptr */ - FL_UNSET(tmp, FL_FREEZE); - FL_SET_EMBED(tmp); - ARY_SET_EMBED_LEN(tmp, 0); - FL_SET(tmp, FL_FREEZE); - } - /* tmp will be GC'ed. */ - RBASIC(tmp)->c = mrb->array_class; - } -#endif - return ary; -} -#endif - -#if 0 -mrb_value -mrb_ary_dup(mrb_state *mrb, mrb_value self) -{ - struct RArray *a1 = mrb_ary_ptr(self); - struct RArray *a2; - mrb_value ary; - mrb_value *buf; - mrb_int times; - //size_t len; - - ary = mrb_ary_new_capa(mrb, a1->len); - a2 = mrb_ary_ptr(ary); - buf = a2->buf; - while(times--) { - memcpy(buf, a1->buf, sizeof(mrb_value)*a1->len); - buf += a1->len; - } - a2->len = a1->len; - - return ary; -} - -/* - * call-seq: - * ary.sort -> new_ary - * ary.sort {| a,b | block } -> new_ary - * - * Returns a new array created by sorting +self+. Comparisons for - * the sort will be done using the <code><=></code> operator or using - * an optional code block. The block implements a comparison between - * <i>a</i> and <i>b</i>, returning -1, 0, or +1. See also - * <code>Enumerable#sort_by</code>. - * - * a = [ "d", "a", "e", "c", "b" ] - * a.sort #=> ["a", "b", "c", "d", "e"] - * a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"] - */ - -mrb_value -mrb_ary_sort(mrb_state *mrb, mrb_value ary) -{ - ary = mrb_ary_dup(mrb, ary); - mrb_ary_sort_bang(ary); - return ary; -} -#endif - static mrb_value inspect_ary(mrb_state *mrb, mrb_value ary, mrb_value list) { @@ -996,27 +826,6 @@ inspect_ary(mrb_state *mrb, mrb_value ary, mrb_value list) return arystr; } -#if 0 -static mrb_value -inspect_ary_r(mrb_state *mrb, mrb_value ary, mrb_value dummy, int recur) -{ - long i; - mrb_value s, arystr; - - arystr = mrb_str_buf_new(mrb, 128); - mrb_str_buf_cat(mrb, arystr, "[", strlen("[")); /* for capa */ - //arystr = mrb_str_new_cstr(mrb, "[");//mrb_str_buf_new2("["); - for (i=0; i<RARRAY_LEN(ary); i++) { - s = mrb_inspect(mrb, RARRAY_PTR(ary)[i]);//mrb_inspect(RARRAY_PTR(ary)[i]); - if (i > 0) mrb_str_buf_cat(mrb, arystr, ", ", strlen(", "));//mrb_str_buf_cat2(str, ", "); - mrb_str_buf_append(mrb, arystr, s); - } - mrb_str_buf_cat(mrb, arystr, "]", strlen("]"));// mrb_str_buf_cat2(str, "]"); - - return arystr; -} -#endif - /* 15.2.12.5.31 (x) */ /* * call-seq: @@ -1101,139 +910,6 @@ mrb_ary_join(mrb_state *mrb, mrb_value ary, mrb_value sep) return join_ary(mrb, ary, sep, mrb_ary_new(mrb)); } -#if 0 -static void ary_join_1(mrb_state *mrb, mrb_value obj, mrb_value ary, mrb_value sep, long i, mrb_value result, mrb_value first); - -static mrb_value -recursive_join(mrb_state *mrb, mrb_value obj, mrb_value args, int recur) -{ - mrb_value ary = mrb_ary_ref(mrb, args, 0); - mrb_value sep = mrb_ary_ref(mrb, args, 1); - mrb_value result = mrb_ary_ref(mrb, args, 2); - mrb_value first = mrb_ary_ref(mrb, args, 3); - - if (recur) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "recursive array join"); - } - else { - ary_join_1(mrb, obj, ary, sep, 0, result, first); - } - return mrb_nil_value(); -} - -static void -ary_join_0(mrb_state *mrb, mrb_value ary, mrb_value sep, long max, mrb_value result) -{ - long i; - mrb_value val; - - for (i=0; i<max; i++) { - val = RARRAY_PTR(ary)[i]; - if (i > 0 && !mrb_nil_p(sep)) - mrb_str_buf_append(mrb, result, sep); - mrb_str_buf_append(mrb, result, val); - } -} - -static void -ary_join_1(mrb_state *mrb, mrb_value obj, mrb_value ary, mrb_value sep, long i, mrb_value result, mrb_value first) -{ - mrb_value val, tmp; - - for (; i<RARRAY_LEN(ary); i++) { - if (i > 0 && !mrb_nil_p(sep)) { - mrb_str_buf_append(mrb, result, sep); - } - - val = RARRAY_PTR(ary)[i]; - switch (mrb_type(val)) { - case MRB_TT_STRING: - str_join: - mrb_str_buf_append(mrb, result, val); - break; - case MRB_TT_ARRAY: - obj = val; - ary_join: - if (mrb_obj_equal(mrb, val, ary)) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "recursive array join"); - } - else { - //struct recursive_join_arg args; - mrb_value args = mrb_ary_new(mrb); - - mrb_ary_set(mrb, args, 0, val); - mrb_ary_set(mrb, args, 1, sep); - mrb_ary_set(mrb, args, 2, result); - mrb_ary_set(mrb, args, 3, first); - - mrb_exec_recursive(mrb, recursive_join, obj, &args); - } - break; - default: - tmp = mrb_check_string_type(mrb, val); - if (!mrb_nil_p(tmp)) { - val = tmp; - goto str_join; - } - tmp = mrb_check_convert_type(mrb, val, MRB_TT_ARRAY, "Array", "to_ary"); - if (!mrb_nil_p(tmp)) { - obj = val; - val = tmp; - goto ary_join; - } - val = mrb_obj_as_string(mrb, val); - if (mrb_test(first)) { -#ifdef INCLUDE_REGEXP /* include "encoding.h" */ - mrb_enc_copy(mrb, result, val); -#endif - first = mrb_false_value(); - } - goto str_join; - } - } -} - -mrb_value -mrb_ary_join(mrb_state *mrb, mrb_value ary, mrb_value sep) -{ - long len = 1, i; - mrb_value val, tmp, result; - - if (RARRAY_LEN(ary) == 0) return mrb_str_new2(mrb, ""); - - if (!mrb_nil_p(sep)) { - //StringValue(sep); - mrb_string_value(mrb, &sep); - len += RSTRING_LEN(sep) * (RARRAY_LEN(ary) - 1); - } - - for (i=0; i<RARRAY_LEN(ary); i++) { - val = RARRAY_PTR(ary)[i]; - tmp = mrb_check_string_type(mrb, val); - - if (mrb_nil_p(tmp) || (!mrb_obj_equal(mrb, tmp, val))) { - mrb_value first; - - result = mrb_str_buf_new(mrb, len + (RARRAY_LEN(ary)-i)*10); - first = (i == 0)? mrb_true_value(): mrb_false_value(); -mrb_realloc(mrb, RSTRING(result)->buf, ++(RSTRING(result)->capa)); - ary_join_0(mrb, ary, sep, i, result); -mrb_realloc(mrb, RSTRING(result)->buf, ++(RSTRING(result)->capa)); - ary_join_1(mrb, ary, ary, sep, i, result, first); -mrb_realloc(mrb, RSTRING(result)->buf, ++(RSTRING(result)->capa)); - return result; - } - - len += RSTRING_LEN(tmp); - } - - result = mrb_str_buf_new(mrb, len); - ary_join_0(mrb, ary, sep, RARRAY_LEN(ary), result); - - return result; -} -#endif - /* * call-seq: * ary.join(sep=nil) -> str @@ -1350,44 +1026,6 @@ mrb_ary_eql(mrb_state *mrb, mrb_value ary1) return mrb_exec_recursive_paired(mrb, recursive_eql, ary1, ary2, &ary2); } -#if 0 -static mrb_value -recursive_hash(mrb_value ary, mrb_value dummy, int recur) -{ - long i; - st_index_t h; - mrb_value n; - - h = mrb_hash_start(RARRAY_LEN(ary)); - if (recur) { - h = mrb_hash_uint(h, NUM2LONG(mrb_hash(mrb_cArray))); - } - else { - for (i=0; i<RARRAY_LEN(ary); i++) { - n = mrb_hash(RARRAY_PTR(ary)[i]); - h = mrb_hash_uint(h, NUM2LONG(n)); - } - } - h = mrb_hash_end(h); - return LONG2FIX(h); -} - -/* 15.2.12.5.35 (x) */ -/* - * call-seq: - * ary.hash -> fixnum - * - * Compute a hash-code for this array. Two arrays with the same content - * will have the same hash code (and will compare using <code>eql?</code>). - */ - -static mrb_value -mrb_ary_hash(mrb_state *mrb, mrb_value ary) -{ - return mrb_exec_recursive_outer(mrb, recursive_hash, ary, mrb_fixnum_value(0)); -} -#endif - void mrb_init_array(mrb_state *mrb) { @@ -1405,30 +1043,15 @@ mrb_init_array(mrb_state *mrb) mrb_define_method(mrb, a, "[]", mrb_ary_aget, ARGS_ANY()); /* 15.2.12.5.4 */ mrb_define_method(mrb, a, "[]=", mrb_ary_aset, ARGS_ANY()); /* 15.2.12.5.5 */ mrb_define_method(mrb, a, "clear", mrb_ary_clear, ARGS_NONE()); /* 15.2.12.5.6 */ -#if 0 /* --> implement with ruby code */ - mrb_define_method(mrb, a, "collect!", mrb_ary_collect_bang, ARGS_NONE()); /* 15.2.12.5.7 */ -#endif mrb_define_method(mrb, a, "concat", mrb_ary_concat_m, ARGS_REQ(1)); /* 15.2.12.5.8 */ mrb_define_method(mrb, a, "delete_at", mrb_ary_delete_at, ARGS_REQ(1)); /* 15.2.12.5.9 */ -#if 0 /* --> implement with ruby code */ - mrb_define_method(mrb, a, "each", mrb_ary_each, ARGS_NONE()); /* 15.2.12.5.10 */ -#endif -#if 0 /* --> implement with ruby code */ - mrb_define_method(mrb, a, "each_index", mrb_ary_each_index, ARGS_NONE()); /* 15.2.12.5.11 */ -#endif mrb_define_method(mrb, a, "empty?", mrb_ary_empty_p, ARGS_NONE()); /* 15.2.12.5.12 */ mrb_define_method(mrb, a, "first", mrb_ary_first, ARGS_ANY()); /* 15.2.12.5.13 */ mrb_define_method(mrb, a, "index", mrb_ary_index_m, ARGS_REQ(1)); /* 15.2.12.5.14 */ -#if 0 /* --> implement with ruby code */ - mrb_define_method(mrb, a, "initialize", mrb_ary_initialize, ARGS_ANY()); /* 15.2.12.5.15 */ -#endif mrb_define_method(mrb, a, "initialize_copy", mrb_ary_replace_m, ARGS_REQ(1)); /* 15.2.12.5.16 */ mrb_define_method(mrb, a, "join", mrb_ary_join_m, ARGS_ANY()); /* 15.2.12.5.17 */ mrb_define_method(mrb, a, "last", mrb_ary_last, ARGS_ANY()); /* 15.2.12.5.18 */ mrb_define_method(mrb, a, "length", mrb_ary_size, ARGS_NONE()); /* 15.2.12.5.19 */ -#if 0 /* --> implement with ruby code */ - mrb_define_method(mrb, a, "map!", mrb_ary_collect_bang, ARGS_NONE()); /* 15.2.12.5.20 */ -#endif mrb_define_method(mrb, a, "pop", mrb_ary_pop_m, ARGS_NONE()); /* 15.2.12.5.21 */ mrb_define_method(mrb, a, "push", mrb_ary_push_m, ARGS_ANY()); /* 15.2.12.5.22 */ mrb_define_method(mrb, a, "replace", mrb_ary_replace_m, ARGS_REQ(1)); /* 15.2.12.5.23 */ @@ -1444,6 +1067,5 @@ mrb_init_array(mrb_state *mrb) mrb_define_alias(mrb, a, "to_s", "inspect"); /* 15.2.12.5.32 (x) */ mrb_define_method(mrb, a, "==", mrb_ary_equal, ARGS_REQ(1)); /* 15.2.12.5.33 (x) */ mrb_define_method(mrb, a, "eql?", mrb_ary_eql, ARGS_REQ(1)); /* 15.2.12.5.34 (x) */ - //mrb_define_method(mrb, a, "hash", mrb_ary_hash, ARGS_NONE()); /* 15.2.12.5.35 (x) */ mrb_define_method(mrb, a, "<=>", mrb_ary_cmp, ARGS_REQ(1)); /* 15.2.12.5.36 (x) */ } |
