-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun_reverse.js
63 lines (49 loc) · 1.37 KB
/
run_reverse.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
const fs = require('fs');
/** @type Uint16Array */
var heap;
/** @type WebAssembly.Instance */
var wasmInstance;
async function init() {
return new Promise((resolve, reject) => {
fs.readFile("reverse.wasm", (err, data) => {
if (err) {
reject(err);
return;
}
const wasmSource = new Uint8Array(data);
const wasmModule = new WebAssembly.Module(wasmSource);
const instance = new WebAssembly.Instance(wasmModule);
// obtain the offset to the array
// https://stackoverflow.com/a/46748966/1000891
const offset = instance.exports.getDataOffset();
const size = instance.exports.getSize();
console.log('offset', offset, 'size', size);
// put in global scope
wasmInstance = instance;
// C int data size is 32 bits
heap = new Int32Array(wasmInstance.exports.memory.buffer, offset, size);
resolve();
});
});
}
function reverse(arr) {
for (let i = 0; i < arr.length; ++i) {
heap[i] = arr[i];
}
wasmInstance.exports.reverse(arr.length);
const result = [];
for (let i = 0; i < arr.length; ++i) {
result.push(heap[i]);
}
return result;
};
async function main() {
try {
await init()
const numbers = [14, 3, 77, -4254, 66];
console.log(numbers, 'becomes', reverse(numbers));
} catch (err) {
console.error(err);
}
}
main();