class SyncEnumerator

SyncEnumerator creates an Enumerable object from multiple Enumerable objects and enumerates them synchronously.

Example

require 'generator'

s = SyncEnumerator.new([1,2,3], ['a', 'b', 'c'])

# Yields [1, 'a'], [2, 'b'], and [3,'c']
s.each { |row| puts row.join(', ') }

Public Class Methods

new(*enums) click to toggle source

Creates a new SyncEnumerator which enumerates rows of given Enumerable objects.

# File lib/rubysl/generator/generator.rb, line 190
def initialize(*enums)
  @gens = enums.map { |e| Generator.new(e) }
end

Public Instance Methods

each() { |ret| ... } click to toggle source

Enumerates rows of the Enumerable objects.

# File lib/rubysl/generator/generator.rb, line 218
def each
  @gens.each { |g| g.rewind }

  while true
    count = 0

    ret = @gens.map { |g|
      if g.end?
        count += 1
        nil
      else
        g.next
      end
    }

    break if count == @gens.size

    yield ret
  end

  self
end
end?(i = nil) click to toggle source

Returns true if the given nth Enumerable object has reached the end. If no argument is given, returns true if any of the Enumerable objects has reached the end.

# File lib/rubysl/generator/generator.rb, line 209
def end?(i = nil)
  if i.nil?
    @gens.detect { |g| g.end? } ? true : false
  else
    @gens[i].end?
  end
end
length() click to toggle source

Returns the number of enumerated Enumerable objects, i.e. the size of each row.

# File lib/rubysl/generator/generator.rb, line 202
def length
  @gens.length
end
size() click to toggle source

Returns the number of enumerated Enumerable objects, i.e. the size of each row.

# File lib/rubysl/generator/generator.rb, line 196
def size
  @gens.size
end