getPut implemented in ringbuffer and test
authorBill Allen <[email protected]>
Sun, 10 Feb 2008 19:10:03 +0000 (10 14:10 -0500)
committerBill Allen <[email protected]>
Sun, 10 Feb 2008 19:10:03 +0000 (10 14:10 -0500)
com/wha/modsynth/RingBuffer.scala
com/wha/modsynth_test/TestRingBuffer.scala

index 250f525..eebe2c4 100644 (file)
@@ -10,8 +10,8 @@ abstract class RingBuffer[A] (size: Int) {
   var N = size
   var elems = new Array[A](N)
 
-  def getPut(pf:(Unit => A), gf:(Unit => A)): A = {
-    val x = gf(get)
+  def getPut(pf:(A => A)): A = {
+    val x = get
     put(pf(x))
     x
   }
index a49514c..62a7db6 100644 (file)
@@ -14,20 +14,21 @@ object TestRingBuffer {
       },
       delay) // in milliseconds
 
-    def main(args: Array[String]) {
-      val buf = new FloatRingBuffer(100)
-      var cnt = 100.0f
-      def produceString = { cnt }
-      def consumeString(ss: Float) = println(ss)
-      spawn { 
-        while (true) { 
-          val sig = 100.0f
-         val fx = buf.get
-          println (sig + fx * 0.5)
-          buf.put(sig + fx * 0.1f)
-        } 
-      }
-      kill(100)
-    }
+  def computePut(sig: Float)(x: Float): Float = {
+    sig + x * 0.1f    
+  }
+  
+  def main(args: Array[String]) {
+    val buf = new FloatRingBuffer(100)
+    var cnt = 100.0f
+    def produceString = { cnt }
+    def consumeString(ss: Float) = println(ss)
+    List.range(1, 1000).foreach(x => {
+      val sig = 100.0f
+      val fput = computePut(sig)_
+      val fx = buf.getPut(fput) 
+      println(sig + fx * 0.5f)
+    })
+  }
 
 }