🎨 Refactor getData

This commit is contained in:
Luis Blanco 2018-05-13 22:47:55 +03:00
parent b6fa42d93f
commit 7baf4be872
1 changed files with 7 additions and 27 deletions

View File

@ -128,7 +128,7 @@ typedef Nan::Persistent<v8::Value> V8_STORE_VAL;
#define LET_EXT_ARG(I, VAR) \ #define LET_EXT_ARG(I, VAR) \
CHECK_LET_ARG(I, IsExternal(), "number"); \ CHECK_LET_ARG(I, IsExternal(), "number"); \
v8::Local<v8::External> VAR = IS_ARG_EMPTY(I) ? JS_EXT(NULL) : \ v8::Local<v8::External> VAR = IS_ARG_EMPTY(I) ? JS_EXT(nullptr) : \
v8::Local<v8::External>::Cast(info[I]); v8::Local<v8::External>::Cast(info[I]);
@ -226,23 +226,14 @@ typedef Nan::Persistent<v8::Value> V8_STORE_VAL;
template<typename Type> template<typename Type>
inline Type* getArrayData(v8::Local<v8::Value> arg, int *num = NULL) { inline Type* getArrayData(V8_VAR_OBJ obj, int *num = nullptr) {
Type *data = NULL; Type *data = nullptr;
if (num) { if (num) {
*num = 0; *num = 0;
} }
if (arg->IsNull() || arg->IsUndefined()) {
return data;
}
if (arg->IsArray()) {
Nan::ThrowError("JS Array is not supported here.");
return data;
}
if ( ! arg->IsArrayBufferView() ) { if ( ! arg->IsArrayBufferView() ) {
Nan::ThrowError("Argument must be a TypedArray."); Nan::ThrowError("Argument must be a TypedArray.");
return data; return data;
@ -259,27 +250,16 @@ inline Type* getArrayData(v8::Local<v8::Value> arg, int *num = NULL) {
} }
inline void *getImageData(v8::Local<v8::Value> arg) { inline void *getData(V8_VAR_OBJ obj) {
void *pixels = NULL; void *pixels = nullptr;
if (arg->IsNull() || arg->IsUndefined()) {
return pixels;
}
v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(arg);
if ( ! obj->IsObject() ) {
Nan::ThrowError("Bad Image argument");
return pixels;
}
if (obj->IsArrayBufferView()) { if (obj->IsArrayBufferView()) {
pixels = getArrayData<unsigned char>(obj, NULL); pixels = getArrayData<unsigned char>(obj);
} else if (obj->Has(JS_STR("data"))) { } else if (obj->Has(JS_STR("data"))) {
pixels = node::Buffer::Data(Nan::Get(obj, JS_STR("data")).ToLocalChecked()); pixels = node::Buffer::Data(Nan::Get(obj, JS_STR("data")).ToLocalChecked());
} else { } else {
Nan::ThrowError("Bad Image argument"); Nan::ThrowError("Bad argument");
} }
return pixels; return pixels;