mirror of https://github.com/swig/swig.git
57 lines
1.6 KiB
Plaintext
57 lines
1.6 KiB
Plaintext
|
|
/* ------------------------------------------------------------
|
|
* utility methods for Uint8Array
|
|
* ------------------------------------------------------------ */
|
|
|
|
#define SWIGV8_UINT8ARRAY v8::Local<v8::Uint8Array>
|
|
|
|
%fragment("SWIG_FromUint8Array", "header") {
|
|
SWIGINTERN int
|
|
SWIG_FromUint8Array(SWIGV8_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->IsUint8Array()) {
|
|
SWIGV8_UINT8ARRAY arr = SWIGV8_UINT8ARRAY::Cast(valRef);
|
|
size_t len = (size_t)arr->Length();
|
|
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++) {
|
|
SWIGV8_VALUE val = SWIGV8_ARRAY_GET(arr, i);
|
|
cbuf[i] = (unsigned char)SWIGV8_NUMBER_VALUE(val);
|
|
}
|
|
}
|
|
return SWIG_OK;
|
|
}
|
|
return valRef->IsNull() || valRef->IsUndefined() ? SWIG_OK : SWIG_TypeError;
|
|
}
|
|
}
|
|
|
|
%fragment("SWIG_ToUint8Array", "header") {
|
|
SWIGINTERN SWIGV8_VALUE SWIG_ToUint8Array(void* buf, size_t len)
|
|
{
|
|
if (buf != NULL && len > 0) {
|
|
size_t i;
|
|
unsigned char* cbuf = (unsigned char*)buf;
|
|
v8::Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(v8::Isolate::GetCurrent(), len);
|
|
SWIGV8_UINT8ARRAY arr = v8::Uint8Array::New(ab, 0, len);
|
|
for (i = 0; i < len; i++) {
|
|
SWIGV8_VALUE val = SWIGV8_INTEGER_NEW_UNS(cbuf[i]);
|
|
SWIGV8_ARRAY_SET(arr, i, val);
|
|
}
|
|
return arr;
|
|
}
|
|
return SWIGV8_UNDEFINED();
|
|
}
|
|
}
|