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
|
//
// DoubleVectorExt.swift
//
// Created by Giles Payne on 2020/01/04.
//
import Foundation
public extension DoubleVector {
convenience init(_ array:[Double]) {
let data = array.withUnsafeBufferPointer { Data(buffer: $0) }
self.init(data:data);
}
subscript(index: Int) -> Double {
get {
return self.get(index)
}
}
var array: [Double] {
get {
var ret = Array<Double>(repeating: 0, count: data.count/MemoryLayout<Double>.stride)
_ = ret.withUnsafeMutableBytes { data.copyBytes(to: $0) }
return ret
}
}
}
extension DoubleVector : Sequence {
public typealias Iterator = DoubleVectorIterator
public func makeIterator() -> DoubleVectorIterator {
return DoubleVectorIterator(self)
}
}
public struct DoubleVectorIterator: IteratorProtocol {
public typealias Element = Double
let doubleVector: DoubleVector
var pos = 0
init(_ doubleVector: DoubleVector) {
self.doubleVector = doubleVector
}
mutating public func next() -> Double? {
guard pos >= 0 && pos < doubleVector.length
else { return nil }
pos += 1
return doubleVector.get(pos - 1)
}
}
|