Module: Enumerable
- Defined in:
- lib/xenum.rb
Instance Method Summary collapse
- #lazy_flatten(level = nil) ⇒ Object
- #lazy_insert(index, *objs) ⇒ Object
- #lazy_product(*enums) ⇒ Object
- #lazy_unshift(*objs) ⇒ Object
- #merge_sort(*enums) ⇒ Object
Instance Method Details
#lazy_flatten(level = nil) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/xenum.rb', line 10 def lazy_flatten(level = nil) these = self level = -1 if level.nil? Enumerator.new do |yielder| level.nil? these.each do |this| if Enumerable === this && level != 0 this.lazy_flatten(level - 1).each do |sub| yielder.yield(sub) end next end yielder.yield(this) end end end |
#lazy_insert(index, *objs) ⇒ Object
29 30 31 32 33 34 35 36 37 |
# File 'lib/xenum.rb', line 29 def lazy_insert(index, *objs) return self if objs.empty? if index >= 0 lazy_insert_pos(index, objs) else lazy_insert_neg(index, objs) end end |
#lazy_product(*enums) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/xenum.rb', line 43 def lazy_product(*enums) if enums.empty? return Enumerator.new do |yielder| each do |this| yielder.yield([this]) end end end Enumerator.new do |yielder| each do |this| head = [this] enums[0].lazy_product(*enums[1..-1]).each do |tail| yielder.yield(head + tail) end end end end |
#lazy_unshift(*objs) ⇒ Object
39 40 41 |
# File 'lib/xenum.rb', line 39 def lazy_unshift(*objs) lazy_insert(0, *objs) end |