使用nan接收并在插件中返回Float32Array

时间:2015-06-02 20:00:13

标签: javascript c++ node.js v8 node.js-addon

我正在尝试使用nan来计算加载项中浮点数组的内容,然后将其作为Float32Array返回。

但是,虽然args具有IsNumber()NumberValue()个函数,但它只有IsFloat32Array()函数而没有Float32Array()

我试过看一下:12教程,但没有找到合适的例子。

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 */);
}

1 个答案:

答案 0 :(得分:1)

最好使用Nan::TypedArrayContents

来接受TypedArray
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;
};