wblk method
dynamic
wblk()
Implementation
wblk(List<int> dat, List<int> out, int fineL, List syms, List<int> lf, List<int> df, int eb, int li,int bs, int bl, p) {
wbits(out, p++, fineL);
++lf[256];
var _a = hTree(lf, 15), dlt = _a['t'], mlb = _a['l'];
var _b = hTree(df, 15), ddt = _b['t'], mdb = _b['l'];
var _c = lc(dlt), lclt = _c['c'], nlc = _c['n'];
var _d = lc(ddt), lcdt = _d['c'], ndc = _d['n'];
u16 lcfreq = u16(19);
for (int i = 0; i < lclt.length; ++i){
++lcfreq[lclt[i] & 31];
}
for (int i = 0; i < lcdt.length; ++i){
++lcfreq[lcdt[i] & 31];
}
var _e = hTree(lcfreq, 7), lct = _e['t'], mlcb = _e['l'];
int nlcc = 19;
for (; nlcc > 4 && (lct[clim[nlcc - 1]] == null); --nlcc);
int flen = (bl + 5) << 3;
var ftlen = clen(lf, flt) + clen(df, fdt) + eb;
var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];
if (bs >= 0 && flen <= ftlen && flen <= dtlen){
return wfblk(out, p, dat.sublist(bs, bs + bl));
}
var lm, ll, dm, dl;
wbits(out, p, 1 + (dtlen < ftlen ? 1 : 0));//1 + (dtlen < ftlen));
p += 2;
if (dtlen < ftlen) {
lm = hMap(dlt, mlb, 0);
ll = dlt;
dm = hMap(ddt, mdb, 0);
dl = ddt;
var llm = hMap(lct, mlcb, 0);
wbits(out, p, nlc - 257);
wbits(out, p + 5, ndc - 1);
wbits(out, p + 10, nlcc - 4);
p += 14;
for (int i = 0; i < nlcc; ++i){
wbits(out, p + 3 * i, lct[clim[i]]);
}
p += 3 * nlcc;
var lcts = [lclt, lcdt];
for (int it = 0; it < 2; ++it) {
var clct = lcts[it];
for (int i = 0; i < clct.length; ++i) {
int len = clct[i] & 31;
wbits(out, p, llm[len]);
p += lct[len];
if (len > 15){
wbits(out, p, (clct[i] >> 5) & 127);
p += clct[i] >> 12;
}
}
}
}
else {
lm = flm;
ll = flt;
dm = fdm;
dl = fdt;
}
for (int i = 0; i < li; ++i) {
var sym = syms[i];
if (sym > 255) {
int len = (sym >> 18) & 31;
wbits16(out, p, lm[len + 257]);
p += ll[len + 257];
if (len > 7){
wbits(out, p, (sym >> 23) & 31);
p += fleb[len];
}
int dst = sym & 31;
wbits16(out, p, dm[dst]);
p += dl[dst];
if (dst > 3){
wbits16(out, p, (sym >> 5) & 8191);
p += fdeb[dst];
}
}
else {
wbits16(out, p, lm[sym]);
p += ll[sym];
}
}
wbits16(out, p, lm[256]);
return p + ll[256];
}