Method: ConcurrentIterable::Iterator#map

Defined in:
lib/concurrent_iterable/iterator.rb

#map(&block) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/concurrent_iterable/iterator.rb', line 19

def map(&block)
  result = Concurrent::Array.new(iterable.length)
  iterable.each_slice(concurrency).each.with_index do |group, group_index|
    group.length.times.map do |index|
      Concurrent::Promises.future(executor) do
        result_index = group_index * concurrency + index
        result[result_index] = yield group[index]
      end
    end.each(&:wait!)
  end
  result
end