[前][次][番号順一覧][スレッド一覧]

ruby-changes:25442

From: marcandre <ko1@a...>
Date: Wed, 7 Nov 2012 02:10:44 +0900 (JST)
Subject: [ruby-changes:25442] marcandRe: r37499 (trunk): * enumerator.c: Support #size for enumerators created from enumerators

marcandre	2012-11-07 02:10:35 +0900 (Wed, 07 Nov 2012)

  New Revision: 37499

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37499

  Log:
    * enumerator.c: Support #size for enumerators created from enumerators
      [Feature #6636]

  Modified files:
    trunk/enumerator.c
    trunk/test/ruby/test_enumerator.rb

Index: enumerator.c
===================================================================
--- enumerator.c	(revision 37498)
+++ enumerator.c	(revision 37499)
@@ -489,6 +489,9 @@
     return rb_yield_values(2, rb_ary_new4(argc, argv), idx);
 }
 
+static VALUE
+enumerator_size(VALUE obj);
+
 /*
  * call-seq:
  *   e.with_index(offset = 0) {|(*args), idx| ... }
@@ -507,7 +510,7 @@
     VALUE memo;
 
     rb_scan_args(argc, argv, "01", &memo);
-    RETURN_ENUMERATOR(obj, argc, argv);
+    RETURN_SIZED_ENUMERATOR(obj, argc, argv, enumerator_size);
     memo = NIL_P(memo) ? 0 : (VALUE)NUM2LONG(memo);
     return enumerator_block_call(obj, enumerator_with_index_i, (VALUE)&memo);
 }
@@ -567,7 +570,7 @@
 static VALUE
 enumerator_with_object(VALUE obj, VALUE memo)
 {
-    RETURN_ENUMERATOR(obj, 1, &memo);
+    RETURN_SIZED_ENUMERATOR(obj, 1, &memo, enumerator_size);
     enumerator_block_call(obj, enumerator_with_object_i, memo);
 
     return memo;
Index: test/ruby/test_enumerator.rb
===================================================================
--- test/ruby/test_enumerator.rb	(revision 37498)
+++ test/ruby/test_enumerator.rb	(revision 37499)
@@ -414,5 +414,11 @@
     assert_equal nil, @obj.to_enum(:foo, 0, 1).size
     assert_equal 2, @obj.to_enum(:foo, 0, 1){ 2 }.size
   end
+
+  def test_size_for_enum_created_by_enumerators
+    enum = to_enum{ 42 }
+    assert_equal 42, enum.with_index.size
+    assert_equal 42, enum.with_object(:foo).size
+  end
 end
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]