[macruby-changes] [3470] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Tue Feb 9 15:25:55 PST 2010
Revision: 3470
http://trac.macosforge.org/projects/ruby/changeset/3470
Author: ernest.prabhakar at gmail.com
Date: 2010-02-09 15:25:55 -0800 (Tue, 09 Feb 2010)
Log Message:
-----------
Dispatch::Future has_a Group again, not is_a
Modified Paths:
--------------
MacRuby/trunk/lib/dispatch/dispatch.rb
MacRuby/trunk/lib/dispatch/future.rb
MacRuby/trunk/spec/macruby/library/dispatch/dispatch_spec.rb
MacRuby/trunk/spec/macruby/library/dispatch/future_spec.rb
Modified: MacRuby/trunk/lib/dispatch/dispatch.rb
===================================================================
--- MacRuby/trunk/lib/dispatch/dispatch.rb 2010-02-09 23:25:29 UTC (rev 3469)
+++ MacRuby/trunk/lib/dispatch/dispatch.rb 2010-02-09 23:25:55 UTC (rev 3470)
@@ -43,7 +43,7 @@
# Run the +&block+ asynchronously on a concurrent queue of the given
# (optional) +priority+ as part of a Future, which is returned for use with
- # +join+ or +value+ -- or as a Group, of which it is a subclass
+ # +join+ or +value+
def fork(priority=nil, &block)
Dispatch::Future.new(priority) &block
Modified: MacRuby/trunk/lib/dispatch/future.rb
===================================================================
--- MacRuby/trunk/lib/dispatch/future.rb 2010-02-09 23:25:29 UTC (rev 3469)
+++ MacRuby/trunk/lib/dispatch/future.rb 2010-02-09 23:25:55 UTC (rev 3470)
@@ -1,43 +1,37 @@
# Calculate the value of an object in the background
module Dispatch
- # Subclass of Dispatch::Group used to implement lazy Futures
- # By returning a value and duck-typing Thread +join+ and +value+
+ # Wrap Dispatch::Group to implement lazy Futures
+ # By duck-typing Thread +join+ and +value+
- class Future < Dispatch::Group
+ class Future
# Create a future that asynchronously dispatches the block
# to the default queue
- def initialize(&block)
- super
+ attr_accessor :group
+
+ def initialize(priority = nil, &block)
@value = nil
- Dispatch.group(self, nil) { @value = block.call }
+ @group = Group.new
+ Dispatch.group(@group, priority) { @value = block.call }
end
# Waits for the computation to finish
- alias_method :join, :wait
+ def join
+ group.wait
+ end
# Joins, then returns the value
# If a block is passed, invoke that asynchronously with the final value
# on the specified +queue+ (or else the default queue).
def value(queue = nil, &callback)
if not block_given?
- wait
+ group.wait
return @value
else
queue ||= Dispatch::Queue.concurrent
- notify(queue) { callback.call(@value) }
+ group.notify(queue) { callback.call(@value) }
end
end
end
- # Run the +&block+ asynchronously on a concurrent queue of the given
- # (optional) +priority+ as part of a Future, which is returned for use with
- # +join+ or +value+ -- or as a Group, of which it is a subclass
-
- def fork(&block)
- Dispatch::Future.new &block
- end
-
- module_function :fork
-
end
Modified: MacRuby/trunk/spec/macruby/library/dispatch/dispatch_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/library/dispatch/dispatch_spec.rb 2010-02-09 23:25:29 UTC (rev 3469)
+++ MacRuby/trunk/spec/macruby/library/dispatch/dispatch_spec.rb 2010-02-09 23:25:55 UTC (rev 3470)
@@ -83,15 +83,6 @@
g.join
$dispatch_gval.should == 42
end
-
- it "should return a Group for tracking execution of the passed block" do
- $dispatch_gval = 0
- g = Dispatch.fork { @actee.delay_set(42) }
- $dispatch_gval.should == 0
- g.should be_kind_of Dispatch::Group
- g.wait
- $dispatch_gval.should == 42
- end
end
end
Modified: MacRuby/trunk/spec/macruby/library/dispatch/future_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/library/dispatch/future_spec.rb 2010-02-09 23:25:29 UTC (rev 3469)
+++ MacRuby/trunk/spec/macruby/library/dispatch/future_spec.rb 2010-02-09 23:25:55 UTC (rev 3470)
@@ -13,9 +13,11 @@
it "should return a Future for tracking execution of the passed block" do
@future.should be_kind_of Dispatch::Future
end
+ end
+ describe :group do
it "should return an instance of Dispatch::Group" do
- @future.should be_kind_of Dispatch::Group
+ @future.group.should be_kind_of Dispatch::Group
end
end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100209/74055faf/attachment-0001.html>
More information about the macruby-changes
mailing list