Я хотел бы использовать структуру данных V8 Float32Array. Как я могу инициализировать это?
Я также был бы заинтересован в прямом доступе к памяти данных. Как это можно сделать?
обновленный
Лучший способ сейчас — использовать помощника Nan::TypedArrayContents
.
assert(args[i]->IsFloat32Array());
Local<Float32Array> myarr = args[i].As<Float32Array>();
Nan::TypedArrayContents<float32_t> dest(myarr);
// Now use dest, e.g. (*dest)[0]
Есть хороший пример этого в Узел-холст.
Оригинальный ответ, который показывает, почему помощник полезен
API v8 быстро меняется прямо сейчас, так что это зависит от вашей версии 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();
В 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);
Построение типизированного массива можно выполнить с помощью:
Float32Array::New(ArrayBuffer::New(Isolate::GetCurrent(), size * 4), 0, size);