[macruby-changes] [4327] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Wed Jul 7 16:06:50 PDT 2010


Revision: 4327
          http://trac.macosforge.org/projects/ruby/changeset/4327
Author:   ernest.prabhakar at gmail.com
Date:     2010-07-07 16:06:50 -0700 (Wed, 07 Jul 2010)
Log Message:
-----------
Finished testing dispatch_methods.rb

Modified Paths:
--------------
    MacRuby/trunk/lib/dispatch/README.rdoc
    MacRuby/trunk/sample-macruby/Scripts/gcd/dispatch_methods.rb
    MacRuby/trunk/spec/macruby/library/dispatch/queue_spec.rb

Modified: MacRuby/trunk/lib/dispatch/README.rdoc
===================================================================
--- MacRuby/trunk/lib/dispatch/README.rdoc	2010-07-07 23:06:48 UTC (rev 4326)
+++ MacRuby/trunk/lib/dispatch/README.rdoc	2010-07-07 23:06:50 UTC (rev 4327)
@@ -338,7 +338,7 @@
 	puts "resume!"
 	sleep 1 # => 1 2 1 ...
 
-If the +Source+ has fired one or more times, it will schedule a block containing the coalesced events. In this case, we were suspended for over 2 intervals, so the next block will fire with +data+ being at least 2.  
+If the +Source+ has fired one or more times, it will schedule a block containing the coalesced events. In this case, we were suspended for over 2 intervals, so the next block will fire with +data+ being at least 2.
 
 === Source#cancel!
 
@@ -516,13 +516,15 @@
 
 	@fevent = 0
 	@msg = "#{$$}-#{Time.now.to_s.gsub(' ','_')}"
+	puts "msg: #{@msg}"
 	filename = "/tmp/dispatch-#{@msg}"
+	puts "filename: #{filename}"
 	file = File.open(filename, "w")
 	fmask = Dispatch::Source::VNODE_DELETE | Dispatch::Source::VNODE_WRITE
 	file_src = Dispatch::Source.file(file.fileno, fmask, q) do |s|
 		puts "Dispatch::Source.file: #{s.data.to_s(2)} (#{(@fevent |= s.data).to_s(2)})"
 	end
-	file.puts @msg
+	file.print @msg
 	file.flush
 	file.close
 	q.sync {}
@@ -541,13 +543,11 @@
 		@fevent2 += Dispatch::Source.data2events(s.data)
 		puts "Dispatch::Source.file: #{Dispatch::Source.data2events(s.data)} (#{@fevent2})"
 	end
-	file.puts @msg
+	file.print @msg
 	file.flush
 	q.sync {}
 	puts "fevent2: #{@fevent2} => [:write]"
 	file_src2.cancel!
-	File.delete(filename)
-	exit
 	
 As a bonus, if you pass in an actual IO object (not just a file descriptor) the Dispatch library will automatically create a handler that closes the file for you when cancelled!
 
@@ -556,34 +556,37 @@
 In contrast to the previous sources, these next two refer to internal state rather than external events. Specifically, this +add+-style source avoids blocking on a +read+ by only calling the handler when it estimates there are +s.data+ unread bytes available in the buffer:  
 
 	file = File.open(filename, "r")
-	@result = ""
-	reader = Dispatch::Source.read(file) do |s|
-		@result << @file.read(s.data)
+	@input = ""
+	reader = Dispatch::Source.read(file, q) do |s|
+		@input << file.read(s.data)
+		puts "Dispatch::Source.read: #{s.data}: #{@input}"
 	end
-	while (@result.size < @msg.size) do; end
-	puts @result # => e.g., 489-Wed_Mar_24_15:59:00_-0700_2010
+	while (@input.size < @msg.size) do; end
+	q.sync {}
+	puts "input: #{@input} => msg" # => e.g., 74323-2010-07-07_15:23:10_-0700
 	reader.cancel!
 
-Strictly speaking, the count returned by +s.data+ is only an estimate. It would be safer to instead call + at file.read(1)+ to avoid any risk of blocking, but that would lead to many more block invocations, which might not be a net win.
+Strictly speaking, the count returned by +s.data+ is only an estimate. It would be safer to instead call + at file.read(1)+ each time to avoid any risk of blocking -- but that would lead to many more block invocations, which might not be a net win.
 
 ==== Source.write
 
 This +add+-style event is similar to the above, but waits until a +write+ buffer is available:
 
 	file = File.open(filename, "w")
