Skip to content

Commit ceb1fac

Browse files
authored
Merge pull request #202 from moiseev/nan-time
Fix + and - operations on DispatchTime and DispatchWallTime
2 parents 44c2291 + 6a3189d commit ceb1fac

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/swift/Time.swift

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,16 @@ public func -(time: DispatchTime, interval: DispatchTimeInterval) -> DispatchTim
110110
}
111111

112112
public func +(time: DispatchTime, seconds: Double) -> DispatchTime {
113-
let t = CDispatch.dispatch_time(time.rawValue, Int64(seconds * Double(NSEC_PER_SEC)))
113+
let interval = seconds * Double(NSEC_PER_SEC)
114+
let t = CDispatch.dispatch_time(time.rawValue,
115+
interval.isInfinite || interval.isNaN ? Int64.max : Int64(interval))
114116
return DispatchTime(rawValue: t)
115117
}
116118

117119
public func -(time: DispatchTime, seconds: Double) -> DispatchTime {
118-
let t = CDispatch.dispatch_time(time.rawValue, Int64(-seconds * Double(NSEC_PER_SEC)))
120+
let interval = -seconds * Double(NSEC_PER_SEC)
121+
let t = CDispatch.dispatch_time(time.rawValue,
122+
interval.isInfinite || interval.isNaN ? Int64.min : Int64(interval))
119123
return DispatchTime(rawValue: t)
120124
}
121125

@@ -130,11 +134,15 @@ public func -(time: DispatchWallTime, interval: DispatchTimeInterval) -> Dispatc
130134
}
131135

132136
public func +(time: DispatchWallTime, seconds: Double) -> DispatchWallTime {
133-
let t = CDispatch.dispatch_time(time.rawValue, Int64(seconds * Double(NSEC_PER_SEC)))
137+
let interval = seconds * Double(NSEC_PER_SEC)
138+
let t = CDispatch.dispatch_time(time.rawValue,
139+
interval.isInfinite || interval.isNaN ? Int64.max : Int64(interval))
134140
return DispatchWallTime(rawValue: t)
135141
}
136142

137143
public func -(time: DispatchWallTime, seconds: Double) -> DispatchWallTime {
138-
let t = CDispatch.dispatch_time(time.rawValue, Int64(-seconds * Double(NSEC_PER_SEC)))
144+
let interval = seconds * Double(NSEC_PER_SEC)
145+
let t = CDispatch.dispatch_time(time.rawValue,
146+
interval.isInfinite || interval.isNaN ? Int64.min : Int64(interval))
139147
return DispatchWallTime(rawValue: t)
140148
}

0 commit comments

Comments
 (0)