def map(array, options = {}, &block)
array = array.to_a
if RUBY_PLATFORM =~ /java/ and not options[:in_processes]
method = :in_threads
size = options[method] || processor_count
elsif options[:in_threads]
method = :in_threads
size = options[method]
else
method = :in_processes
if Process.respond_to?(:fork)
size = options[method] || processor_count
else
$stderr.puts "Warning: Process.fork is not supported by this Ruby"
size = 0
end
end
size = [array.size, size].min
if size == 0
work_direct(array, options, &block)
elsif method == :in_threads
work_in_threads(array, options.merge(:count => size), &block)
else
work_in_processes(array, options.merge(:count => size), &block)
end
end