gnablib
Version:
A lean, zero dependency library to provide a useful base for your project.
2 lines • 1.58 kB
JavaScript
/*! Copyright 2023-2025 the gnablib contributors MPL-1.1 */
import{asBE as t,asLE as s}from"../endian/platform.js";import{AHashsum32 as e}from"./_AHashsum.js";export class Lookup2 extends e{constructor(t=0){super(4,12),this._state=Uint32Array.of(2654435769,2654435769,0),this._b32=new Uint32Array(this._b8.buffer),this._state[2]=t,this._seed=this._state[2]}hash(){s.i32(this._b8,0,3),this._state[0]+=this._b32[0],this._state[1]+=this._b32[1],this._state[2]+=this._b32[2],this._state[0]-=this._state[1]+this._state[2],this._state[0]^=this._state[2]>>>13,this._state[1]-=this._state[2]+this._state[0],this._state[1]^=this._state[0]<<8,this._state[2]-=this._state[0]+this._state[1],this._state[2]^=this._state[1]>>>13,this._state[0]-=this._state[1]+this._state[2],this._state[0]^=this._state[2]>>>12,this._state[1]-=this._state[2]+this._state[0],this._state[1]^=this._state[0]<<16,this._state[2]-=this._state[0]+this._state[1],this._state[2]^=this._state[1]>>>5,this._state[0]-=this._state[1]+this._state[2],this._state[0]^=this._state[2]>>>3,this._state[1]-=this._state[2]+this._state[0],this._state[1]^=this._state[0]<<10,this._state[2]-=this._state[0]+this._state[1],this._state[2]^=this._state[1]>>>15,this._bPos=0}clone(){const t=new Lookup2(this._seed);return t._state.set(this._state),t._b32.set(this._b32),t._ingestBytes=this._ingestBytes,t._bPos=this._bPos,t}sumIn(){this._state[2]+=this._ingestBytes,this._b8.fill(0,this._bPos),this.hash();const s=new Uint8Array(this._state.slice(2).buffer);return t.i32(s),s}sum32(){const t=this.clone();return t.sumIn(),t._state[2]}}