1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
//
// IntVectorExt.swift
//
// Created by Giles Payne on 2020/01/04.
//
import Foundation
public extension IntVector {
convenience init(_ array:[Int32]) {
let data = array.withUnsafeBufferPointer { Data(buffer: $0) }
self.init(data:data);
}
subscript(index: Int) -> Int32 {
get {
return self.get(index)
}
}
var array: [Int32] {
get {
var ret = Array<Int32>(repeating: 0, count: data.count/MemoryLayout<Int32>.stride)
_ = ret.withUnsafeMutableBytes { data.copyBytes(to: $0) }
return ret
}
}
}
extension IntVector : Sequence {
public typealias Iterator = IntVectorIterator
public func makeIterator() -> IntVectorIterator {
return IntVectorIterator(self)
}
}
public struct IntVectorIterator: IteratorProtocol {
public typealias Element = Int32
let intVector: IntVector
var pos = 0
init(_ intVector: IntVector) {
self.intVector = intVector
}
mutating public func next() -> Int32? {
guard pos >= 0 && pos < intVector.length
else { return nil }
pos += 1
return intVector.get(pos - 1)
}
}
|