canonical codes logic

callbackを経由してcanonical codesを計算。
冗長なツリー探索なし。

generator

define Uint8Array.prototype

1. declare value, values
const v=reduce(false,this,(a,v)=>a.limit(false,v),0),vs=new Uint16Array(2+v)

2. set values
forEach(false,this,(v,i)=>0<v&&vs[1+v]++)
forEach(false,v,(_,i)=>vs[1+i]=vs[i]+vs[1+i]<<1)

3. return
return map(false,new Uint32Array(this),v=>v?c(vs[v]++,v)<<8|v:0)