Class: Enumerator

Inherits:
Object
  • Object
show all
Defined in:
lib/fibril/core.rb

Instance Method Summary collapse

Instance Method Details

#fibril(*guard_names, &block) ⇒ Object



234
235
236
237
238
239
240
241
242
243
244
245
246
# 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) ⇒ Object



248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
# 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