# 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

");