javascript - Use nan to receive and return Float32Array in an addon -
i'm trying use nan in order calculate on array of floats in add-on , return float32array
.
but while args have isnumber()
, numbervalue()
functions has isfloat32array()
function , no float32array()
.
i've tried @ those: 1,2 tutorials found no suitable examples.
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(); } /* vector of floats ? */ args[0]-> ???; double arg1 = args[1]->numbervalue(); // calculation on vector nanreturnvalue(/* return float32array array */); }
accepting typedarray best done nan::typedarraycontents
local<typedarray> ta = args[0].as<typedarray>(); nan::typedarraycontents<float> vfloat(ta); float firstelement = (*vfloat)[0];
there no nan helper constructing typed array yet, use helper in own code:
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 make 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; };
Comments
Post a Comment