summaryrefslogtreecommitdiff
path: root/enum.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-02-03 09:48:00 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-02-03 09:48:00 +0000
commit06d4e3b42d836b762c29cdc9dc7181caf14dcdec (patch)
tree4c85b1a55d024c59143e193b17e2444cb6873c6e /enum.c
parent99839272a3cf1dfe69bd3bad26d96a915b905ef1 (diff)
990203
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_3@389 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'enum.c')
-rw-r--r--enum.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/enum.c b/enum.c
index 75bc547154..dc7e2112a4 100644
--- a/enum.c
+++ b/enum.c
@@ -123,6 +123,28 @@ enum_find_all(obj)
}
static VALUE
+reject_i(i, tmp)
+ VALUE i, tmp;
+{
+ if (!RTEST(rb_yield(i))) {
+ rb_ary_push(tmp, i);
+ }
+ return Qnil;
+}
+
+static VALUE
+enum_reject(obj)
+ VALUE obj;
+{
+ VALUE tmp;
+
+ tmp = rb_ary_new();
+ rb_iterate(rb_each, obj, reject_i, tmp);
+
+ return tmp;
+}
+
+static VALUE
collect_i(i, tmp)
VALUE i, tmp;
{
@@ -377,6 +399,7 @@ Init_Enumerable()
rb_define_method(rb_mEnumerable,"detect", enum_find, -1);
rb_define_method(rb_mEnumerable,"find_all", enum_find_all, 0);
rb_define_method(rb_mEnumerable,"select", enum_find_all, 0);
+ rb_define_method(rb_mEnumerable,"reject", enum_reject, 0);
rb_define_method(rb_mEnumerable,"collect", enum_collect, 0);
rb_define_method(rb_mEnumerable,"min", enum_min, 0);
rb_define_method(rb_mEnumerable,"max", enum_max, 0);