UNPKG

@graffy/common

Version:

Common libraries that used by various Graffy modules.

50 lines (39 loc) 1.39 kB
import alpha from './alphabet'; function getByte(view, offset) { return offset < view.byteLength ? view.getUint8(offset) : 0; } function getChar(string, offset) { return offset < string.length ? alpha.indexOf(string[offset]) : 0; } export function encode(u8Arr) { var buffer = u8Arr.buffer, byteOffset = u8Arr.byteOffset, byteLength = u8Arr.byteLength; var view = new DataView(buffer, byteOffset, byteLength); var str = ''; for (var i = 0; i < view.byteLength; i += 3) { var value = (getByte(view, i) << 16) + (getByte(view, i + 1) << 8) + getByte(view, i + 2); var gstr = ''; for (var j = 0; j < 4; j++) { gstr = alpha[value & 0x3f] + gstr; value = value >> 6 | 0; } str += gstr; } return str.substr(0, Math.ceil(view.byteLength * 4 / 3)); } export function decode(string, start) { if (start === void 0) { start = 0; } var buffer = new ArrayBuffer(Math.floor((string.length - start) * 3 / 4)); var view = new DataView(buffer); for (var i = start; i < string.length; i += 4) { var value = (getChar(string, i) << 18) + (getChar(string, i + 1) << 12) + (getChar(string, i + 2) << 6) + getChar(string, i + 3); for (var j = i * 3 / 4 + 2; j >= i * 3 / 4; j--) { if (j < view.byteLength) view.setUint8(j, value & 0xff); value = value >> 8 | 0; } } return new Uint8Array(buffer); }