basis for random subsystem

This commit is contained in:
2024-08-22 03:09:53 +10:00
parent b7dba429cf
commit 394e340f09
5 changed files with 45 additions and 15 deletions

View File

@ -0,0 +1,24 @@
import Foundation
public class Arc4Random: RandomProvider {
public typealias Output = UInt32
public static var min: UInt32 { 0x00000000 }
public static var max: UInt32 { 0xFFFFFFFF }
private init() {}
public static let instance = Arc4Random()
public func stir() {
arc4random_stir()
}
public func next() -> UInt32 {
arc4random()
}
public func next(in bound: Range<Int>) -> Int {
assert(bound.upperBound <= Self.max)
return bound.lowerBound + Int(arc4random_uniform(UInt32(bound.upperBound)))
}
}

View File

@ -0,0 +1,8 @@
public protocol RandomProvider {
associatedtype Output: FixedWidthInteger
static var min: Output { get }
static var max: Output { get }
mutating func next() -> Output
}