UNPKG

gnablib

Version:

A lean, zero dependency library to provide a useful base for your project.

2 lines 1.04 kB
/*! Copyright 2024-2025 the gnablib contributors MPL-1.1 */ import{sInt as t}from"../safe/safe.js";import{AByteReader as r}from"./_AByteReader.js";const i=Symbol.for("nodejs.util.inspect.custom"),s=[0,1,3,7,15,31,63,127];export class BitReader extends r{constructor(){super(...arguments),this._bitPtr=0}get unreadBits(){return 8*(this._buff.length-this._ptr)-this._bitPtr}readNumberBE(t){if(t>this.unreadBits)throw new Error("not enough content");let r=0,i=8-this._bitPtr;if(t<i)return i-=t,this._bitPtr+=t,r=this._buff[this._ptr]>>>i&s[t],r;for(this._bitPtr>0&&(r=this._buff[this._ptr++]&s[i],t-=i,this._bitPtr=0);t>=8;)r=r<<8|this._buff[this._ptr++],t-=8;return t>0&&(r=r<<t|this._buff[this._ptr]>>>8-t,this._bitPtr=t),r}skipBits(r){t("count",r).unsigned().atMost(this.unreadBits).throwNot();let i=r/8|0;this._bitPtr+=7&r,this._bitPtr>7&&(i+=1,this._bitPtr-=8),this._ptr+=i}get[Symbol.toStringTag](){return"BitReader"}[i](){return`BitReader([${this._buff.length}]@${this._ptr}.${this._bitPtr})`}static mount(t){return new BitReader(t)}}