123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.DecompressionTable = void 0;
- const JsonPackExtension_1 = require("../JsonPackExtension");
- const isSafeInteger = Number.isSafeInteger;
- class DecompressionTable {
- constructor() {
- this.table = [];
- }
- importTable(rleTable) {
- const length = rleTable.length;
- if (!length)
- return;
- const table = this.table;
- const first = rleTable[0];
- table.push(first);
- let i = 1;
- if (isSafeInteger(first)) {
- let prev = first;
- let value;
- while (i < length) {
- value = rleTable[i];
- if (isSafeInteger(value)) {
- prev = prev + value;
- table.push(prev);
- i++;
- }
- else {
- break;
- }
- }
- }
- while (i < length)
- table.push(rleTable[i++]);
- }
- getLiteral(index) {
- const table = this.table;
- return table[index];
- }
- decompress(value) {
- switch (typeof value) {
- case 'number': {
- return this.getLiteral(value);
- }
- case 'object': {
- if (!value)
- return null;
- const constructor = value.constructor;
- switch (constructor) {
- case Object: {
- const obj = value;
- const newObj = {};
- for (const key in obj)
- newObj[String(this.getLiteral(Number(key)))] = this.decompress(obj[key]);
- return newObj;
- }
- case Array: {
- const arr = value;
- const newArr = [];
- const len = arr.length;
- for (let i = 0; i < len; i++)
- newArr.push(this.decompress(arr[i]));
- return newArr;
- }
- case Map: {
- const map = value;
- const newMap = new Map();
- map.forEach((value, key) => {
- newMap.set(this.decompress(key), this.decompress(value));
- });
- return newMap;
- }
- case Set: {
- const set = value;
- const newSet = new Set();
- set.forEach((value) => {
- newSet.add(this.decompress(value));
- });
- break;
- }
- case JsonPackExtension_1.JsonPackExtension: {
- const ext = value;
- const newExt = new JsonPackExtension_1.JsonPackExtension(Number(this.getLiteral(ext.tag)), this.decompress(ext.val));
- return newExt;
- }
- }
- return value;
- }
- default: {
- return value;
- }
- }
- }
- }
- exports.DecompressionTable = DecompressionTable;
- //# sourceMappingURL=DecompressionTable.js.map
|