CGPointを触り出すと、いつもelementwiseな四則演算が使いたくなる。
演算子オーバーロードはお行儀が悪い気がして、SIMDプロトコルで解決した例をメモ。
extension CGPoint: SIMD {
public typealias MaskStorage = SIMD2<CGFloat.NativeType>.MaskStorage
public subscript(index: Int) -> CGFloat {
get {
index == 0 ? x : y
}
set(newValue) {
x = index == 0 ? newValue : x
y = index != 0 ? newValue : y
}
}
public var scalarCount: Int {
2
}
public typealias Scalar = CGFloat
}