Skip to content

Commit

Permalink
Conform Integer types to UnsafeRandom
Browse files Browse the repository at this point in the history
  • Loading branch information
nvzqz committed Nov 24, 2016
1 parent 216b2c3 commit 04b7209
Showing 1 changed file with 14 additions and 16 deletions.
30 changes: 14 additions & 16 deletions Sources/RandomKit/Extensions/Swift/Integer+RandomKit.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,11 @@
import Foundation
import ShiftOperations

extension Integer where Self: Random {
extension ExpressibleByIntegerLiteral where Self: UnsafeRandom {

/// Generates a random value of `Self` using `randomGenerator`.
public static func random(using randomGenerator: RandomGenerator) -> Self {
var value: Self = 0
randomGenerator.randomize(value: &value)
return value
/// The base randomizable value for `Self`. Always zero.
public static var randomizableValue: Self {
return 0
}

}
Expand Down Expand Up @@ -203,7 +201,7 @@ extension UnsignedInteger where Self: ShiftOperations & RandomWithMaxWidth & Ran

}

extension Int: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange {
extension Int: UnsafeRandom, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange {

/// Returns an optional random value of `Self` inside of the range.
public static func random(within range: Range<Int>, using randomGenerator: RandomGenerator) -> Int? {
Expand All @@ -224,7 +222,7 @@ extension Int: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThroug

}

extension Int64: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange {
extension Int64: UnsafeRandom, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange {

/// Returns an optional random value of `Self` inside of the range.
public static func random(within range: Range<Int64>, using randomGenerator: RandomGenerator) -> Int64? {
Expand All @@ -245,7 +243,7 @@ extension Int64: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThro

}

extension Int32: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange {
extension Int32: UnsafeRandom, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange {

/// Returns an optional random value of `Self` inside of the range.
public static func random(within range: Range<Int32>, using randomGenerator: RandomGenerator) -> Int32? {
Expand All @@ -266,7 +264,7 @@ extension Int32: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThro

}

extension Int16: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange {
extension Int16: UnsafeRandom, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange {

/// Returns an optional random value of `Self` inside of the range.
public static func random(within range: Range<Int16>, using randomGenerator: RandomGenerator) -> Int16? {
Expand All @@ -287,7 +285,7 @@ extension Int16: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThro

}

extension Int8: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange {
extension Int8: UnsafeRandom, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange {

/// Returns an optional random value of `Self` inside of the range.
public static func random(within range: Range<Int8>, using randomGenerator: RandomGenerator) -> Int8? {
Expand All @@ -308,7 +306,7 @@ extension Int8: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThrou

}

extension UInt: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange, RandomWithMaxWidth, RandomWithExactWidth {
extension UInt: UnsafeRandom, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange, RandomWithMaxWidth, RandomWithExactWidth {

private static let _mostSignificantBit: UInt = 1 << UInt((MemoryLayout<UInt>.size * 8) - 1)

Expand All @@ -318,31 +316,31 @@ extension UInt: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThrou

}

extension UInt64: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange, RandomWithMaxWidth, RandomWithExactWidth {
extension UInt64: UnsafeRandom, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange, RandomWithMaxWidth, RandomWithExactWidth {

fileprivate var _resigned: UInt64 {
return self ^ (1 << 63)
}

}

extension UInt32: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange, RandomWithMaxWidth, RandomWithExactWidth {
extension UInt32: UnsafeRandom, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange, RandomWithMaxWidth, RandomWithExactWidth {

fileprivate var _resigned: UInt32 {
return self ^ (1 << 31)
}

}

extension UInt16: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange, RandomWithMaxWidth, RandomWithExactWidth {
extension UInt16: UnsafeRandom, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange, RandomWithMaxWidth, RandomWithExactWidth {

fileprivate var _resigned: UInt16 {
return self ^ (1 << 15)
}

}

extension UInt8: Random, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange, RandomWithMaxWidth, RandomWithExactWidth {
extension UInt8: UnsafeRandom, RandomWithMax, RandomWithMin, RandomToValue, RandomThroughValue, RandomWithinRange, RandomWithinClosedRange, RandomWithMaxWidth, RandomWithExactWidth {

fileprivate var _resigned: UInt8 {
return self ^ (1 << 7)
Expand Down

0 comments on commit 04b7209

Please sign in to comment.