@graffy/common
Version:
Common libraries that used by various Graffy modules.
61 lines (45 loc) • 1.76 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
exports.__esModule = true;
exports.encode = encode;
exports.decode = decode;
var _indexOf = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/index-of"));
var _alphabet = _interopRequireDefault(require("./alphabet"));
function getByte(view, offset) {
return offset < view.byteLength ? view.getUint8(offset) : 0;
}
function getChar(string, offset) {
return offset < string.length ? (0, _indexOf.default)(_alphabet.default).call(_alphabet.default, string[offset]) : 0;
}
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 = _alphabet.default[value & 0x3f] + gstr;
value = value >> 6 | 0;
}
str += gstr;
}
return str.substr(0, Math.ceil(view.byteLength * 4 / 3));
}
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);
}
;