Fix getData

This commit is contained in:
Luis Blanco 2020-03-23 15:17:24 +03:00
parent 1ca8dab472
commit 8b07e4aab3
1 changed files with 18 additions and 18 deletions

View File

@ -338,7 +338,7 @@ inline Type* getArrayData(
int *num = nullptr
) {
Type *data = nullptr;
Type *out = nullptr;
if (obj.IsTypedArray()) {
Napi::TypedArray ta = obj.As<Napi::TypedArray>();
@ -348,13 +348,13 @@ inline Type* getArrayData(
*num = arr.ByteLength() / sizeof(Type);
}
uint8_t *base = reinterpret_cast<uint8_t *>(arr.Data());
data = reinterpret_cast<Type *>(base + offset);
out = reinterpret_cast<Type *>(base + offset);
} else if (obj.IsArrayBuffer()) {
Napi::ArrayBuffer arr = obj.As<Napi::ArrayBuffer>();
if (num) {
*num = arr.ByteLength() / sizeof(Type);
}
data = reinterpret_cast<Type *>(arr.Data());
out = reinterpret_cast<Type *>(arr.Data());
} else {
if (num) {
*num = 0;
@ -362,7 +362,7 @@ inline Type* getArrayData(
JS_THROW("Argument must be of type `TypedArray`.");
}
return data;
return out;
}
@ -373,7 +373,7 @@ inline Type* getBufferData(
int *num = nullptr
) {
Type *data = nullptr;
Type *out = nullptr;
if (num) {
*num = 0;
@ -381,38 +381,38 @@ inline Type* getBufferData(
if ( ! obj.IsBuffer() ) {
JS_THROW("Argument must be of type `Buffer`.");
return data;
return out;
}
Napi::Buffer<uint8_t> arr = obj.As< Napi::Buffer<uint8_t> >();
if (num) {
*num = arr.Length() / sizeof(Type);
}
data = arr.Data();
out = arr.Data();
return data;
return out;
}
inline void *getData(Napi::Env env, Napi::Object obj) {
void *data = nullptr;
void *out = nullptr;
if (obj.IsBuffer()) {
data = getBufferData<uint8_t>(env, obj);
} else if (obj.IsTypedArray() || obj.IsArrayBuffer()) {
data = getArrayData<uint8_t>(env, obj);
if (obj.IsTypedArray() || obj.IsArrayBuffer()) {
out = getArrayData<uint8_t>(env, obj);
} else if (obj.IsBuffer()) {
out = getBufferData<uint8_t>(env, obj);
} else if (obj.Has("data")) {
Napi::Object data = obj.Get("data").As<Napi::Object>();
if (data.IsBuffer()) {
data = getBufferData<uint8_t>(env, data);
} else if (data.IsTypedArray() || data.IsArrayBuffer()) {
data = getArrayData<uint8_t>(env, data);
if (data.IsTypedArray() || data.IsArrayBuffer()) {
out = getArrayData<uint8_t>(env, data);
} else if (data.IsBuffer()) {
out = getBufferData<uint8_t>(env, data);
}
}
return data;
return out;
}