указатели, использующие ускорение рамки для Swift - PullRequest
0 голосов
/ 21 марта 2019

Я пишу приложение, которое использует постоянное Q-преобразование, используя swift.В поисках интернета я наткнулся на представителя GitHub, который реализует постоянное преобразование q с использованием ускоренной инфраструктуры Apple, но для C ++

я прочитал и перевел большую часть кода, однако застрял в одной важной части, касающейся указателей.

Оригинал показывает:

DSPSplitComplex kernel;
kernel.realp = new float[K * m_fftLength];
kernel.imagp = new float[K * m_fftLength];
bzero(kernel.realp, sizeof(float) * K * m_fftLength);
bzero(kernel.imagp, sizeof(float) * K * m_fftLength);

и в функции позже имеет:

DSPSplitComplex complexPointer;
complexPointer.realp = &kernel.realp[(k-1) * m_fftLength];
complexPointer.imagp = &kernel.imagp[(k-1) * m_fftLength];

Функция выполняет БПФ и возвращает результат complexPointer.

Я считаю, что идея в том, что «ядро» - это матрица, где каждая запись в realp или imagp представляет собой полный массив значений с плавающей точкой, возвращаемых функцией сложного указателя.Нет ошибок в Xcode.

Однако я не совсем понимаю, как преобразовать эту часть в Swift.Я сделал следующее:

var real1:[Float] = Array(repeating: 0.0, count: Int(K * m_fftLength))
var imag1:[Float] = Array(repeating: 0.0, count: Int(K * m_fftLength))
var kernel = DSPSplitComplex(realp: UnsafeMutablePointer(mutating:real1), imagp: UnsafeMutablePointer(mutating:imag1))

и

var complexPointer:DSPSplitComplex
complexPointer.realp = &kernel.realp[Int((k-1) * m_fftLength)]
complexPointer.imagp = &kernel.imagp[Int((k-1) * m_fftLength)]

, и я получаю ошибку «посторонний &».Так что не нравится указатель на ядро.без него ошибка «Невозможно присвоить значение типа« Float »типу« UnsafeMutablePointer »'

Так что я не понимаю, куда идти дальше, так как я не знаю много C ++

...