Skip to content

Commit 5348e04

Browse files
committed
Add TypedArray C API
New API functions added: - jerry_value_is_typedarray - jerry_create_typedarray - jerry_create_typedarray_with_arraybuffer_sz - jerry_create_typedarray_with_arraybuffer - jerry_get_typedarray_type - jerry_get_typedarray_length - jerry_get_typedarray_buffer JerryScript-DCO-1.0-Signed-off-by: Peter Gal pgal.u-szeged@partner.samsung.com
1 parent ded0d5a commit 5348e04

File tree

6 files changed

+1100
-1
lines changed

6 files changed

+1100
-1
lines changed

docs/02.API-REFERENCE.md

Lines changed: 333 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_class_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_UNKNOWN - represents an invalid TypedArray
314+
315+
API functions can return the `JERRY_TYPEDARRAY_UNKNOWN` value if the
316+
TypedArray support is not in the engine.
317+
318+
299319
# General engine functions
300320

301321
## jerry_init
@@ -1346,6 +1366,45 @@ jerry_value_is_string (const jerry_value_t value)
13461366
- [jerry_release_value](#jerry_release_value)
13471367

13481368

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

13511410
**Summary**
@@ -2985,6 +3044,150 @@ jerry_create_string_sz (const jerry_char_t *str_p,
29853044
- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
29863045

29873046

3047+
## jerry_create_typedarray
3048+
3049+
**Summary**
3050+
3051+
Create a jerry_value_t representing an TypedArray object.
3052+
3053+
For the new object the type of the TypedArray (see: [jerry_typedarray_class_t](#jerry_typedarray_class_t))
3054+
and element count can be specified.
3055+
3056+
**Prototype**
3057+
3058+
```c
3059+
jerry_value_t
3060+
jerry_create_typedarray (jerry_typedarray_class_t class_name, jerry_length_t length);
3061+
```
3062+
3063+
- `class_name` - type of TypedArray to create
3064+
- `length` - length of the new TypedArray
3065+
- return value - the new TypedArray as a `jerry_value_t`
3066+
3067+
**Example**
3068+
3069+
```c
3070+
{
3071+
jerry_value_t array = jerry_create_typedarray (JERRY_TYPEDARRAY_UINT16, 15);
3072+
3073+
... // use the TypedArray
3074+
3075+
jerry_release_value (array);
3076+
}
3077+
```
3078+
3079+
**See also**
3080+
3081+
- [jerry_typedarray_class_t](#jerry_typedarray_class_t)
3082+
- [jerry_value_is_typedarray](#jerry_value_is_typedarray)
3083+
- [jerry_release_value](#jerry_release_value)
3084+
3085+
3086+
## jerry_create_typedarray_with_arraybuffer
3087+
3088+
**Summary**
3089+
3090+
Create a jerry_value_t representing an TypedArray object using
3091+
an already exisint ArrayBuffer object.
3092+
3093+
For the new object the type of the TypedArray (see: [jerry_typedarray_class_t](#jerry_typedarray_class_t))
3094+
and element count can be specified.
3095+
3096+
The developer must ensure that the ArrayBuffer has the correct length for the given
3097+
type of TypedArray otherwise an error is generated.
3098+
3099+
The JavaScript equivalent of this function is: `new %TypedArray%(arrabuffer)` where `%TypedArray%` is
3100+
one of the allowed TypedArray functions.
3101+
3102+
**Prototype**
3103+
3104+
```c
3105+
jerry_value_t
3106+
jerry_create_typedarray_with_arraybuffer (jerry_typedarray_class_t class_name, const jerry_value_t arraybuffer);
3107+
```
3108+
3109+
- `class_name` - type of TypedArray to create
3110+
- `arraybuffer` - the ArrayBuffer to use for the new TypedArray
3111+
- return value
3112+
- the new TypedArray as a `jerry_value_t`
3113+
- Error if the ArrayBuffer does not have enough space for the given type of TypedArray
3114+
3115+
**Example**
3116+
3117+
```c
3118+
{
3119+
jerry_value_t buffer = jerry_create_array_buffer (12 * 2);
3120+
jerry_value_t array = jerry_create_typedarray_with_arraybuffer (JERRY_TYPEDARRAY_UINT16, buffer);
3121+
jerry_release_value (buffer);
3122+
3123+
... // use the TypedArray
3124+
3125+
jerry_release_value (array);
3126+
}
3127+
```
3128+
3129+
**See also**
3130+
3131+
- [jerry_typedarray_class_t](#jerry_typedarray_class_t)
3132+
- [jerry_value_is_typedarray](#jerry_value_is_typedarray)
3133+
- [jerry_release_value](#jerry_release_value)
3134+
3135+
3136+
## jerry_create_typedarray_with_arraybuffer_sz
3137+
3138+
**Summary**
3139+
3140+
Create a jerry_value_t representing an TypedArray object using
3141+
an already exisint ArrayBuffer object and by specifying the byteOffset, and length properties.
3142+
3143+
For the new object the type of the TypedArray (see: [jerry_typedarray_class_t](#jerry_typedarray_class_t))
3144+
and element count can be specified.
3145+
3146+
The developer must ensure that the ArrayBuffer has the correct length for the given
3147+
type of TypedArray otherwise an error is generated.
3148+
3149+
The JavaScript equivalent of this function is: `new %TypedArray%(arrabuffer, byteOffset, length)` where `%TypedArray%` is
3150+
one of the allowed TypedArray functions.
3151+
3152+
**Prototype**
3153+
3154+
```c
3155+
jerry_value_t
3156+
jerry_create_typedarray_with_arraybuffer_sz (jerry_typedarray_class_t class_name,
3157+
const jerry_value_t arraybuffer,
3158+
jerry_length_t byte_offset,
3159+
jerry_length_t length);
3160+
```
3161+
3162+
- `class_name` - type of TypedArray to create
3163+
- `arraybuffer` - the ArrayBuffer to use for the new TypedArray
3164+
- `byte_offset` - start offset to use for the ArrayBuffer
3165+
- `length` - number of elements to used from the ArrayBuffer (this is not the same as the byteLength)
3166+
- return value
3167+
- the new TypedArray as a `jerry_value_t`
3168+
- Error if the ArrayBuffer does not have enough space for the given type of TypedArray
3169+
3170+
**Example**
3171+
3172+
```c
3173+
{
3174+
jerry_value_t buffer = jerry_create_array_buffer (12 * 2);
3175+
jerry_value_t array = jerry_create_typedarray_with_arraybuffer (JERRY_TYPEDARRAY_UINT16, buffer, 4, 10);
3176+
jerry_release_value (buffer);
3177+
3178+
... // use the TypedArray
3179+
3180+
jerry_release_value (array);
3181+
}
3182+
```
3183+
3184+
**See also**
3185+
3186+
- [jerry_typedarray_class_t](#jerry_typedarray_class_t)
3187+
- [jerry_value_is_typedarray](#jerry_value_is_typedarray)
3188+
- [jerry_release_value](#jerry_release_value)
3189+
3190+
29883191
## jerry_create_undefined
29893192

29903193
**Summary**
@@ -4921,3 +5124,133 @@ jerry_arraybuffer_write (const jerry_value_t value,
49215124
- [jerry_create_arraybuffer](#jerry_create_arraybuffer)
49225125
- [jerry_arraybuffer_write](#jerry_arraybuffer_write)
49235126
- [jerry_get_arraybuffer_byte_length](#jerry_get_arraybuffer_byte_length)
5127+
5128+
5129+
## jerry_get_typedarray_type
5130+
5131+
**Summary**
5132+
5133+
Get the type of the TypedArray.
5134+
5135+
The returned type is one of the [jerry_typedarray_class_t](#jerry_typedarray_class_t)
5136+
enum value.
5137+
5138+
**Prototype**
5139+
5140+
```c
5141+
jerry_typedarray_class_t
5142+
jerry_get_typedarray_type (jerry_value_t value);
5143+
```
5144+
5145+
- `value` - TypedArray object to query for type.
5146+
- return
5147+
- the type of the TypedArray
5148+
- JERRY_TYPEDARRAY_UNKNOWN if the object was not a TypedArray
5149+
5150+
**Example**
5151+
5152+
```c
5153+
{
5154+
jerry_typedarray_class_t expected_klass = JERRY_TYPEDARRAY_UINT32;
5155+
jerry_value_t typedarray = jerry_create_typedarray (expected_klass, 25);
5156+
5157+
jerry_typedarray_class_t klass = jerry_get_typedarray_type (typedarray);
5158+
5159+
// klass is now JERRY_TYPEDARRAY_UINT32
5160+
5161+
jerry_release_value (typedarray);
5162+
}
5163+
```
5164+
5165+
**See also**
5166+
5167+
- [jerry_create_typedarray](#jerry_create_typedarray)
5168+
5169+
5170+
## jerry_get_typedarray_length
5171+
5172+
**Summary**
5173+
5174+
Get the element count of the TypedArray as specified during creation.
5175+
5176+
This is not the same as the byteLength property of a TypedArray object.
5177+
5178+
**Prototype**
5179+
5180+
```c
5181+
jerry_length_t
5182+
jerry_get_typedarray_length (jerry_value_t value);
5183+
```
5184+
5185+
- `value` - TypedArray object to query
5186+
- return
5187+
- length (element count) of the TypedArray object
5188+
- 0 if the object is not a TypedArray
5189+
5190+
**Example**
5191+
5192+
```c
5193+
{
5194+
jerry_value_t array = jerry_create_typedarray (JERRY_TYPEDARRAY_INT32, 21);
5195+
5196+
jerry_length_t element_count = jerry_get_typedarray_length (array);
5197+
5198+
// element_count is now 21.
5199+
5200+
jerry_release_value (array);
5201+
}
5202+
```
5203+
5204+
**See also**
5205+
5206+
- [jerry_create_typedarray](#jerry_create_typedarray)
5207+
5208+
5209+
## jerry_get_typedarray_buffer
5210+
5211+
**Summary**
5212+
5213+
Get the ArrayBuffer object used by a TypedArray object.
5214+
Additionally returns the byteLength and byteOffset properties
5215+
of the TypedArray object.
5216+
5217+
For the returned ArrayBuffer the [jerry_release_value](#jerry_release_value)
5218+
must be called.
5219+
5220+
**Prototype**
5221+
5222+
```c
5223+
jerry_value_t jerry_get_typedarray_buffer (jerry_value_t value,
5224+
jerry_length_t *byteOffset,
5225+
jerry_length_t *byteLength);
5226+
```
5227+
5228+
- `value` - TypedArray to get the ArrayBuffer from
5229+
- `byteOffset` - start offset of the ArrayBuffer for the TypedArray
5230+
- `byteLength` - number of bytes used from the ArrayBuffer for the TypedArray
5231+
- return
5232+
- TypedArray object's underlying ArrayBuffer object
5233+
- TypeError if the `value` is not a TypedArray object
5234+
5235+
**Example**
5236+
5237+
```c
5238+
{
5239+
jerry_value_t array = jerry_create_typedarray (JERRY_TYPEDARRAY_INT16, 11);
5240+
5241+
jerry_length_t byteLength = 0;
5242+
jerry_length_t byteOffset = 0;
5243+
jerry_value_t buffer = jerry_get_typedarray_buffer (array, &byteOffset, &byteLength);
5244+
5245+
// buffer is an ArrayBuffer object and ArrayBuffer operations can be performed on it
5246+
// byteLength is 11 * 2 (2 as the TypedArray stores Int16 that is 2 byte elements)
5247+
// byteOffset is 0
5248+
5249+
jerry_release_value (buffer);
5250+
jerry_release_value (array);
5251+
}
5252+
```
5253+
5254+
**See also**
5255+
5256+
- [jerry_create_typedarray](#jerry_create_typedarray)

0 commit comments

Comments
 (0)