UNPKG

gnablib

Version:

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

2 lines 1.25 kB
/*! Copyright 2025 the gnablib contributors MPL-1.1 */ import{asLE as t}from"../endian/platform.js";import{sLen as s}from"../safe/safe.js";import{APrng32 as e}from"./APrng32.js";export class Gjrand32b extends e{constructor(){super(...arguments),this.bitGen=32,this.safeBits=32}trueSave(){const s=this._state.slice(),e=new Uint8Array(s.buffer);return t.i32(e,0,4),e}rawNext(){return this._state[1]+=this._state[2],this._state[0]=this._state[0]<<16|this._state[0]>>>16,this._state[2]^=this._state[1],this._state[3]+=38565,this._state[0]+=this._state[1],this._state[2]=this._state[2]<<11|this._state[2]>>>21,this._state[1]^=this._state[0],this._state[0]+=this._state[2],this._state[1]=this._state[2]<<19|this._state[2]>>>13,this._state[2]+=this._state[0],this._state[1]+=this._state[3],this._state[0]}get[Symbol.toStringTag](){return"gjrand32b"}static new(t=!1){return new Gjrand32b(Uint32Array.of(2341650679,368028163,2033345459,539910),t)}static seed(t,s,e=!1){const a=Uint32Array.of(t,0,0,0);null!=s?(a[1]=s,a[2]=2000001):a[2]=1000001;const r=new Gjrand32b(a,e);for(let t=0;t<14;t++)r.rawNext();return r}static restore(e,a=!1){s("state",e).exactly(16).throwNot();const r=e.slice();t.i32(r,0,4);const i=new Uint32Array(r.buffer);return new Gjrand32b(i,a)}}