# HG changeset patch
# User Chris Cannam
# Date 1444042472 -3600
# Node ID 91d77df352fa7b9e502d936b58b4fd2c7e4421b1
# Parent b4ab69bdb4c88e6474e9c2af032b917fdc620e96
Make an object (& put allocation in it)
diff -r b4ab69bdb4c8 -r 91d77df352fa fft/cross/Crosswrap.js
--- 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("
start
");
-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 + "
");
-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 + "
");
+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("end
");