Method: Wordmap::IndexValue.intersect

Defined in:
lib/wordmap/index_value.rb

.intersect(*iters) ⇒ Object



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

def intersect(*iters)
  return enum_for(__method__, *iters) unless block_given?

  last = nil
  given = 0
  wrap_up = false

  union(*iters, control_messages: true) do |value|
    if value == :__iter_exhausted
      wrap_up = true
      next
    end

    break if wrap_up && last != value

    last == value ? (given += 1) : (given = 1)
    yield(value) if given == iters.size
    last = value
  end
end