UNPKG

gnablib

Version:

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

2 lines 908 B
/*! Copyright 2024-2025 the gnablib contributors MPL-1.1 */ import{asLE as t}from"../endian/platform.js";import{U64 as r,U64Mut as i}from"../primitive/number/U64.js";import{sLen as s}from"../safe/safe.js";import{APrng64 as e}from"./APrng64.js";const o=r.fromI32s(2135587861,2654435769),n=r.fromI32s(484763065,3210233709),m=r.fromI32s(321982955,2496678331);export class SplitMix64 extends e{constructor(){super(...arguments),this.bitGen=64,this.safeBits=64}rawNext(){const t=this._state.addEq(o).mut();return t.xorEq(t.rShift(30)).mulEq(n),t.xorEq(t.rShift(27)).mulEq(m),t.xorEq(t.rShift(31))}get[Symbol.toStringTag](){return"splitmix64"}static new(t=!1){return new SplitMix64(i.fromI32s(0,0),t)}static seed(t,r=!1){return new SplitMix64(t.mut(),r)}static restore(r,e=!1){s("state",r).exactly(8).throwNot();const o=r.slice();t.i32(o,0,2);const n=new Uint32Array(o.buffer);return new SplitMix64(i.mount(n),e)}}