diff fft/cross/Crosswrap.js @ 6:91d77df352fa

Make an object (& put allocation in it)
author Chris Cannam
date Mon, 05 Oct 2015 11:54:32 +0100
parents b4ab69bdb4c8
children
line wrap: on
line diff
--- a/fft/cross/Crosswrap.js	Mon Oct 05 11:30:40 2015 +0100
+++ b/fft/cross/Crosswrap.js	Mon Oct 05 11:54:32 2015 +0100
@@ -1,27 +1,43 @@
+"use strict";
 
 document.write("<p>start</p>");
 
-fftCross = Module.cwrap(
+var fftCross = Module.cwrap(
     'fftCross', 'void', ['number', 'number', 'number', 'number', 'number', 'number' ]
 );
 
-var data = new Float64Array([1,1,1,1,1,1,1,1]);
-var n = data.length * data.BYTES_PER_ELEMENT;
-var ptr = Module._malloc(n * 4);
-var h1 = new Uint8Array(Module.HEAPU8.buffer, ptr, n);
-var h2 = new Uint8Array(Module.HEAPU8.buffer, ptr + n, n);
-document.write("ptr = " + ptr + ", h1 = " + h1 + "<br>");
-h1.set(new Uint8Array(data.buffer));
-h2.set(new Uint8Array(data.buffer));
-var result = fftCross(8, 0, ptr, ptr + n, ptr + 2*n, ptr + 3*n);
-var real = new Float64Array(Module.HEAPU8.buffer, ptr + 2*n, 8);
-var imag = new Float64Array(Module.HEAPU8.buffer, ptr + 3*n, 8);
-document.write("result: " + result + "<br>");
+function FFTCross(size) {
+    this.size = size;
+    this.n = size * 8;
+    this.ptr = Module._malloc(this.n * 4);
+    this.ri = new Uint8Array(Module.HEAPU8.buffer, this.ptr, this.n);
+    this.ii = new Uint8Array(Module.HEAPU8.buffer, this.ptr + this.n, this.n);
+    this.transform = function(real, imag, inverse) {
+	var ptr = this.ptr;
+	var n = this.n;
+	this.ri.set(new Uint8Array(real.buffer));
+	this.ii.set(new Uint8Array(imag.buffer));
+	fftCross(this.size, inverse,
+		 ptr, ptr + n, ptr + n * 2, ptr + n * 3);
+	var ro = new Float64Array(Module.HEAPU8.buffer,
+				  ptr + n * 2, this.size);
+	var io = new Float64Array(Module.HEAPU8.buffer,
+				  ptr + n * 2, this.size);
+	return { real: ro, imag: io };
+    }
+    this.discard = function() {
+	Module._free(this.ptr);
+    }
+}
+
+var f = new FFTCross(8);
+var real = new Float64Array([1,1,1,1,1,1,1,1]);
+var imag = new Float64Array([0,0,0,0,0,0,0,0]);
+var out = f.transform(real, imag, false);
 document.write("output: ");
 for (var i = 0; i < 8; ++i) {
-    document.write(real[i] + "," + imag[i] + " ");
+    document.write(out.real[i] + "," + out.imag[i] + " ");
 }
-Module._free(ptr);
 
 
 document.write("<p>end</p>");