-	@message = @msg
-	writer = Dispatch::Source.write(file) do |s|
+	@message = @msg.dup
+	writer = Dispatch::Source.write(file, q) do |s|
 		if @message.size > 0 then
 			char = @message[0..0]
-			@file.write(char)
-			@message = @message[1..-1]
+			file.write(char)
+			rest = @message[1..-1]
+			puts "Dispatch::Source.write: #{char}|#{rest}"
+			@message = rest
 		end
 	end
 	while (@message.size > 0) do; end
-	result = File.read(filename)
-	puts result # => e.g., 489-Wed_Mar_24_15:59:00_-0700_2010
+	puts "output: #{File.read(filename)} => msg" # e.g., 74323-2010-07-07_15:23:10_-0700
 
-In this case we play it safe by only writing out a single character at a time, to avoid risk of blocking (and simplify our algorithm).
+In this case we play it safe by only writing out a single character each time we are called, to avoid risk of blocking (and simplify our algorithm).
 
 = What's Next?
 

Modified: MacRuby/trunk/sample-macruby/Scripts/gcd/dispatch_methods.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Scripts/gcd/dispatch_methods.rb	2010-07-07 23:06:48 UTC (rev 4326)
+++ MacRuby/trunk/sample-macruby/Scripts/gcd/dispatch_methods.rb	2010-07-07 23:06:50 UTC (rev 4327)
@@ -177,13 +177,15 @@
 signal.cancel!
 @fevent = 0
 @msg = "#{$$}-#{Time.now.to_s.gsub(' ','_')}"
+puts "msg: #{@msg}"
 filename = "/tmp/dispatch-#{@msg}"
+puts "filename: #{filename}"
 file = File.open(filename, "w")
 fmask = Dispatch::Source::VNODE_DELETE | Dispatch::Source::VNODE_WRITE
 file_src = Dispatch::Source.file(file.fileno, fmask, q) do |s|
 	puts "Dispatch::Source.file: #{s.data.to_s(2)} (#{(@fevent |= s.data).to_s(2)})"
 end
-file.puts @msg
+file.print @msg
 file.flush
 file.close
 q.sync {}
@@ -200,32 +202,33 @@
 	@fevent2 += Dispatch::Source.data2events(s.data)
 	puts "Dispatch::Source.file: #{Dispatch::Source.data2events(s.data)} (#{@fevent2})"
 end
-file.puts @msg
+file.print @msg
 file.flush
 q.sync {}
 puts "fevent2: #{@fevent2} => [:write]"
 file_src2.cancel!
-File.delete(filename)
-exit
 
 file = File.open(filename, "r")
- at result = ""
-reader = Dispatch::Source.read(file) do |s|
-	@result << @file.read(s.data)
+ at input = ""
+reader = Dispatch::Source.read(file, q) do |s|
+	@input << file.read(s.data)
+	puts "Dispatch::Source.read: #{s.data}: #{@input}"
 end
-while (@result.size < @msg.size) do; end
-puts @result # => e.g., 489-Wed_Mar_24_15:59:00_-0700_2010
+while (@input.size < @msg.size) do; end
+q.sync {}
+puts "input: #{@input} => msg" # => e.g., 74323-2010-07-07_15:23:10_-0700
 reader.cancel!
 file = File.open(filename, "w")
- at message = @msg
-writer = Dispatch::Source.write(file) do |s|
+ at message = @msg.dup
+writer = Dispatch::Source.write(file, q) do |s|
 	if @message.size > 0 then
 		char = @message[0..0]
-		@file.write(char)
-		@message = @message[1..-1]
+		file.write(char)
+		rest = @message[1..-1]
+		puts "Dispatch::Source.write: #{char}|#{rest}"
+		@message = rest
 	end
 end
 while (@message.size > 0) do; end
-result = File.read(filename)
-puts result # => e.g., 489-Wed_Mar_24_15:59:00_-0700_2010
+puts "output: #{File.read(filename)} => msg" # e.g., 74323-2010-07-07_15:23:10_-0700
 	

Modified: MacRuby/trunk/spec/macruby/library/dispatch/queue_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/library/dispatch/queue_spec.rb	2010-07-07 23:06:48 UTC (rev 4326)
+++ MacRuby/trunk/spec/macruby/library/dispatch/queue_spec.rb	2010-07-07 23:06:50 UTC (rev 4327)
@@ -39,7 +39,7 @@
         @q.async {@n = 42}
         @n.should == 0
         @q.join
-        @n.should == 42        
+        @n.should == 42
       end
     end
   end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100707/074438d9/attachment.html>


More information about the macruby-changes mailing list