如何用OpaquePointer调用DSP函数?

时间:2016-11-20 18:00:53

标签: swift swift3 accelerate-framework

从矢量标量线性代数函数(来自vectorOps.h) https://developer.apple.com/reference/accelerate/1546030-visamax

  

func vIsamax(_ count:Int32,              _ x:OpaquePointer) - > Int32)已

计数 向量x中的元素数量;必须是4的倍数。

x浮点值的向量数组。

我尝试过的解决方案 https://swift.org/migration-guide/se-0107-migrate.html UnsafeRawPointerwithUnsafePointerMemoryLayout等 至今尚未成功

无法使用... CFData,

调用类型'OpaquePointer'的初始值设定项

不能用...... yada,yada,yada调用“”

如何使用OpaquePointer调用DSP函数?

1 个答案:

答案 0 :(得分:1)

vIsamaxvFloat又名float4元素的向量作为参数。 (每个float4包含4个浮点数。) C声明是

int32_t vIsamax(int32_t count, const vFloat *x);

映射到Swift

public func vIsamax(_ count: Int32, _ x: UnsafePointer<vFloat>) -> Int32

而不是

public func vIsamax(_ count: Int32, _ x: OpaquePointer) -> Int32

但您可以简单地传递vFloat / float4数组,如下所示 小例子:

import Swift
import Accelerate
import simd

let values = [ float4(-1.0, -2.0, -3.0, -4.0), float4(4.0, 3.0, 2.0, 1.0) ]
let idx = vIsamax(Int32(4 * values.count), values)
print(idx) // 3
相关问题