Skip to content

Commit 9ac5526

Browse files
author
Sergey Minakov
committed
encode and decode UnsafePointer
1 parent 2b08ca3 commit 9ac5526

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

Foundation/NSAffineTransform.swift

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -286,12 +286,16 @@ open class NSAffineTransform : NSObject, NSCopying, NSSecureCoding {
286286
preconditionFailure("Unkeyed coding is unsupported.")
287287
}
288288

289-
aCoder.encode(Double(self.transformStruct.m11), forKey: "NS._m11")
290-
aCoder.encode(Double(self.transformStruct.m12), forKey: "NS._m12")
291-
aCoder.encode(Double(self.transformStruct.m21), forKey: "NS._m21")
292-
aCoder.encode(Double(self.transformStruct.m22), forKey: "NS._m22")
293-
aCoder.encode(Double(self.transformStruct.tX), forKey: "NS._tX")
294-
aCoder.encode(Double(self.transformStruct.tY), forKey: "NS._tY")
289+
let pointer = UnsafePointer<Float>([
290+
Float(transformStruct.m11),
291+
Float(transformStruct.m12),
292+
Float(transformStruct.m21),
293+
Float(transformStruct.m22),
294+
Float(transformStruct.tX),
295+
Float(transformStruct.tY),
296+
])
297+
298+
aCoder.encodeArray(ofObjCType: "[f]", count: 6, at: pointer)
295299
}
296300

297301
open func copy(with zone: NSZone? = nil) -> Any {
@@ -308,12 +312,19 @@ open class NSAffineTransform : NSObject, NSCopying, NSSecureCoding {
308312
preconditionFailure("Unkeyed coding is unsupported.")
309313
}
310314

311-
let m11 = aDecoder.decodeDouble(forKey: "NS._m11")
312-
let m12 = aDecoder.decodeDouble(forKey: "NS._m12")
313-
let m21 = aDecoder.decodeDouble(forKey: "NS._m21")
314-
let m22 = aDecoder.decodeDouble(forKey: "NS._m22")
315-
let tX = aDecoder.decodeDouble(forKey: "NS._tX")
316-
let tY = aDecoder.decodeDouble(forKey: "NS._tY")
315+
let pointer = UnsafeMutablePointer<Float>.allocate(capacity: 6)
316+
defer {
317+
pointer.deinitialize()
318+
pointer.deallocate(capacity: 6)
319+
}
320+
aDecoder.decodeArray(ofObjCType: "[f]", count: 6, at: pointer)
321+
322+
let m11 = pointer[0]
323+
let m12 = pointer[1]
324+
let m21 = pointer[2]
325+
let m22 = pointer[3]
326+
let tX = pointer[4]
327+
let tY = pointer[5]
317328

318329
self.transformStruct = AffineTransform(m11: CGFloat(m11), m12: CGFloat(m12),
319330
m21: CGFloat(m21), m22: CGFloat(m22),

0 commit comments

Comments
 (0)