UNPKG

gnablib

Version:

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

2 lines 1.08 kB
/*! Copyright 2024-2025 the gnablib contributors MPL-1.1 */ import{sInt as t}from"../safe/safe.js";import{AByteWriter as r}from"./_AByteWriter.js";const i=Symbol.for("nodejs.util.inspect.custom");export class BitWriter extends r{constructor(){super(...arguments),this._bitPtr=0}get spaceBits(){return 8*(this._buff.length-this._ptr)-this._bitPtr}pushNumberBE(t,r){let i=0==this._bitPtr?0:this._buff[this._ptr];if(0==r)return!0;if(this._ptr==this._buff.length)return!1;let s=8-this._bitPtr;for(;r>=s;)if(r-=s,this._buff[this._ptr]=i|t>>>r,this._bitPtr=0,s=8,i=0,++this._ptr==this._buff.length)return 0===r;return r>0&&(this._buff[this._ptr]=i|t<<8-r-this._bitPtr,this._bitPtr+=r),!0}mustPushNumberBE(t,r){if(!this.pushNumberBE(t,r))throw new Error("not enough space")}skipBits(r){t("count",r).unsigned().atMost(this.spaceBits).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"BitWriter"}[i](){return`BitWriter([${this._buff.length}]@${this._ptr}.${this._bitPtr})`}static mount(t){return new BitWriter(t)}}