UNPKG

gnablib

Version:

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

2 lines 1.21 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 Tychei extends e{constructor(){super(...arguments),this.bitGen=32,this.safeBits=32}trueSave(){const s=new Uint8Array(this._state.slice().buffer);return t.i32(s,0,4),s}rawNext(){return this._state[1]=(this._state[1]<<25|this._state[1]>>>7)^this._state[2],this._state[2]-=this._state[3],this._state[3]=(this._state[3]<<24|this._state[3]>>>8)^this._state[0],this._state[0]-=this._state[1],this._state[1]=(this._state[1]<<20|this._state[1]>>>12)^this._state[2],this._state[2]-=this._state[3],this._state[3]=(this._state[3]<<16|this._state[3]>>>16)^this._state[0],this._state[0]-=this._state[1],this._state[0]}get[Symbol.toStringTag](){return"tychei"}static new(t=!1){return new Tychei(Uint32Array.of(2248327305,1386259388,71442316,3496167757),t)}static seed(t,s,e=!1){const i=new Tychei(Uint32Array.of(s,t,2654435769,1367130551),e);for(let t=0;t<20;t++)i.rawNext();return i}static restore(e,i=!1){s("state",e).exactly(16).throwNot();const a=e.slice();t.i32(a,0,2);const r=new Uint32Array(a.buffer);return new Tychei(r,i)}}