UNPKG

starling-framework

Version:

A fast, productive library for 2D cross-platform development.

152 lines (134 loc) 3.69 kB
// Class: haxe.zip.HuffTools var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this $global.Object.defineProperty(exports, "__esModule", {value: true}); var __map_reserved = {}; // Imports var $hxClasses = require("./../../hxClasses_stub").default; var $import = require("./../../import_stub").default; function Type() {return require("./../../Type");} function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");} function haxe_zip_Huffman() {return require("./../../haxe/zip/Huffman");} function haxe_ds_IntMap() {return require("./../../haxe/ds/IntMap");} // Constructor var HuffTools = function() { } // Meta HuffTools.__name__ = ["haxe","zip","HuffTools"]; HuffTools.prototype = { treeDepth: function(t) { switch((Type().default).enumIndex(t)) { case 0: return 0; case 1: var b = t[3]; var a = t[2]; var da = this.treeDepth(a); var db = this.treeDepth(b); return 1 + (da < db ? da : db); case 2: throw new (js__$Boot_HaxeError().default)("assert"); break; } }, treeCompress: function(t) { var d = this.treeDepth(t); if(d == 0) { return t; } if(d == 1) { if((Type().default).enumIndex(t) == 1) { var b = t[3]; var a = t[2]; return (haxe_zip_Huffman().default).NeedBit(this.treeCompress(a),this.treeCompress(b)); } else { throw new (js__$Boot_HaxeError().default)("assert"); } } var size = 1 << d; var table = []; var _g1 = 0; var _g = size; while(_g1 < _g) { var i = _g1++; table.push((haxe_zip_Huffman().default).Found(-1)); } this.treeWalk(table,0,0,d,t); return (haxe_zip_Huffman().default).NeedBits(d,table); }, treeWalk: function(table,p,cd,d,t) { if((Type().default).enumIndex(t) == 1) { var b = t[3]; var a = t[2]; if(d > 0) { this.treeWalk(table,p,cd + 1,d - 1,a); this.treeWalk(table,p | 1 << cd,cd + 1,d - 1,b); } else { table[p] = this.treeCompress(t); } } else { table[p] = this.treeCompress(t); } }, treeMake: function(bits,maxbits,v,len) { if(len > maxbits) { throw new (js__$Boot_HaxeError().default)("Invalid huffman"); } var idx = v << 5 | len; if(bits.exists(idx)) { return (haxe_zip_Huffman().default).Found(bits.get(idx)); } v <<= 1; ++len; return (haxe_zip_Huffman().default).NeedBit(this.treeMake(bits,maxbits,v,len),this.treeMake(bits,maxbits,v | 1,len)); }, make: function(lengths,pos,nlengths,maxbits) { var counts = []; var tmp = []; if(maxbits > 32) { throw new (js__$Boot_HaxeError().default)("Invalid huffman"); } var _g1 = 0; var _g = maxbits; while(_g1 < _g) { var i = _g1++; counts.push(0); tmp.push(0); } var _g11 = 0; var _g2 = nlengths; while(_g11 < _g2) { var i1 = _g11++; var p = lengths[i1 + pos]; if(p >= maxbits) { throw new (js__$Boot_HaxeError().default)("Invalid huffman"); } counts[p]++; } var code = 0; var _g12 = 1; var _g3 = maxbits - 1; while(_g12 < _g3) { var i2 = _g12++; code = code + counts[i2] << 1; tmp[i2] = code; } var bits = new (haxe_ds_IntMap().default)(); var _g13 = 0; var _g4 = nlengths; while(_g13 < _g4) { var i3 = _g13++; var l = lengths[i3 + pos]; if(l != 0) { var n = tmp[l - 1]; tmp[l - 1] = n + 1; bits.set(n << 5 | l,i3); } } return this.treeCompress((haxe_zip_Huffman().default).NeedBit(this.treeMake(bits,maxbits,0,1),this.treeMake(bits,maxbits,1,1))); } }; HuffTools.prototype.__class__ = HuffTools.prototype.constructor = $hxClasses["haxe.zip.HuffTools"] = HuffTools; // Init // Statics // Export exports.default = HuffTools;