UNPKG

gnablib

Version:

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

2 lines 1.17 kB
/*! Copyright 2023-2025 the gnablib contributors MPL-1.1 */ import{U32 as t}from"../primitive/number/U32Static.js";import{asBE as s,asLE as i}from"../endian/platform.js";import{AHashsum32 as e}from"./_AHashsum.js";const h=3432918353,_=461845907;export class Murmur3_32 extends e{constructor(t=0){super(4,4),this._b32=new Uint32Array(this._b8.buffer),this._seed=t,this._state=t}hash(){i.i32(this._b8),this._state^=Math.imul(t.lRot(Math.imul(this._b32[0],h),15),_),this._state=Math.imul(t.lRot(this._state,13),5)+3864292196,this._bPos=0}clone(){const t=new Murmur3_32(this._seed);return t._state=this._state,t._b32.set(this._b32),t._ingestBytes=this._ingestBytes,t._bPos=this._bPos,t}sumIn(){this._bPos>0&&(this._b8.fill(0,this._bPos),i.i32(this._b8),this._state^=Math.imul(t.lRot(Math.imul(this._b32[0],h),15),_)),this._state^=this._ingestBytes,this._state^=this._state>>>16,this._state=Math.imul(this._state,2246822507),this._state^=this._state>>>13,this._state=Math.imul(this._state,3266489909),this._state^=this._state>>>16;const e=Uint32Array.of(this._state),a=new Uint8Array(e.buffer);return s.i32(a),a}sum32(){const t=this.clone();return t.sumIn(),t._state>>>0}}