@@ -77,17 +77,20 @@ public struct DispatchData : RandomAccessCollection {
77
77
body: @noescape ( UnsafePointer < ContentType > ) throws -> Result ) rethrows -> Result
78
78
{
79
79
var ptr : UnsafeRawPointer ? = nil
80
- var size = 0 ;
80
+ var size = 0
81
81
let data = CDispatch . dispatch_data_create_map ( __wrapped. __wrapped, & ptr, & size)
82
+ let contentPtr = ptr!. bindMemory (
83
+ to: ContentType . self, capacity: size / strideof( ContentType . self) )
82
84
defer { _fixLifetime ( data) }
83
- return try body ( UnsafePointer < ContentType > ( ptr! ) )
85
+ return try body ( contentPtr )
84
86
}
85
87
86
88
public func enumerateBytes(
87
89
block: @noescape ( buffer: UnsafeBufferPointer < UInt8 > , byteIndex: Int , stop: inout Bool ) -> Void )
88
90
{
89
91
_swift_dispatch_data_apply ( __wrapped. __wrapped) { ( data: dispatch_data_t , offset: Int , ptr: UnsafeRawPointer , size: Int ) in
90
- let bp = UnsafeBufferPointer ( start: UnsafePointer < UInt8 > ( ptr) , count: size)
92
+ let bytePtr = ptr. bindMemory ( to: UInt8 . self, capacity: size)
93
+ let bp = UnsafeBufferPointer ( start: bytePtr, count: size)
91
94
var stop = false
92
95
block ( buffer: bp, byteIndex: offset, stop: & stop)
93
96
return !stop
@@ -188,8 +191,7 @@ public struct DispatchData : RandomAccessCollection {
188
191
let map = CDispatch . dispatch_data_create_map ( subdata, & ptr, & size)
189
192
defer { _fixLifetime ( map) }
190
193
191
- let pptr = UnsafePointer < UInt8 > ( ptr!)
192
- return pptr [ index - offset]
194
+ return ptr!. load ( fromByteOffset: index - offset, as: UInt8 . self)
193
195
}
194
196
195
197
public subscript( bounds: Range < Int > ) -> RandomAccessSlice < DispatchData > {
@@ -242,7 +244,7 @@ public struct DispatchDataIterator : IteratorProtocol, Sequence {
242
244
var ptr : UnsafeRawPointer ?
243
245
self . _count = 0
244
246
self . _data = __DispatchData ( data: CDispatch . dispatch_data_create_map ( _data. __wrapped. __wrapped, & ptr, & self . _count) )
245
- self . _ptr = UnsafePointer ( ptr)
247
+ self . _ptr = ptr
246
248
self . _position = _data. startIndex
247
249
248
250
// The only time we expect a 'nil' pointer is when the data is empty.
@@ -253,13 +255,13 @@ public struct DispatchDataIterator : IteratorProtocol, Sequence {
253
255
/// element exists.
254
256
public mutating func next( ) -> DispatchData . _Element ? {
255
257
if _position == _count { return nil }
256
- let element = _ptr [ _position] ;
258
+ let element = _ptr. load ( fromByteOffset : _position, as : UInt8 . self )
257
259
_position = _position + 1
258
260
return element
259
261
}
260
262
261
263
internal let _data : __DispatchData
262
- internal var _ptr : UnsafePointer < UInt8 > !
264
+ internal var _ptr : UnsafeRawPointer !
263
265
internal var _count : Int
264
266
internal var _position : DispatchData . Index
265
267
}
0 commit comments