swig/Lib/javascript/v8/javascriptuint8array.swg

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();
}
}