multimath
Version:
Core to create fast image math in WebAssembly and JS.
47 lines (33 loc) • 1.07 kB
JavaScript
// base64 decode str -> Uint8Array, to load WA modules
//
;
var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
module.exports = function base64decode(str) {
var input = str.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan
max = input.length;
var out = new Uint8Array((max * 3) >> 2);
// Collect by 6*4 bits (3 bytes)
var bits = 0;
var ptr = 0;
for (var idx = 0; idx < max; idx++) {
if ((idx % 4 === 0) && idx) {
out[ptr++] = (bits >> 16) & 0xFF;
out[ptr++] = (bits >> 8) & 0xFF;
out[ptr++] = bits & 0xFF;
}
bits = (bits << 6) | BASE64_MAP.indexOf(input.charAt(idx));
}
// Dump tail
var tailbits = (max % 4) * 6;
if (tailbits === 0) {
out[ptr++] = (bits >> 16) & 0xFF;
out[ptr++] = (bits >> 8) & 0xFF;
out[ptr++] = bits & 0xFF;
} else if (tailbits === 18) {
out[ptr++] = (bits >> 10) & 0xFF;
out[ptr++] = (bits >> 2) & 0xFF;
} else if (tailbits === 12) {
out[ptr++] = (bits >> 4) & 0xFF;
}
return out;
};