Revision: 3366 http://trac.macosforge.org/projects/ruby/changeset/3366 Author: ernest.prabhakar@gmail.com Date: 2010-01-29 15:40:08 -0800 (Fri, 29 Jan 2010) Log Message: ----------- Rename futures to future to match class name Modified Paths: -------------- MacRuby/trunk/lib/dispatch.rb Added Paths: ----------- MacRuby/trunk/lib/dispatch/future.rb Removed Paths: ------------- MacRuby/trunk/lib/dispatch/futures.rb Copied: MacRuby/trunk/lib/dispatch/future.rb (from rev 3365, MacRuby/trunk/lib/dispatch/futures.rb) =================================================================== --- MacRuby/trunk/lib/dispatch/future.rb (rev 0) +++ MacRuby/trunk/lib/dispatch/future.rb 2010-01-29 23:40:08 UTC (rev 3366) @@ -0,0 +1,24 @@ +# Calculate the value of an object in the background + +module Dispatch + # Wrapper around Dispatch::Group used to implement lazy Futures + class Future + # Create a future that asynchronously dispatches the block + # to a concurrent queue of the specified (optional) +priority+ + def initialize(priority=nil, &block) + @value = nil + @group = Dispatch.fork(priority) { @value = block.call } + end + + # Waits for the computation to finish, then returns the value + # Duck-typed to lambda.call(void) + # If a block is passed, invoke that asynchronously with the final value + def call(&callback) + if not block_given? + @group.wait + return @value + end + @group.notify { callback.call(@value) } + end + end +end Deleted: MacRuby/trunk/lib/dispatch/futures.rb =================================================================== --- MacRuby/trunk/lib/dispatch/futures.rb 2010-01-29 23:40:06 UTC (rev 3365) +++ MacRuby/trunk/lib/dispatch/futures.rb 2010-01-29 23:40:08 UTC (rev 3366) @@ -1,22 +0,0 @@ -module Dispatch - # Wrapper around Dispatch::Group used to implement lazy Futures - class Future - # Create a future that asynchronously dispatches the block - # to a concurrent queue of the specified (optional) +priority+ - def initialize(priority=nil, &block) - @value = nil - @group = Dispatch.fork(priority) { @value = block.call } - end - - # Waits for the computation to finish, then returns the value - # Duck-typed to lambda.call(void) - # If a block is passed, invoke that asynchronously with the final value - def call(&callback) - if not block_given? - @group.wait - return @value - end - @group.notify { callback.call(@value) } - end - end -end Modified: MacRuby/trunk/lib/dispatch.rb =================================================================== --- MacRuby/trunk/lib/dispatch.rb 2010-01-29 23:40:06 UTC (rev 3365) +++ MacRuby/trunk/lib/dispatch.rb 2010-01-29 23:40:08 UTC (rev 3366) @@ -3,7 +3,7 @@ # # Copyright (C) 2010 Apple, Inc. # -# == Overview +# == Overview == # # Grand Central Dispatch (GCD) is a novel approach to multicore computing # first released in Mac OS X version 10.6 Snow Leopard. @@ -12,11 +12,11 @@ # This library provides higher-level services and convenience methods # to make it easier for traditional Ruby programmers to add multicore support. -raise "Dispatch will only work on Mac OS X 10.6 or later" if MACOSX_VERSION < 10.6 +raise "Dispatch only works on Mac OS X 10.6 or later" if MACOSX_VERSION < 10.6 require 'dispatch/actor' require 'dispatch/dispatch' +require 'dispatch/enumerable' +require 'dispatch/futures' require 'dispatch/queue' require 'dispatch/queue_source' -require 'dispatch/enumerable' -require 'dispatch/futures'