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