Module: Enumerable

Defined in:
lib/xenum.rb

Instance Method Summary collapse

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



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/xenum.rb', line 39

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

#merge_sort(*enums) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/xenum.rb', line 58

def merge_sort(*enums)
  case enums.size
  when 0
    self
  when 1
    _merge_sort(enums[0])
  else
    enums2 = enums.pop((enums.size / 2) - 1)
    enum2 = enums.pop
    e2 = enum2.merge_sort(*enums2)
    e1 = merge_sort(*enums)
    e1.merge_sort(e2)
  end
end