Chris@7
|
1 "use strict";
|
Chris@7
|
2
|
Chris@8
|
3 var crossModule = CrossModule({});
|
Chris@8
|
4
|
Chris@8
|
5 var fftCross = crossModule.cwrap(
|
Chris@7
|
6 'fftCross', 'void', ['number', 'number', 'number',
|
Chris@7
|
7 'number', 'number', 'number' ]
|
Chris@7
|
8 );
|
Chris@7
|
9
|
Chris@7
|
10 function FFTCross(size) {
|
Chris@7
|
11 this.size = size;
|
Chris@7
|
12 this.n = size * 8;
|
Chris@8
|
13 this.ptr = crossModule._malloc(this.n * 4);
|
Chris@8
|
14 this.ri = new Uint8Array(crossModule.HEAPU8.buffer, this.ptr, this.n);
|
Chris@8
|
15 this.ii = new Uint8Array(crossModule.HEAPU8.buffer, this.ptr + this.n, this.n);
|
Chris@7
|
16 this.transform = function(real, imag, inverse) {
|
Chris@7
|
17 var ptr = this.ptr;
|
Chris@7
|
18 var n = this.n;
|
Chris@7
|
19 this.ri.set(new Uint8Array(real.buffer));
|
Chris@7
|
20 this.ii.set(new Uint8Array(imag.buffer));
|
Chris@7
|
21 fftCross(this.size, inverse,
|
Chris@7
|
22 ptr, ptr + n, ptr + n * 2, ptr + n * 3);
|
Chris@8
|
23 var ro = new Float64Array(crossModule.HEAPU8.buffer, ptr + n * 2, this.size);
|
Chris@8
|
24 var io = new Float64Array(crossModule.HEAPU8.buffer, ptr + n * 3, this.size);
|
Chris@21
|
25 return { real: ro, imag: io };
|
Chris@7
|
26 }
|
Chris@7
|
27 this.transformReal = function(real, inverse) {
|
Chris@7
|
28 var ptr = this.ptr;
|
Chris@7
|
29 var n = this.n;
|
Chris@7
|
30 this.ri.set(new Uint8Array(real.buffer));
|
Chris@7
|
31 fftCross(this.size, inverse,
|
Chris@7
|
32 ptr, 0, ptr + n * 2, ptr + n * 3);
|
Chris@8
|
33 var ro = new Float64Array(crossModule.HEAPU8.buffer, ptr + n * 2, this.size);
|
Chris@8
|
34 var io = new Float64Array(crossModule.HEAPU8.buffer, ptr + n * 3, this.size);
|
Chris@21
|
35 return { real: ro, imag: io };
|
Chris@7
|
36 }
|
Chris@19
|
37 this.dispose = function() {
|
Chris@8
|
38 crossModule._free(this.ptr);
|
Chris@7
|
39 }
|
Chris@7
|
40 }
|
Chris@7
|
41
|