gnablib
Version:
A lean, zero dependency library to provide a useful base for your project.
2 lines • 1.1 kB
JavaScript
/*! Copyright 2023-2025 the gnablib contributors MPL-1.1 */
const t=4294967295;export class Fletcher16{constructor(){this._modSpace=t,this._c0=0,this._c1=0,this.size=2}mod(){this._c0%=255,this._c1%=255,this._modSpace=t}write(t){let s=0;for(;t.length>this._modSpace;){for(;s<this._modSpace;s++)this._c0+=t[s],this._c1+=this._c0;this.mod()}for(this._modSpace-=t.length-s;s<t.length;s++)this._c0+=t[s],this._c1+=this._c0}sum16(){return this._modSpace<t&&this.mod(),this._c1<<8|this._c0}sum(){return this._modSpace<t&&this.mod(),Uint8Array.of(this._c1,this._c0)}}export class Fletcher32{constructor(){this._modSpace=t,this._c0=0,this._c1=0,this.size=4}mod(){this._c0%=65535,this._c1%=65535,this._modSpace=t}write(t){let s=0;for(;t.length>this._modSpace;){for(;s<this._modSpace;s++)this._c0+=t[s++]|t[s]<<8,this._c1+=this._c0;this.mod()}for(this._modSpace-=t.length-s;s<t.length;s++)this._c0+=t[s++]|t[s]<<8,this._c1+=this._c0}sum32(){return this._modSpace<t&&this.mod(),(this._c1<<16|this._c0)>>>0}sum(){return this._modSpace<t&&this.mod(),Uint8Array.of(this._c1>>>8,this._c1,this._c0>>>8,this._c0)}}