gnablib
Version:
A lean, zero dependency library to provide a useful base for your project.
2 lines • 784 B
JavaScript
/*! Copyright 2023-2025 the gnablib contributors MPL-1.1 */
import{U64 as t}from"../primitive/number/U64.js";const s=65535;export class Fletcher64{constructor(){this._modSpace=s,this._c0=0,this._c1=0,this.size=8}mod(){this._c0%=4294967295,this._c1%=4294967295,this._modSpace=s}write(t){let s=0;for(;t.length>this._modSpace;){for(;s<this._modSpace;s++)this._c0+=(t[s++]|t[s++]<<8|t[s++]<<16|t[s]<<24)>>>0,this._c1+=this._c0;this.mod()}for(this._modSpace-=t.length-s;s<t.length;s++)this._c0+=(t[s++]|t[s++]<<8|t[s++]<<16|t[s]<<24)>>>0,this._c1+=this._c0}sum64(){return this._modSpace<s&&this.mod(),t.fromI32s(this._c0,this._c1)}sum(){return this._modSpace<s&&this.mod(),Uint8Array.of(this._c1>>>24,this._c1>>>16,this._c1>>>8,this._c1,this._c0>>>24,this._c0>>>16,this._c0>>>8,this._c0)}}