use*_*172 4 c++ node.js node.js-addon
我想使用V8 Float32Array数据结构.我该如何初始化它?
我也对直接存储器访问数据感兴趣.怎么可能这样呢?
更新
现在最好的方法是使用帮助器Nan::TypedArrayContents.
assert(args[i]->IsFloat32Array());
Local<Float32Array> myarr = args[i].As<Float32Array>();
Nan::TypedArrayContents<float> dest(myarr);
// Now use dest, e.g. (*dest)[0]
Run Code Online (Sandbox Code Playgroud)
在node-canvas中有一个很好的例子.
原始答案,显示帮助器有用的原因
v8 API现在正在快速变化,因此这取决于您的node/io.js版本.要从作为参数提供的数组中访问数据,这应该适用于节点0.12到io.js <3.0:
assert(args[i]->IsFloat32Array()); // These type-check methods are available.
Local<Float32Array> myarr = args[i].As<Float32Array>();
void* dataPtr = myarr->GetIndexedPropertiesExternalArrayData();
Run Code Online (Sandbox Code Playgroud)
在io.js> = 3.0(v8 4.3)中你应该使用ArrayBuffer::GetContents.(我还没有使用过这个版本,3.0版本发布后会更新.)文档就在这里.
在节点0.10中,TypedArrays是自酿的.这是一种方法:
Local<Object> buffer = args[i]->Get(NanNew("buffer"))->ToObject();
void* dataPtr = buffer->GetPointerFromInternalField(0);
Run Code Online (Sandbox Code Playgroud)
构造一个类型化数组可以通过以下方式完成:
Float32Array::New(ArrayBuffer::New(Isolate::GetCurrent(), size * 4), 0, size);
Run Code Online (Sandbox Code Playgroud)