ocean-subgraph/src/lzma/bit-tree-decoder.ts

42 lines
1.1 KiB
TypeScript

import { RangeDecoder } from './range-decoder';
import { LZMA } from './lzma';
/**
* LZMA Decoder
* @author Nidin Vinayakan
*/
export class BitTreeDecoder {
public probs: Uint16Array
private numBits: u32
constructor(numBits:u32) {
this.numBits = numBits
this.probs = new Uint16Array(1 << this.numBits)
}
@inline
public init(): void {
LZMA.INIT_PROBS(this.probs)
}
@inline
public decode(rc: RangeDecoder): u32 {
var m: u32 = 1
for (var i: u32 = 0; i < this.numBits; i++) m = (m << 1) + rc.decodeBit(this.probs, m)
return m - (1 << this.numBits)
}
@inline
public reverseDecode(rc: RangeDecoder): i32 {
return LZMA.BitTreeReverseDecode(this.probs, this.numBits, rc)
}
@inline
static constructArray(numBits: i32, len: i32): Array<BitTreeDecoder> {
var vec: BitTreeDecoder[] = new Array<BitTreeDecoder>(len)
for (var i: i32 = 0; i < len; i++) {
vec.__unchecked_set(i, new BitTreeDecoder(numBits))
}
return vec
}
}