LibraryLinkにおけるNumericArray
Wolfram言語のNumericArrayオブジェクトおよびByteArrayオブジェクトは,LibraryFunctionとの間でやり取りすることができる.その際これらの関数は,引数としてまたはMNumericArrary型の結果として現れる.MNumericArrayはデータ構造に対するポインタで,参照によって渡される.MNumericArrayのメモリ管理はMTensorのメモリ管理に非常によく似ている.
MNumericArrayコールバック関数族はWolframLibraryDataのnumericarrayLibraryFunctionsフィールドにあり,WolframNumericArrayLibrary.hで宣言されている.
典型的な使い方は次のようになる.
#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);
...
}
...
demo_numericarrayライブラリにある例は,Wolfram言語のNumericArrayオブジェクトおよびByteArrayオブジェクトと一緒にMNumericArray引数と結果を使用する方法を示している.
この例では,NumericArrayに保存されている要素の複素共役の計算の仕方を示している.
デモにある関数readBytesFromFileは,ファイルからのデータの読み方とByteArrayオブジェクトへのデータの保存の仕方を示している.