gnablib
Version:
A lean, zero dependency library to provide a useful base for your project.
2 lines • 1.55 kB
JavaScript
/*! Copyright 2024-2025 the gnablib contributors MPL-1.1 */
import{asLE as t}from"../endian/platform.js";import{sLen as r}from"../safe/safe.js";import{APrng32 as e}from"./APrng32.js";export class Mcg extends e{constructor(t,r,e){super(t,e),this.safeBits=this.bitGen,this._shift=r,this.bitGen=31-r}trueSave(){const r=new Uint8Array(17);return r.set(new Uint8Array(this._state.buffer)),t.i32(r,0,4),r[16]=this._shift,r}rawNext(){return this._state[0]=(this._state[0]*this._state[1]+this._state[2])%this._state[3],this._state[0]>>>this._shift}get[Symbol.toStringTag](){return"mcg"}static new16807(t=!1){return new Mcg(Uint32Array.of(1,16807,0,2147483647),0,t)}static new48271(t=!1){return new Mcg(Uint32Array.of(1,48271,0,2147483647),0,t)}static new69621(t=!1){return new Mcg(Uint32Array.of(1,69621,0,2147483647),0,t)}static newRandu(t=!1){return new Mcg(Uint32Array.of(1,65539,0,2147483648),0,t)}static newMsvc(t=!1){return new Mcg(Uint32Array.of(1,214013,2531011,2147483648),0,t)}static seed16807(t,r=!1){return new Mcg(Uint32Array.of(t,16807,0,2147483647),0,r)}static seed48271(t,r=!1){return new Mcg(Uint32Array.of(t,48271,0,2147483647),0,r)}static seed69621(t,r=!1){return new Mcg(Uint32Array.of(t,69621,0,2147483647),0,r)}static seedRandu(t,r=!1){return new Mcg(Uint32Array.of(t,65539,0,2147483648),0,r)}static seedMsvc(t,r=!1){return new Mcg(Uint32Array.of(t,214013,2531011,2147483648),16,r)}static restore(e,s=!1){r("state",e).exactly(17).throwNot();const n=e.slice();t.i32(n,0,4);const i=new Uint32Array(n.buffer,0,4);return new Mcg(i,n[16],s)}}