22
33using namespace Napi ;
44
5+ #if defined(NAPI_HAS_CONSTEXPR)
6+ #define NAPI_TYPEDARRAY_NEW (className, env, length, type ) className::New(env, length)
7+ #define NAPI_TYPEDARRAY_NEW_BUFFER (className, env, length, buffer, bufferOffset, type ) \
8+ className::New (env, length, buffer, bufferOffset)
9+ #else
10+ #define NAPI_TYPEDARRAY_NEW (className, env, length, type ) className::New(env, length, type)
11+ #define NAPI_TYPEDARRAY_NEW_BUFFER (className, env, length, buffer, bufferOffset, type ) \
12+ className::New (env, length, buffer, bufferOffset, type)
13+ #endif
14+
515namespace {
616
717Value CreateTypedArray (const CallbackInfo& info) {
@@ -11,40 +21,57 @@ Value CreateTypedArray(const CallbackInfo& info) {
1121 size_t bufferOffset = info[3 ].IsUndefined () ? 0 : info[3 ].As <Number>().Uint32Value ();
1222
1323 if (arrayType == " int8" ) {
14- return buffer.IsUndefined () ? Int8Array::New (info.Env (), length)
15- : Int8Array::New (info.Env (), length, buffer, bufferOffset);
24+ return buffer.IsUndefined () ?
25+ NAPI_TYPEDARRAY_NEW (Int8Array, info.Env (), length, napi_int8_array) :
26+ NAPI_TYPEDARRAY_NEW_BUFFER (Int8Array, info.Env (), length, buffer, bufferOffset,
27+ napi_int8_array);
1628 } else if (arrayType == " uint8" ) {
17- return buffer.IsUndefined () ? Uint8Array::New (info.Env (), length)
18- : Uint8Array::New (info.Env (), length, buffer, bufferOffset);
29+ return buffer.IsUndefined () ?
30+ NAPI_TYPEDARRAY_NEW (Uint8Array, info.Env (), length, napi_uint8_array) :
31+ NAPI_TYPEDARRAY_NEW_BUFFER (Uint8Array, info.Env (), length, buffer, bufferOffset,
32+ napi_uint8_array);
1933 } else if (arrayType == " uint8_clamped" ) {
20- return buffer.IsUndefined () ? Uint8Array::New (info.Env (), length, napi_uint8_clamped_array)
21- : Uint8Array::New (info.Env (), length, buffer, bufferOffset, napi_uint8_clamped_array);
34+ return buffer.IsUndefined () ?
35+ Uint8Array::New (info.Env (), length, napi_uint8_clamped_array) :
36+ Uint8Array::New (info.Env (), length, buffer, bufferOffset, napi_uint8_clamped_array);
2237 } else if (arrayType == " int16" ) {
23- return buffer.IsUndefined () ? Int16Array::New (info.Env (), length)
24- : Int16Array::New (info.Env (), length, buffer, bufferOffset);
38+ return buffer.IsUndefined () ?
39+ NAPI_TYPEDARRAY_NEW (Int16Array, info.Env (), length, napi_int16_array) :
40+ NAPI_TYPEDARRAY_NEW_BUFFER (Int16Array, info.Env (), length, buffer, bufferOffset,
41+ napi_int16_array);
2542 } else if (arrayType == " uint16" ) {
26- return buffer.IsUndefined () ? Uint16Array::New (info.Env (), length)
27- : Uint16Array::New (info.Env (), length, buffer, bufferOffset);
43+ return buffer.IsUndefined () ?
44+ NAPI_TYPEDARRAY_NEW (Uint16Array, info.Env (), length, napi_uint16_array) :
45+ NAPI_TYPEDARRAY_NEW_BUFFER (Uint16Array, info.Env (), length, buffer, bufferOffset,
46+ napi_uint16_array);
2847 } else if (arrayType == " int32" ) {
29- return buffer.IsUndefined () ? Int32Array::New (info.Env (), length)
30- : Int32Array::New (info.Env (), length, buffer, bufferOffset);
48+ return buffer.IsUndefined () ?
49+ NAPI_TYPEDARRAY_NEW (Int32Array, info.Env (), length, napi_int32_array) :
50+ NAPI_TYPEDARRAY_NEW_BUFFER (Int32Array, info.Env (), length, buffer, bufferOffset,
51+ napi_int32_array);
3152 } else if (arrayType == " uint32" ) {
32- return buffer.IsUndefined () ? Uint32Array::New (info.Env (), length)
33- : Uint32Array::New (info.Env (), length, buffer, bufferOffset);
53+ return buffer.IsUndefined () ?
54+ NAPI_TYPEDARRAY_NEW (Uint32Array, info.Env (), length, napi_uint32_array) :
55+ NAPI_TYPEDARRAY_NEW_BUFFER (Uint32Array, info.Env (), length, buffer, bufferOffset,
56+ napi_uint32_array);
3457 } else if (arrayType == " float32" ) {
35- return buffer.IsUndefined () ? Float32Array::New (info.Env (), length)
36- : Float32Array::New (info.Env (), length, buffer, bufferOffset);
58+ return buffer.IsUndefined () ?
59+ NAPI_TYPEDARRAY_NEW (Float32Array, info.Env (), length, napi_float32_array) :
60+ NAPI_TYPEDARRAY_NEW_BUFFER (Float32Array, info.Env (), length, buffer, bufferOffset,
61+ napi_float32_array);
3762 } else if (arrayType == " float64" ) {
38- return buffer.IsUndefined () ? Float64Array::New (info.Env (), length)
39- : Float64Array::New (info.Env (), length, buffer, bufferOffset);
63+ return buffer.IsUndefined () ?
64+ NAPI_TYPEDARRAY_NEW (Float64Array, info.Env (), length, napi_float64_array) :
65+ NAPI_TYPEDARRAY_NEW_BUFFER (Float64Array, info.Env (), length, buffer, bufferOffset,
66+ napi_float64_array);
4067 } else {
4168 Error::New (info.Env (), " Invalid typed-array type." ).ThrowAsJavaScriptException ();
4269 return Value ();
4370 }
4471}
4572
4673Value CreateInvalidTypedArray (const CallbackInfo& info) {
47- return Int8Array::New ( info.Env (), 1 , ArrayBuffer (), 0 );
74+ return NAPI_TYPEDARRAY_NEW_BUFFER (Int8Array, info.Env (), 1 , ArrayBuffer (), 0 , napi_int8_array );
4875}
4976
5077Value GetTypedArrayType (const CallbackInfo& info) {
0 commit comments