Skip to content

Commit 31c8342

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 b548eae commit 31c8342

File tree

6 files changed

+1157
-1
lines changed

6 files changed

+1157
-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**
@@ -3036,6 +3095,151 @@ jerry_create_string_sz (const jerry_char_t *str_p,
30363095
- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
30373096

30383097

3098+
## jerry_create_typedarray
3099+
3100+
**Summary**
3101+
3102+
Create a jerry_value_t representing an TypedArray object.
3103+
3104+
For the new object the type of the TypedArray (see: [jerry_typedarray_type_t](#jerry_typedarray_type_t))
3105+
and element count can be specified.
3106+
3107+
**Prototype**
3108+
3109+
```c
3110+
jerry_value_t
3111+
jerry_create_typedarray (jerry_typedarray_type_t type_name, jerry_length_t item_count);
3112+
```
3113+
3114+
- `type_name` - type of TypedArray to create
3115+
- `item_count` - number of items in the new TypedArray
3116+
- return value - the new TypedArray as a `jerry_value_t`
3117+
3118+
**Example**
3119+
3120+
```c
3121+
{
3122+
jerry_value_t array = jerry_create_typedarray (JERRY_TYPEDARRAY_UINT16, 15);
3123+
3124+
... // use the TypedArray
3125+
3126+
jerry_release_value (array);
3127+
}
3128+
```
3129+
3130+
**See also**
3131+
3132+
- [jerry_typedarray_type_t](#jerry_typedarray_type_t)
3133+
- [jerry_value_is_typedarray](#jerry_value_is_typedarray)
3134+
- [jerry_release_value](#jerry_release_value)
3135+
3136+
3137+
## jerry_create_typedarray_for_arraybuffer
3138+
3139+
**Summary**
3140+
3141+
Create a jerry_value_t representing an TypedArray object using
3142+
an already existing ArrayBuffer object.
3143+
3144+
For the new object the type of the TypedArray (see: [jerry_typedarray_type_t](#jerry_typedarray_type_t))
3145+
and element count can be specified.
3146+
3147+
The developer must ensure that the ArrayBuffer has the correct length for the given
3148+
type of TypedArray otherwise an error is generated.
3149+
3150+
The JavaScript equivalent of this function is: `new %TypedArray%(arraybuffer)` where `%TypedArray%` is
3151+
one of the allowed TypedArray functions.
3152+
3153+
**Prototype**
3154+
3155+
```c
3156+
jerry_value_t
3157+
jerry_create_typedarray_for_arraybuffer (jerry_typedarray_type_t type_name,
3158+
const jerry_value_t arraybuffer);
3159+
```
3160+
3161+
- `type_name` - type of TypedArray to create
3162+
- `arraybuffer` - the ArrayBuffer to use for the new TypedArray
3163+
- return value
3164+
- the new TypedArray as a `jerry_value_t`
3165+
- Error if the ArrayBuffer does not have enough space for the given type of TypedArray
3166+
3167+
**Example**
3168+
3169+
```c
3170+
{
3171+
jerry_value_t buffer = jerry_create_array_buffer (12 * 2);
3172+
jerry_value_t array = jerry_create_typedarray_for_arraybuffer (JERRY_TYPEDARRAY_UINT16, buffer);
3173+
jerry_release_value (buffer);
3174+
3175+
... // use the TypedArray
3176+
3177+
jerry_release_value (array);
3178+
}
3179+
```
3180+
3181+
**See also**
3182+
3183+
- [jerry_typedarray_type_t](#jerry_typedarray_type_t)
3184+
- [jerry_value_is_typedarray](#jerry_value_is_typedarray)
3185+
- [jerry_release_value](#jerry_release_value)
3186+
3187+
3188+
## jerry_create_typedarray_for_arraybuffer_sz
3189+
3190+
**Summary**
3191+
3192+
Create a jerry_value_t representing an TypedArray object using
3193+
an already existing ArrayBuffer object and by specifying the byteOffset, and length properties.
3194+
3195+
For the new object the type of the TypedArray (see: [jerry_typedarray_type_t](#jerry_typedarray_type_t))
3196+
and element count can be specified.
3197+
3198+
The developer must ensure that the ArrayBuffer has the correct length for the given
3199+
type of TypedArray otherwise an error is generated.
3200+
3201+
The JavaScript equivalent of this function is: `new %TypedArray%(arraybuffer, byteOffset, length)` where `%TypedArray%` is
3202+
one of the allowed TypedArray functions.
3203+
3204+
**Prototype**
3205+
3206+
```c
3207+
jerry_value_t
3208+
jerry_create_typedarray_for_arraybuffer_sz (jerry_typedarray_type_t type_name,
3209+
const jerry_value_t arraybuffer,
3210+
jerry_length_t byte_offset,
3211+
jerry_length_t length);
3212+
```
3213+
3214+
- `type_name` - type of TypedArray to create
3215+
- `arraybuffer` - the ArrayBuffer to use for the new TypedArray
3216+
- `byte_offset` - start offset to use for the ArrayBuffer
3217+
- `length` - number of elements to used from the ArrayBuffer (this is not the same as the byteLength)
3218+
- return value
3219+
- the new TypedArray as a `jerry_value_t`
3220+
- Error if the ArrayBuffer does not have enough space for the given type of TypedArray
3221+
3222+
**Example**
3223+
3224+
```c
3225+
{
3226+
jerry_value_t buffer = jerry_create_array_buffer (12 * 2);
3227+
jerry_value_t array = jerry_create_typedarray_for_arraybuffer_sz (JERRY_TYPEDARRAY_UINT16, buffer, 4, 10);
3228+
jerry_release_value (buffer);
3229+
3230+
... // use the TypedArray
3231+
3232+
jerry_release_value (array);
3233+
}
3234+
```
3235+
3236+
**See also**
3237+
3238+
- [jerry_typedarray_type_t](#jerry_typedarray_type_t)
3239+
- [jerry_value_is_typedarray](#jerry_value_is_typedarray)
3240+
- [jerry_release_value](#jerry_release_value)
3241+
3242+
30393243
## jerry_create_undefined
30403244

30413245
**Summary**
@@ -5030,3 +5234,134 @@ jerry_get_arraybuffer_pointer (const jerry_value_t value);
50305234
**See also**
50315235

50325236
- [jerry_create_arraybuffer_external](#jerry_create_arraybuffer_external)
5237+
5238+
5239+
## jerry_get_typedarray_type
5240+
5241+
**Summary**
5242+
5243+
Get the type of the TypedArray.
5244+
5245+
The returned type is one of the [jerry_typedarray_type_t](#jerry_typedarray_type_t)
5246+
enum value.
5247+
5248+
**Prototype**
5249+
5250+
```c
5251+
jerry_typedarray_type_t
5252+
jerry_get_typedarray_type (jerry_value_t value);
5253+
```
5254+
5255+
- `value` - TypedArray object to query for type.
5256+
- return
5257+
- the type of the TypedArray
5258+
- JERRY_TYPEDARRAY_INVALID if the object was not a TypedArray
5259+
5260+
**Example**
5261+
5262+
```c
5263+
{
5264+
jerry_typedarray_type_t expected_type = JERRY_TYPEDARRAY_UINT32;
5265+
jerry_value_t typedarray = jerry_create_typedarray (expected_klass, 25);
5266+
5267+
jerry_typedarray_type_t type = jerry_get_typedarray_type (typedarray);
5268+
5269+
// 'type' is now JERRY_TYPEDARRAY_UINT32
5270+
5271+
jerry_release_value (typedarray);
5272+
}
5273+
```
5274+
5275+
**See also**
5276+
5277+
- [jerry_create_typedarray](#jerry_create_typedarray)
5278+
- [jerry_typedarray_type_t](#jerry_typedarray_type_t)
5279+
5280+
5281+
## jerry_get_typedarray_length
5282+
5283+
**Summary**
5284+
5285+
Get the element count of the TypedArray as specified during creation.
5286+
5287+
This is not the same as the byteLength property of a TypedArray object.
5288+
5289+
**Prototype**
5290+
5291+
```
5292+
jerry_length_t
5293+
jerry_get_typedarray_length (jerry_value_t value);
5294+
```
5295+
5296+
- `value` - TypedArray object to query
5297+
- return
5298+
- length (element count) of the TypedArray object
5299+
- 0 if the object is not a TypedArray
5300+
5301+
**Example**
5302+
5303+
```c
5304+
{
5305+
jerry_value_t array = jerry_create_typedarray (JERRY_TYPEDARRAY_INT32, 21);
5306+
5307+
jerry_length_t element_count = jerry_get_typedarray_length (array);
5308+
5309+
// element_count is now 21.
5310+
5311+
jerry_release_value (array);
5312+
}
5313+
```
5314+
5315+
**See also**
5316+
5317+
- [jerry_create_typedarray](#jerry_create_typedarray)
5318+
5319+
5320+
## jerry_get_typedarray_buffer
5321+
5322+
**Summary**
5323+
5324+
Get the ArrayBuffer object used by a TypedArray object.
5325+
Additionally returns the byteLength and byteOffset properties
5326+
of the TypedArray object.
5327+
5328+
For the returned ArrayBuffer the [jerry_release_value](#jerry_release_value)
5329+
must be called.
5330+
5331+
**Prototype**
5332+
5333+
```c
5334+
jerry_value_t jerry_get_typedarray_buffer (jerry_value_t value,
5335+
jerry_length_t *byteOffset,
5336+
jerry_length_t *byteLength);
5337+
```
5338+
5339+
- `value` - TypedArray to get the ArrayBuffer from
5340+
- `byteOffset` - (Optional) returns the start offset of the ArrayBuffer for the TypedArray
5341+
- `byteLength` - (Optional) returns the number of bytes used from the ArrayBuffer for the TypedArray
5342+
- return
5343+
- TypedArray object's underlying ArrayBuffer object
5344+
- TypeError if the `value` is not a TypedArray object
5345+
5346+
**Example**
5347+
5348+
```c
5349+
{
5350+
jerry_value_t array = jerry_create_typedarray (JERRY_TYPEDARRAY_INT16, 11);
5351+
5352+
jerry_length_t byteLength = 0;
5353+
jerry_length_t byteOffset = 0;
5354+
jerry_value_t buffer = jerry_get_typedarray_buffer (array, &byteOffset, &byteLength);
5355+
5356+
// buffer is an ArrayBuffer object and ArrayBuffer operations can be performed on it
5357+
// byteLength is 11 * 2 (2 as the TypedArray stores Int16 that is 2 byte elements)
5358+
// byteOffset is 0
5359+
5360+
jerry_release_value (buffer);
5361+
jerry_release_value (array);
5362+
}
5363+
```
5364+
5365+
**See also**
5366+
5367+
- [jerry_create_typedarray](#jerry_create_typedarray)

0 commit comments

Comments
 (0)