[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