wip array ops
This commit is contained in:
parent
3256bf8c30
commit
6b2249706e
|
@ -125,25 +125,24 @@
|
||||||
|
|
||||||
|
|
||||||
#define SET_PROP(OBJ, KEY, VAL) OBJ->Set(JS_STR(KEY), VAL);
|
#define SET_PROP(OBJ, KEY, VAL) OBJ->Set(JS_STR(KEY), VAL);
|
||||||
|
#define SET_I(ARR, I, VAL) ARR->Set(I, VAL);
|
||||||
|
|
||||||
|
|
||||||
#define CTOR_CHECK(T) \
|
#define CTOR_CHECK(T) \
|
||||||
if ( ! info.IsConstructCall() ) \
|
if ( ! info.IsConstructCall() ) \
|
||||||
return Nan::ThrowTypeError(T " must be called with the 'new' keyword.");
|
return Nan::ThrowTypeError(T " must be called with the 'new' keyword.");
|
||||||
|
|
||||||
|
#define SETTER_CHECK(C, T) \
|
||||||
|
if ( ! value->C ) \
|
||||||
|
return Nan::ThrowTypeError("Value must be " T);
|
||||||
|
|
||||||
|
|
||||||
#define ACCESSOR_RW(OBJ, NAME) \
|
#define ACCESSOR_RW(OBJ, NAME) \
|
||||||
Nan::SetAccessor(OBJ, JS_STR(#NAME), NAME ## Getter, NAME ## Setter);
|
Nan::SetAccessor(OBJ, JS_STR(#NAME), NAME ## Getter, NAME ## Setter);
|
||||||
|
|
||||||
#define ACCESSOR_R(OBJ, NAME) \
|
#define ACCESSOR_R(OBJ, NAME) \
|
||||||
Nan::SetAccessor(OBJ, JS_STR(#NAME), NAME ## Getter);
|
Nan::SetAccessor(OBJ, JS_STR(#NAME), NAME ## Getter);
|
||||||
|
|
||||||
#define SET_I(ARR, I, VAL) ARR->Set(I, VAL);
|
|
||||||
|
|
||||||
|
|
||||||
#define SETTER_CHECK(C, T) \
|
|
||||||
if ( ! value->C ) \
|
|
||||||
return Nan::ThrowTypeError("Value must be " T);
|
|
||||||
|
|
||||||
|
|
||||||
#define SETTER_UTF8_ARG \
|
#define SETTER_UTF8_ARG \
|
||||||
SETTER_CHECK(IsString(), "string"); \
|
SETTER_CHECK(IsString(), "string"); \
|
||||||
|
@ -186,4 +185,66 @@
|
||||||
Local<Object> v = Local<Object>::Cast(value);
|
Local<Object> v = Local<Object>::Cast(value);
|
||||||
|
|
||||||
|
|
||||||
|
template<typename Type>
|
||||||
|
inline Type* getArrayData(Local<Value> arg, int *num = NULL) {
|
||||||
|
|
||||||
|
Type *data = NULL;
|
||||||
|
|
||||||
|
if (num) {
|
||||||
|
*num = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arg->IsNull() || arg->IsUndefined()) {
|
||||||
|
return pixels;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arg->IsArray()) {
|
||||||
|
Nan::ThrowError("JS Array is not supported here.");
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! arg->IsArrayBufferView() ) {
|
||||||
|
Nan::ThrowError("Argument must be a TypedArray.");
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
Local<ArrayBufferView> arr = Local<ArrayBufferView>::Cast(arg);
|
||||||
|
if (num) {
|
||||||
|
*num = arr->ByteLength() / sizeof(Type);
|
||||||
|
}
|
||||||
|
data = reinterpret_cast<Type*>(arr->Buffer()->GetContents().Data());
|
||||||
|
|
||||||
|
return data;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void *getImageData(Local<Value> arg) {
|
||||||
|
|
||||||
|
void *pixels = NULL;
|
||||||
|
|
||||||
|
if (arg->IsNull() || arg->IsUndefined()) {
|
||||||
|
return pixels;
|
||||||
|
}
|
||||||
|
|
||||||
|
Local<Object> obj = Local<Object>::Cast(arg);
|
||||||
|
|
||||||
|
if ( ! obj->IsObject() ) {
|
||||||
|
Nan::ThrowError("Bad Image argument");
|
||||||
|
return pixels;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj->IsArrayBufferView()) {
|
||||||
|
pixels = getArrayData<BYTE>(obj, NULL);
|
||||||
|
} else if (obj->Has(JS_STR("data"))) {
|
||||||
|
pixels = node::Buffer::Data(Nan::Get(obj, JS_STR("data")).ToLocalChecked());
|
||||||
|
} else {
|
||||||
|
Nan::ThrowError("Bad Image argument");
|
||||||
|
}
|
||||||
|
|
||||||
|
return pixels;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif // _ADDON_TOOLS_HPP_
|
#endif // _ADDON_TOOLS_HPP_
|
||||||
|
|
Loading…
Reference in New Issue