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



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

#merge_sort(*enums) ⇒ Object



62
63
64
65
# File 'lib/xenum.rb', line 62

def merge_sort(*enums)
  enums << self
  Xenum::MergeSort.iter(*enums)
end