NumericArray em LibraryLink
Os objetos NumericArray e ByteArray na Wolfram Language podem ser passados para ou de um LibraryFunction onde eles aparecem como argumentos ou resultados do tipo MNumericArrary. MNumericArray é um ponteiro para uma estrutura de dados e é passado por referência. O gerenciamento de memória do MNumericArray é muito semelhante ao gerenciamento de memória para MTensor.
A família de funções de retorno de chamada MNumericArray está no campo numericarrayLibraryFunctions de WolframLibraryData, e elas são declaradas em WolframNumericArrayLibrary.h.
Segue abaixo uma aplicação comum.
#include "WolframNumericArrayLibrary.h"
....
MNumericArray na_in = NULL, na_out = NULL;
errcode_t err = 0;
numericarray_data_t type = MNumericArray_Type_Undef;
WolframNumericArrayLibrary_Functions naFuns = libData->numericarrayLibraryFunctions;
...
na_in = MArgument_getMNumericArray(Args[0]);
type = naFuns->MNumericArray_getType(na_in);
if(type != MNumericArray_Type_Real32) {
err = naFuns->MNumericArray_convertType(&na_out, na_in,
MNumericArray_Type_Real32, MNumericArray_Convert_Coerce, 1);
...
}
...
Os exemplos na biblioteca demo_numericarray mostram como usar argumentos MNumericArray e resultados com objetos NumericArray e ByteArray na Wolfram Language.
Este exemplo mostra como calcular o conjugado de um número complexo dos elementos armazenados em um NumericArray.
A função readBytesFromFile da demonstração mostra como ler dados de um arquivo e armazená-los em um objeto ByteArray.