JavaScript — использовать Nan для получения и возврата Float32Array в аддоне

Я пытаюсь использовать бабушка чтобы вычислить что-либо на массиве с плавающей точкой в ​​дополнении, а затем вернуть его как Float32Array,

Но пока арги есть IsNumber() а также NumberValue()функции у него есть только IsFloat32Array() функция и нет Float32Array(),

Я пытался взглянуть на них: 1,2 учебники, но не нашли подходящих примеров.

NAN_METHOD(Calc) {
NanScope();

if (args.Length() < 2) {
NanThrowTypeError("Wrong number of arguments");
NanReturnUndefined();
}

if (!args[0]->IsNumber() || !args[1]->IsFloat32Array()) {
NanThrowTypeError("Wrong arguments");
NanReturnUndefined();
}
/* a vector of floats ? */  args[0]-> ???;
double arg1 = args[1]->NumberValue();
// some calculation on the vector

NanReturnValue(/* Return as a Float32Array array */);
}

4

Решение

Принятие TypedArray лучше всего сделать с Nan::TypedArrayContents

Local<TypedArray> ta = args[0].As<TypedArray>();
Nan::TypedArrayContents<float> vfloat(ta);
float firstElement = (*vfloat)[0];

Нет помощника NAN для создания типизированного массива, но я использую этот помощник в своем собственном коде:

template <typename T> struct V8TypedArrayTraits; // no generic case
template<> struct V8TypedArrayTraits<Float32Array> { typedef float value_type; };
template<> struct V8TypedArrayTraits<Float64Array> { typedef double value_type; };
// etc. v8 doesn't export anything to make this nice.

template <typename T>
Local<T> createTypedArray(size_t size) {
size_t byteLength = size * sizeof(typename V8TypedArrayTraits<T>::value_type);
Local<ArrayBuffer> buffer = ArrayBuffer::New(Isolate::GetCurrent(), byteLength);
Local<T> result = T::New(buffer, 0, size);
return result;
};
0

Другие решения


По вопросам рекламы [email protected]