Files
voxelotl-engine/Sources/Voxelotl/Random/DarwinRandom.swift

34 lines
669 B
Swift
Raw Normal View History

public struct DarwinRandom: RandomProvider {
public typealias Output = Int
public static var min: Int { 0x00000000 }
public static var max: Int { 0x7FFFFFFF }
private var state: Int
init() {
self.state = 0
}
public init(seed: Int) {
self.state = seed
}
mutating public func seed(with seed: Int) {
self.state = seed
}
mutating public func next() -> Int {
if self.state == 0 {
self.state = 123459876
}
let hi = self.state / 127773
let lo = self.state - hi * 127773
self.state = 16807 * lo - 2836 * hi
if self.state < 0 {
self.state += Self.max
}
return self.state % (Self.max + 1)
}
}