Skip to content

Commit 638795c

Browse files
committed
Add TypedArray C API
New API functions added: - jerry_value_is_typedarray - jerry_create_typedarray - jerry_create_typedarray_for_arraybuffer_sz - jerry_create_typedarray_for_arraybuffer - jerry_get_typedarray_type - jerry_get_typedarray_length - jerry_get_typedarray_buffer JerryScript-DCO-1.0-Signed-off-by: Peter Gal [email protected]
1 parent 0cc9834 commit 638795c

File tree

6 files changed

+1168
-1
lines changed

6 files changed

+1168
-1
lines changed

docs/02.API-REFERENCE.md

Lines changed: 335 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,26 @@ typedef jerry_value_t (*jerry_vm_exec_stop_callback_t) (void *user_p);
296296
- [jerry_set_vm_exec_stop_callback](#jerry_set_vm_exec_stop_callback)
297297

298298

299+
## jerry_typedarray_type_t
300+
301+
Enum which describes the TypedArray types.
302+
Possible values:
303+
304+
- JERRY_TYPEDARRAY_UINT8 - represents the Uint8Array TypedArray
305+
- JERRY_TYPEDARRAY_UINT8CLAMPED - represents the Uint8ClampedArray TypedArray
306+
- JERRY_TYPEDARRAY_INT8 - represents the Int8Array TypedArray
307+
- JERRY_TYPEDARRAY_UINT16 - represents the Uint16Array TypedArray
308+
- JERRY_TYPEDARRAY_INT16 - represents the Int16Array TypedArray
309+
- JERRY_TYPEDARRAY_UINT32 - represents the Uint32Array TypedArray
310+
- JERRY_TYPEDARRAY_INT32 - represents the Int32Array TypedArray
311+
- JERRY_TYPEDARRAY_FLOAT32 - represents the Float32Array TypedArray
312+
- JERRY_TYPEDARRAY_FLOAT64 - represents the Float64Array TypedArray
313+
- JERRY_TYPEDARRAY_INVALID - represents an invalid TypedArray
314+
315+
API functions can return the `JERRY_TYPEDARRAY_INVALID` value if the
316+
TypedArray support is not in the engine.
317+
318+
299319
# General engine functions
300320

301321
## jerry_init
@@ -1347,6 +1367,45 @@ jerry_value_is_string (const jerry_value_t value)
13471367
- [jerry_release_value](#jerry_release_value)
13481368

13491369

1370+
## jerry_value_is_typedarray
1371+
1372+
**Summary**
1373+
1374+
Checks whether the given `jerry_value_t` is a TypedArray object or not.
1375+
1376+
**Prototype**
1377+
1378+
```c
1379+
bool
1380+
jerry_value_is_typedarray (const jerry_value_t value)
1381+
```
1382+
1383+
- `value` - object to check
1384+
- return value
1385+
- true, if the given `jerry_value_t` is a TypedArray object.
1386+
- false, otherwise
1387+
1388+
**Example**
1389+
1390+
```c
1391+
{
1392+
jerry_value_t value;
1393+
... // create or acquire value
1394+
1395+
if (jerry_value_is_typedarray (value))
1396+
{
1397+
...
1398+
}
1399+
1400+
jerry_release_value (value);
1401+
}
1402+
```
1403+
1404+
**See also**
1405+
1406+
- [jerry_create_typedarray](#jerry_create_typedarray)
1407+
1408+
13501409
## jerry_value_is_undefined
13511410

13521411
**Summary**
@@ -3129,6 +3188,151 @@ jerry_create_string_sz (const jerry_char_t *str_p,
31293188
- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
31303189

31313190

3191+
## jerry_create_typedarray
3192+
3193+
**Summary**
3194+
3195+
Create a jerry_value_t representing an TypedArray object.
3196+
3197+
For the new object the type of the TypedArray (see: [jerry_typedarray_type_t](#jerry_typedarray_type_t))
3198+
and element count can be specified.
3199+
3200+
**Prototype**
3201+
3202+
```c
3203+
jerry_value_t
3204+
jerry_create_typedarray (jerry_typedarray_type_t type_name, jerry_length_t item_count);
3205+
```
3206+
3207+
- `type_name` - type of TypedArray to create
3208+
- `item_count` - number of items in the new TypedArray
3209+
- return value - the new TypedArray as a `jerry_value_t`
3210+
3211+
**Example**
3212+
3213+
```c
3214+
{
3215+
jerry_value_t array = jerry_create_typedarray (JERRY_TYPEDARRAY_UINT16, 15);
3216+
3217+
... // use the TypedArray
3218+
3219+
jerry_release_value (array);
3220+
}
3221+
```
3222+
3223+
**See also**
3224+
3225+
- [jerry_typedarray_type_t](#jerry_typedarray_type_t)
3226+
- [jerry_value_is_typedarray](#jerry_value_is_typedarray)
3227+
- [jerry_release_value](#jerry_release_value)
3228+
3229+
3230+
## jerry_create_typedarray_for_arraybuffer
3231+
3232+
**Summary**
3233+
3234+
Create a jerry_value_t representing an TypedArray object using
3235+
an already existing ArrayBuffer object.
3236+
3237+
For the new object the type of the TypedArray (see: [jerry_typedarray_type_t](#jerry_typedarray_type_t))
3238+
and element count can be specified.
3239+
3240+
The developer must ensure that the ArrayBuffer has the correct length for the given
3241+
type of TypedArray otherwise an error is generated.
3242+
3243+
The JavaScript equivalent of this function is: `new %TypedArray%(arraybuffer)` where `%TypedArray%` is
3244+
one of the allowed TypedArray functions.
3245+
3246+
**Prototype**
3247+
3248+
```c
3249+
jerry_value_t
3250+
jerry_create_typedarray_for_arraybuffer (jerry_typedarray_type_t type_name,
3251+
const jerry_value_t arraybuffer);
3252+
```
3253+
3254+
- `type_name` - type of TypedArray to create
3255+
- `arraybuffer` - the ArrayBuffer to use for the new TypedArray
3256+
- return value
3257+
- the new TypedArray as a `jerry_value_t`
3258+
- Error if the ArrayBuffer does not have enough space for the given type of TypedArray
3259+
3260+
**Example**
3261+
3262+
```c
3263+
{
3264+
jerry_value_t buffer = jerry_create_array_buffer (12 * 2);
3265+
jerry_value_t array = jerry_create_typedarray_for_arraybuffer (JERRY_TYPEDARRAY_UINT16, buffer);
3266+
jerry_release_value (buffer);
3267+
3268+
... // use the TypedArray
3269+
3270+
jerry_release_value (array);
3271+
}
3272+
```
3273+
3274+
**See also**
3275+
3276+
- [jerry_typedarray_type_t](#jerry_typedarray_type_t)
3277+
- [jerry_value_is_typedarray](#jerry_value_is_typedarray)
3278+
- [jerry_release_value](#jerry_release_value)
3279+
3280+
3281+
## jerry_create_typedarray_for_arraybuffer_sz
3282+
3283+
**Summary**
3284+
3285+
Create a jerry_value_t representing an TypedArray object using
3286+
an already existing ArrayBuffer object and by specifying the byteOffset, and length properties.
3287+
3288+
For the new object the type of the TypedArray (see: [jerry_typedarray_type_t](#jerry_typedarray_type_t))
3289+
and element count can be specified.
3290+
3291+
The developer must ensure that the ArrayBuffer has the correct length for the given
3292+
type of TypedArray otherwise an error is generated.
3293+
3294+
The JavaScript equivalent of this function is: `new %TypedArray%(arraybuffer, byteOffset, length)` where `%TypedArray%` is
3295+
one of the allowed TypedArray functions.
3296+
3297+
**Prototype**
3298+
3299+
```c
3300+
jerry_value_t
3301+
jerry_create_typedarray_for_arraybuffer_sz (jerry_typedarray_type_t type_name,
3302+
const jerry_value_t arraybuffer,
3303+
jerry_length_t byte_offset,
3304+
jerry_length_t length);
3305+
```
3306+
3307+
- `type_name` - type of TypedArray to create
3308+
- `arraybuffer` - the ArrayBuffer to use for the new TypedArray
3309+
- `byte_offset` - start offset to use for the ArrayBuffer
3310+
- `length` - number of elements to used from the ArrayBuffer (this is not the same as the byteLength)
3311+
- return value
3312+
- the new TypedArray as a `jerry_value_t`
3313+
- Error if the ArrayBuffer does not have enough space for the given type of TypedArray
3314+
3315+
**Example**
3316+
3317+
```c
3318+
{
3319+
jerry_value_t buffer = jerry_create_array_buffer (12 * 2);
3320+
jerry_value_t array = jerry_create_typedarray_for_arraybuffer_sz (JERRY_TYPEDARRAY_UINT16, buffer, 4, 10);
3321+
jerry_release_value (buffer);
3322+
3323+
... // use the TypedArray
3324+
3325+
jerry_release_value (array);
3326+
}
3327+
```
3328+
3329+
**See also**
3330+
3331+
- [jerry_typedarray_type_t](#jerry_typedarray_type_t)
3332+
- [jerry_value_is_typedarray](#jerry_value_is_typedarray)
3333+
- [jerry_release_value](#jerry_release_value)
3334+
3335+
31323336
## jerry_create_undefined
31333337

31343338
**Summary**
@@ -5123,3 +5327,134 @@ jerry_get_arraybuffer_pointer (const jerry_value_t value);
51235327
**See also**
51245328

51255329
- [jerry_create_arraybuffer_external](#jerry_create_arraybuffer_external)
5330+
5331+
5332+
## jerry_get_typedarray_type
5333+
5334+
**Summary**
5335+
5336+
Get the type of the TypedArray.
5337+
5338+
The returned type is one of the [jerry_typedarray_type_t](#jerry_typedarray_type_t)
5339+
enum value.
5340+
5341+
**Prototype**
5342+
5343+
```c
5344+
jerry_typedarray_type_t
5345+
jerry_get_typedarray_type (jerry_value_t value);
5346+
```
5347+
5348+
- `value` - TypedArray object to query for type.
5349+
- return
5350+
- the type of the TypedArray
5351+
- JERRY_TYPEDARRAY_INVALID if the object was not a TypedArray
5352+
5353+
**Example**
5354+
5355+
```c
5356+
{
5357+
jerry_typedarray_type_t expected_type = JERRY_TYPEDARRAY_UINT32;
5358+
jerry_value_t typedarray = jerry_create_typedarray (expected_klass, 25);
5359+
5360+
jerry_typedarray_type_t type = jerry_get_typedarray_type (typedarray);
5361+
5362+
// 'type' is now JERRY_TYPEDARRAY_UINT32
5363+
5364+
jerry_release_value (typedarray);
5365+
}
5366+
```
5367+
5368+
**See also**
5369+
5370+
- [jerry_create_typedarray](#jerry_create_typedarray)
5371+
- [jerry_typedarray_type_t](#jerry_typedarray_type_t)
5372+
5373+
5374+
## jerry_get_typedarray_length
5375+
5376+
**Summary**
5377+
5378+
Get the element count of the TypedArray as specified during creation.
5379+
5380+
This is not the same as the byteLength property of a TypedArray object.
5381+
5382+
**Prototype**
5383+
5384+
```
5385+
jerry_length_t
5386+
jerry_get_typedarray_length (jerry_value_t value);
5387+
```
5388+
5389+
- `value` - TypedArray object to query
5390+
- return
5391+
- length (element count) of the TypedArray object
5392+
- 0 if the object is not a TypedArray
5393+
5394+
**Example**
5395+
5396+
```c
5397+
{
5398+
jerry_value_t array = jerry_create_typedarray (JERRY_TYPEDARRAY_INT32, 21);
5399+
5400+
jerry_length_t element_count = jerry_get_typedarray_length (array);
5401+
5402+
// element_count is now 21.
5403+
5404+
jerry_release_value (array);
5405+
}
5406+
```
5407+
5408+
**See also**
5409+
5410+
- [jerry_create_typedarray](#jerry_create_typedarray)
5411+
5412+
5413+
## jerry_get_typedarray_buffer
5414+
5415+
**Summary**
5416+
5417+
Get the ArrayBuffer object used by a TypedArray object.
5418+
Additionally returns the byteLength and byteOffset properties
5419+
of the TypedArray object.
5420+
5421+
For the returned ArrayBuffer the [jerry_release_value](#jerry_release_value)
5422+
must be called.
5423+
5424+
**Prototype**
5425+
5426+
```c
5427+
jerry_value_t jerry_get_typedarray_buffer (jerry_value_t value,
5428+
jerry_length_t *byteOffset,
5429+
jerry_length_t *byteLength);
5430+
```
5431+
5432+
- `value` - TypedArray to get the ArrayBuffer from
5433+
- `byteOffset` - (Optional) returns the start offset of the ArrayBuffer for the TypedArray
5434+
- `byteLength` - (Optional) returns the number of bytes used from the ArrayBuffer for the TypedArray
5435+
- return
5436+
- TypedArray object's underlying ArrayBuffer object
5437+
- TypeError if the `value` is not a TypedArray object
5438+
5439+
**Example**
5440+
5441+
```c
5442+
{
5443+
jerry_value_t array = jerry_create_typedarray (JERRY_TYPEDARRAY_INT16, 11);
5444+
5445+
jerry_length_t byteLength = 0;
5446+
jerry_length_t byteOffset = 0;
5447+
jerry_value_t buffer = jerry_get_typedarray_buffer (array, &byteOffset, &byteLength);
5448+
5449+
// buffer is an ArrayBuffer object and ArrayBuffer operations can be performed on it
5450+
// byteLength is 11 * 2 (2 as the TypedArray stores Int16 that is 2 byte elements)
5451+
// byteOffset is 0
5452+
5453+
jerry_release_value (buffer);
5454+
jerry_release_value (array);
5455+
}
5456+
```
5457+
5458+
**See also**
5459+
5460+
- [jerry_create_typedarray](#jerry_create_typedarray)

0 commit comments

Comments
 (0)