mirror of https://github.com/swig/swig.git
59 lines
1.6 KiB
Plaintext
59 lines
1.6 KiB
Plaintext
|
|
/* ------------------------------------------------------------
|
|
* utility methods for Uint8Array
|
|
* ------------------------------------------------------------ */
|
|
|
|
%fragment("SWIG_FromUint8Array", "header") {
|
|
SWIGINTERN int
|
|
SWIG_FromUint8Array(Napi::Value valRef, void** cptr, size_t* psize, int *alloc)
|
|
{
|
|
if (alloc == NULL || psize == NULL || cptr == NULL)
|
|
return SWIG_TypeError;
|
|
*alloc = 0;
|
|
*cptr = NULL;
|
|
*psize = 0;
|
|
if (valRef.IsTypedArray()) {
|
|
Napi::Number num;
|
|
size_t len = 0;
|
|
Napi::TypedArray arr = valRef.As<Napi::TypedArray>();
|
|
if (arr.TypedArrayType() != napi_uint8_array) {
|
|
return SWIG_TypeError;
|
|
}
|
|
len = arr.ElementLength();
|
|
if (len > 0) {
|
|
size_t i;
|
|
unsigned char *cbuf = %new_array(len, unsigned char);
|
|
if (cbuf == NULL) {
|
|
return SWIG_TypeError;
|
|
}
|
|
*alloc = SWIG_NEWOBJ;
|
|
*cptr = (void*)cbuf;
|
|
*psize = len;
|
|
for (i = 0; i < len; i++) {
|
|
NAPI_CHECK_RESULT(arr.Get(i).ToNumber(), num);
|
|
cbuf[i] = (unsigned char)num.Uint32Value();
|
|
}
|
|
}
|
|
return SWIG_OK;
|
|
}
|
|
return valRef.IsNull() || valRef.IsUndefined() ? SWIG_OK : SWIG_TypeError;
|
|
}
|
|
}
|
|
|
|
%fragment("SWIG_ToUint8Array", "header") {
|
|
%#define SWIG_ToUint8Array(buf, len) SWIG_EnvToUint8Array(env, buf, len)
|
|
SWIGINTERN Napi::Value SWIG_EnvToUint8Array(Napi::Env env, void* buf, size_t len)
|
|
{
|
|
if (buf != NULL && len > 0) {
|
|
size_t i;
|
|
unsigned char* cbuf = (unsigned char*)buf;
|
|
Napi::Uint8Array arr = Napi::Uint8Array::New(env, len);
|
|
for (i = 0; i < len; i++) {
|
|
arr.Set(i, cbuf[i]);
|
|
}
|
|
return arr;
|
|
}
|
|
return env.Undefined();
|
|
}
|
|
}
|