1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

flock,flatten,signal to main_thread

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@168 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 1998-04-16 07:42:49 +00:00
parent e004116073
commit 94a1bece4a
14 changed files with 242 additions and 122 deletions

40
array.c
View file

@ -1234,6 +1234,44 @@ ary_nitems(ary)
return INT2FIX(n);
}
static VALUE
ary_flatten_bang(ary)
VALUE ary;
{
int i;
int mod = 0;
ary_modify(ary);
for (;;) {
int lmod = 0;
for (i=0; i<RARRAY(ary)->len; i++) {
if (TYPE(RARRAY(ary)->ptr[i]) == T_ARRAY) {
VALUE ary2 = RARRAY(ary)->ptr[i];
ary_replace(ary, i, RARRAY(ary2)->len, ary2);
i += RARRAY(ary2)->len - 1;
lmod++;
}
}
if (lmod == 0) break;
mod = lmod;
}
if (mod == 0) return Qnil;
return ary;
}
static VALUE
ary_flatten(ary)
VALUE ary;
{
VALUE v = ary_flatten_bang(ary_clone(ary));
if (NIL_P(v)) return ary;
return v;
}
extern VALUE mEnumerable;
void
@ -1304,6 +1342,8 @@ Init_Array()
rb_define_method(cArray, "uniq!", ary_uniq_bang, 0);
rb_define_method(cArray, "compact", ary_compact, 0);
rb_define_method(cArray, "compact!", ary_compact_bang, 0);
rb_define_method(cArray, "flatten", ary_flatten, 0);
rb_define_method(cArray, "flatten!", ary_flatten_bang, 0);
rb_define_method(cArray, "nitems", ary_nitems, 0);
cmp = rb_intern("<=>");