/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuRandomDevice.hpp Date: 2021-9-3 Author: Reece ***/ #pragma once #include "AuWELL.hpp" namespace Aurora::RNG { struct RandomDevice : IRandomDevice { RandomDevice(); RandomDevice(const RandomDef & def); void Read(Memory::MemoryViewWrite view) override; AuString NextString(AuUInt32 uLength, ERngStringCharacters type) override; void NextString(char *pString, AuUInt32 uLength, ERngStringCharacters type) override; AuUInt8 NextByte() override; bool NextBoolean() override; AuUInt32 NextU32() override; AuUInt64 NextU64() override; AuInt32 NextInt(AuInt32 iMin, AuInt32 iMax) override; AuUInt32 NextU32(AuUInt32 uMin, AuUInt32 uMax) override; double NextDecimal() override; double NextNumber(double dMin, double dMax) override; AuUInt32 NextIndex(AuUInt32 uCount /* = max + 1*/) override; AuMemoryViewRead ToSeed() override; void Init(const RandomDef &def); private: RandomDef def_; WELLRand fast_; bool DecGeometric(int x); double UniformFloatInRange(double udMin, double udMax); }; }