diff fvector.yeti @ 35:1f80673af4c7

Make concat take a list of arbitrary length; test it, and improve test output
author Chris Cannam
date Sat, 22 Dec 2012 10:08:06 +0000
parents 22880f531e5a
children fa49869bda51
line wrap: on
line diff
--- a/fvector.yeti	Fri Dec 21 22:56:45 2012 +0000
+++ b/fvector.yeti	Sat Dec 22 10:08:06 2012 +0000
@@ -39,12 +39,16 @@
 resizedTo n v is number -> ~double[] -> ~double[] =
     Arrays#copyOf(v, n);
 
-concat v1 v2 is ~double[] -> ~double[] -> ~double[] =
-   (v1len = length' v1;
-    v2len = length' v2;
-    v = resizedTo (v1len + v2len) v1;
-    for [0..v2len-1] do i: v[v1len + i] := v2[i] done;
-    v);
+concat vv is list?<~double[]> -> ~double[] =
+   (len = sum (map length' vv);
+    vout = zeros len;
+    var base = 0;
+    for vv do v: 
+        vlen = length' v;
+        for [0..vlen-1] do i: vout[base + i] := v[i] done;
+        base := base + vlen;
+    done;
+    vout);
 
 {
 zeros, ones,