UNPKG

multimath

Version:

Core to create fast image math in WebAssembly and JS.

47 lines (33 loc) 1.07 kB
// base64 decode str -> Uint8Array, to load WA modules // 'use strict'; 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; };