@phensley/cldr-core
Version:
Core library for @phensley/cldr
61 lines • 1.93 kB
JavaScript
// Simple base-100 UTF-8-safe encoding of numbers. With 64-bit bitwise
// operations we could do a variable-length encoding of numbers up to
// Number.MAX_SAFE_INTEGER. Since JavaScript's bitwise operations only
// support 32-bit numbers, we do this compromise.
Object.defineProperty(exports, "__esModule", { value: true });
// The minus symbol is reserved to indicate negative numbers, and period is
// reserved in case of future support of encoding floating point numbers.
exports.ENCODE = '' +
'!#$%&()*+,0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
'[]^_abcdefghijklmnopqrstuvwxyz{|}~¢£¥¦§©«±µ»¼½¾';
var DECODE = exports.ENCODE.split('').reduce(function (o, ch, i) {
o[ch] = i;
return o;
}, {});
exports.base100encode = function (orig) {
if (orig === 0) {
return exports.ENCODE[0];
}
var res = orig < 0 ? '-' : '';
var n = Math.abs(orig);
while (n >= 100) {
var i = n % 100;
res += exports.ENCODE[i];
n = Math.floor(n / 100);
}
return n > 0 ? res + exports.ENCODE[n] : res;
};
exports.base100decode = function (s) {
var len = s.length;
if (len === 0) {
return 0;
}
var lim = s[0] === '-' ? 1 : 0;
var n = 0;
for (var i = s.length - 1; i >= lim; i--) {
var ch = s[i];
n *= 100;
n += DECODE[ch];
}
return lim === 1 ? -n : n;
};
exports.bitarrayCreate = function (bits) {
var data = new Array((bits.length >>> 5) + 1);
for (var i = 0; i < bits.length; i++) {
var idx = i >>> 5;
var bit = bits[i];
if (bit === 0) {
data[idx] &= ~(1 << i);
}
else {
data[idx] |= (1 << i);
}
}
return data;
};
exports.bitarrayGet = function (data, i) {
var idx = i >>> 5;
return idx < data.length ? ((data[idx] >>> (i % 32)) & 1) === 1 : false;
};
//# sourceMappingURL=encoding.js.map
;