Add JS_GetUint8Array API
Shorthand for getting the underlying buffer of a Uint8Array.
This commit is contained in:
parent
b11a10471d
commit
6d7fd42aae
2 changed files with 30 additions and 1 deletions
28
quickjs.c
28
quickjs.c
|
@ -51684,6 +51684,34 @@ JSValue JS_GetTypedArrayBuffer(JSContext *ctx, JSValueConst obj,
|
||||||
return JS_DupValue(ctx, JS_MKPTR(JS_TAG_OBJECT, ta->buffer));
|
return JS_DupValue(ctx, JS_MKPTR(JS_TAG_OBJECT, ta->buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* return NULL if exception. WARNING: any JS call can detach the
|
||||||
|
buffer and render the returned pointer invalid */
|
||||||
|
uint8_t *JS_GetUint8Array(JSContext *ctx, size_t *psize, JSValueConst obj)
|
||||||
|
{
|
||||||
|
JSObject *p;
|
||||||
|
JSTypedArray *ta;
|
||||||
|
JSArrayBuffer *abuf;
|
||||||
|
p = get_typed_array(ctx, obj, FALSE);
|
||||||
|
if (!p)
|
||||||
|
goto fail;
|
||||||
|
if (typed_array_is_detached(ctx, p)) {
|
||||||
|
JS_ThrowTypeErrorDetachedArrayBuffer(ctx);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
if (p->class_id != JS_CLASS_UINT8_ARRAY && p->class_id != JS_CLASS_UINT8C_ARRAY) {
|
||||||
|
JS_ThrowTypeError(ctx, "not a Uint8Array");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
ta = p->u.typed_array;
|
||||||
|
abuf = ta->buffer->u.array_buffer;
|
||||||
|
|
||||||
|
*psize = ta->length;
|
||||||
|
return abuf->data + ta->offset;
|
||||||
|
fail:
|
||||||
|
*psize = 0;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static JSValue js_typed_array_get_toStringTag(JSContext *ctx,
|
static JSValue js_typed_array_get_toStringTag(JSContext *ctx,
|
||||||
JSValueConst this_val)
|
JSValueConst this_val)
|
||||||
{
|
{
|
||||||
|
|
|
@ -818,6 +818,7 @@ JSValue JS_NewArrayBuffer(JSContext *ctx, uint8_t *buf, size_t len,
|
||||||
JSValue JS_NewArrayBufferCopy(JSContext *ctx, const uint8_t *buf, size_t len);
|
JSValue JS_NewArrayBufferCopy(JSContext *ctx, const uint8_t *buf, size_t len);
|
||||||
void JS_DetachArrayBuffer(JSContext *ctx, JSValueConst obj);
|
void JS_DetachArrayBuffer(JSContext *ctx, JSValueConst obj);
|
||||||
uint8_t *JS_GetArrayBuffer(JSContext *ctx, size_t *psize, JSValueConst obj);
|
uint8_t *JS_GetArrayBuffer(JSContext *ctx, size_t *psize, JSValueConst obj);
|
||||||
|
uint8_t *JS_GetUint8Array(JSContext *ctx, size_t *psize, JSValueConst obj);
|
||||||
JSValue JS_GetTypedArrayBuffer(JSContext *ctx, JSValueConst obj,
|
JSValue JS_GetTypedArrayBuffer(JSContext *ctx, JSValueConst obj,
|
||||||
size_t *pbyte_offset,
|
size_t *pbyte_offset,
|
||||||
size_t *pbyte_length,
|
size_t *pbyte_length,
|
||||||
|
|
Loading…
Reference in a new issue