[macruby-changes] [3468] MacRuby/trunk/sample-macruby/Scripts/gcd/ring_buffer.rb
source_changes at macosforge.org
source_changes at macosforge.org
Tue Feb 9 15:25:07 PST 2010
Revision: 3468
http://trac.macosforge.org/projects/ruby/changeset/3468
Author: ernest.prabhakar at gmail.com
Date: 2010-02-09 15:25:06 -0800 (Tue, 09 Feb 2010)
Log Message:
-----------
Added serial version of ring_buffer to gcd sample
Added Paths:
-----------
MacRuby/trunk/sample-macruby/Scripts/gcd/ring_buffer.rb
Added: MacRuby/trunk/sample-macruby/Scripts/gcd/ring_buffer.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Scripts/gcd/ring_buffer.rb (rev 0)
+++ MacRuby/trunk/sample-macruby/Scripts/gcd/ring_buffer.rb 2010-02-09 23:25:06 UTC (rev 3468)
@@ -0,0 +1,63 @@
+#!/usr/bin/env ruby
+
+N_NODES = ARGV[0] || 4
+M_MESSAGES = ARGV[1] || 3
+
+class Node
+ attr_accessor :successor
+ attr :index
+ def initialize(index, successor)
+ @index = index
+ @successor = successor
+ @current = 0
+ end
+
+ def call(m)
+ case m
+ when 0
+ return
+ when @current
+ call(m-1)
+ else
+ puts "#{self}.call #{m}"
+ @current = m
+ @successor.call(m)
+ end
+ end
+
+ def to_s
+ "#{@index}->[#{@successor.index}]@#{@current}"
+ end
+end
+
+class Ring
+ def initialize(n)
+ @nodes = []
+ setup(n)
+ end
+
+ def setup(n)
+ last = nil
+ n.downto(1) do |i|
+ @nodes << Node.new(i, last)
+ last = @nodes[-1]
+ end
+ @nodes[0].successor = last
+ end
+
+ def call(m)
+ @nodes[0].call(m)
+ end
+
+ def to_s
+ @nodes.join " | "
+ end
+end
+
+1.upto N_NODES do |n|
+ ring = Ring.new n
+ puts "\nRing of size #{n}: #{ring}"
+ 1.upto(M_MESSAGES) { |m| puts "m=#{m}"; ring.call m }
+end
+
+
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100209/3941f436/attachment-0001.html>
More information about the macruby-changes
mailing list