From c326ab877e8e9d04b672d14b37c7d5fa96d04e7b Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 24 Mar 2014 18:39:06 +0900 Subject: improve Enumerable#reverse_each to be efficient --- mrbgems/mruby-array-ext/mrblib/array.rb | 10 ++++++++++ mrbgems/mruby-enum-ext/mrblib/enum.rb | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/mrbgems/mruby-array-ext/mrblib/array.rb b/mrbgems/mruby-array-ext/mrblib/array.rb index 337cef632..feec10ead 100644 --- a/mrbgems/mruby-array-ext/mrblib/array.rb +++ b/mrbgems/mruby-array-ext/mrblib/array.rb @@ -201,4 +201,14 @@ class Array self.replace(result) end end + + # for efficiency + def reverse_each(&block) + i = self.size - 1 + while i>=0 + block.call(self[i]) + i -= 1 + end + self + end end diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index 6ac1812ee..0ce1d7605 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -519,8 +519,8 @@ module Enumerable def reverse_each(&block) ary = [] - self.each {|*val| ary.unshift(*val) } - ary.each {|*val| block.call(*val) } + self.each {|*val| ary.push(val.__svalue) } + ary.reverse_each(&block) self end end -- cgit v1.2.3