class Enumerator

Public Instance Methods

fibril(*guard_names, &block) click to toggle source
# File lib/fibril/core.rb, line 234
def fibril(*guard_names, &block)
  context = self
  Kernel.fibril(*guard_names){
    e = Enumerator.new do |enum|
      context.each do |*elm|
        result = enum.yield(*elm)
        tick
        result
      end
    end
    e.each(&block)
  }
end
n_fibrils(*guard_names, n, &block) click to toggle source
# File lib/fibril/core.rb, line 248
def n_fibrils(*guard_names, n, &block)
  context = self

  guards = n.times.map do |i|
    Kernel.fibril{
      e = Enumerator.new do |enum|
        context.each.with_index do |elm, index|
          next unless ((index - i) % n).zero?
          result = enum.yield(*elm)
          tick
          result
        end
      end
      e.each(&block)
    }
  end
  Kernel.fibril(*guard_names){
    all_results = await(*guards)
    length = all_results.max{|x| x.length}.length
    length.times.map do |i|
      all_results.find{|list|
        list[i] != nil
      }[i]
    end
  }
end