Запись в значение в UnsafePointer<DSPSplitComplex>

Из того, что я понял, UnsafePointer представляет pointee неизменяемым, а UnsafeMutablePointer представляет pointee изменчивым. Но подпись для функции vDSP vDSP_zrvmul выглядит следующим образом:

func vDSP_zrvmul(_ __A: UnsafePointer<DSPSplitComplex>, 
               _ __IA: vDSP_Stride, 
               _ __B: UnsafePointer<Float>, 
               _ __IB: vDSP_Stride, 
               _ __C: UnsafePointer<DSPSplitComplex>, 
               _ __IC: vDSP_Stride, 
               _ __N: vDSP_Length)

__C должен быть выходным вектором, но он не является изменяемым... что мне не хватает? Спасибо за прочтение.

1 ответ

Решение

__A а также __C являются указателями на DSPSplitComplex:

public struct DSPSplitComplex {
    public var realp: UnsafeMutablePointer<Float>
    public var imagp: UnsafeMutablePointer<Float>
}

которые содержат изменяемые указатели на массивы значений с плавающей точкой.

vDSP_zrvmul записывает вывод в массивы, на которые указывает __C.realp а также __C.imagp, но __C Сам не мутировал.

Другие вопросы по тегам