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
|