Skip to content

Commit ffea5b8

Browse files
committed
Introduce the Array Buffer C API
Add C API to work with Array Buffers. The following methods are added: - jerry_value_is_arraybuffer - jerry_create_arraybuffer - jerry_arraybuffer_write - jerry_arraybuffer_read - jerry_get_arraybuffer_byte_length JerryScript-DCO-1.0-Signed-off-by: Peter Gal [email protected]
1 parent c3c0bb8 commit ffea5b8

File tree

4 files changed

+699
-0
lines changed

4 files changed

+699
-0
lines changed

docs/02.API-REFERENCE.md

Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -993,6 +993,44 @@ jerry_value_is_array (const jerry_value_t value)
993993

994994
- [jerry_release_value](#jerry_release_value)
995995

996+
## jerry_value_is_arraybuffer
997+
998+
**Summary**
999+
1000+
Returns whether the given `jerry_value_t` is an ArrayBuffer object.
1001+
1002+
**Prototype**
1003+
1004+
```c
1005+
bool
1006+
jerry_value_is_arraybuffer (const jerry_value_t value)
1007+
```
1008+
1009+
- `value` - api value
1010+
- return value
1011+
- true, if the given `jerry_value_t` is an ArrayBuffer object.
1012+
- false, otherwise
1013+
1014+
**Example**
1015+
1016+
```c
1017+
{
1018+
jerry_value_t value;
1019+
... // create or acquire value
1020+
1021+
if (jerry_value_is_arraybuffer (value))
1022+
{
1023+
...
1024+
}
1025+
1026+
jerry_release_value (value);
1027+
}
1028+
```
1029+
1030+
**See also**
1031+
1032+
- [jerry_create_arraybuffer](#jerry_create_arraybuffer)
1033+
9961034

9971035
## jerry_value_is_boolean
9981036

@@ -2391,6 +2429,42 @@ jerry_create_array (uint32_t size);
23912429
- [jerry_get_property_by_index](#jerry_get_property_by_index)
23922430

23932431

2432+
## jerry_create_arraybuffer
2433+
2434+
**Summary**
2435+
2436+
Create a jerry_value_t representing an ArrayBuffer object.
2437+
2438+
**Prototype**
2439+
2440+
```c
2441+
jerry_value_t
2442+
jerry_create_arraybuffer (jerry_length_t size);
2443+
```
2444+
2445+
- `size` - size of the ArrayBuffer to create
2446+
- return value - the new ArrayBuffer as a `jerry_value_t`
2447+
2448+
**Example**
2449+
2450+
```c
2451+
{
2452+
jerry_value_t buffer_value = jerry_create_arraybuffer (15);
2453+
2454+
... // use the ArrayBuffer
2455+
2456+
jerry_release_value (buffer_value);
2457+
}
2458+
```
2459+
2460+
**See also**
2461+
2462+
- [jerry_arraybuffer_read](#jerry_arraybuffer_read)
2463+
- [jerry_arraybuffer_write](#jerry_arraybuffer_write)
2464+
- [jerry_value_is_arraybuffer](#jerry_value_is_arraybuffer)
2465+
- [jerry_release_value](#jerry_release_value)
2466+
2467+
23942468
## jerry_create_boolean
23952469

23962470
**Summary**
@@ -4679,3 +4753,171 @@ main (void)
46794753
- [jerry_parse](#jerry_parse)
46804754
- [jerry_run](#jerry_run)
46814755
- [jerry_vm_exec_stop_callback_t](#jerry_vm_exec_stop_callback_t)
4756+
4757+
4758+
# ArrayBuffer and TypedArray functions
4759+
4760+
## jerry_get_arraybuffer_byte_length
4761+
4762+
**Summary**
4763+
4764+
Get the byte length property of the ArrayBuffer. This is the
4765+
same value which was passed to the ArrayBuffer constructor call.
4766+
4767+
**Prototype**
4768+
4769+
```c
4770+
jerry_length_t
4771+
jerry_get_arraybuffer_byte_length (const jerry_value_t value);
4772+
```
4773+
4774+
- `value` - ArrayBuffer object
4775+
- return value
4776+
- size of the ArrayBuffer in bytes
4777+
- 0 if the `value` parameter is not an ArrayBuffer
4778+
4779+
**Example**
4780+
4781+
```c
4782+
{
4783+
jerry_value_t buffer = jerry_create_arraybuffer (15);
4784+
jerry_length_t length = jerry_get_arraybuffer_byte_length (buffer);
4785+
// length should be 15
4786+
4787+
jerry_release_value (buffer);
4788+
}
4789+
```
4790+
4791+
**See also**
4792+
- [jerry_create_arraybuffer](#jerry_create_arraybuffer)
4793+
4794+
4795+
## jerry_arraybuffer_read
4796+
4797+
**Summary**
4798+
4799+
Copy the portion of the ArrayBuffer into a user provided buffer.
4800+
The start offset of the read operation can be specified.
4801+
4802+
The number bytes to be read can be specified via the `buf_size`
4803+
parameter. It is not possible to read more than the length of
4804+
the ArrayBuffer.
4805+
4806+
Function returns the number of bytes read from the ArrayBuffer
4807+
(and written to the buffer parameter). This value is
4808+
calculated in the following way: `min(array buffer length - offset, buf_size)`.
4809+
4810+
**Prototype**
4811+
4812+
```c
4813+
jerry_length_t
4814+
jerry_arraybuffer_read (const jerry_value_t value,
4815+
jerry_length_t offset,
4816+
uint8_t *buf_p,
4817+
jerry_length_t buf_size);
4818+
```
4819+
4820+
- `value` - ArrayBuffer to read from
4821+
- `offset` - start offset of the read operation
4822+
- `buf_p` - buffer to read the data to
4823+
- `buf_size` - maximum number of bytes to read into the buffer
4824+
- return value
4825+
- number of bytes written into the buffer (read from the ArrayBuffer)
4826+
- 0 if the `value` is not an ArrayBuffer object
4827+
- 0 if the `buf_size` is zero or there is nothing to read
4828+
4829+
**Example**
4830+
4831+
```c
4832+
{
4833+
uint8_t data[20];
4834+
jerry_value_t buffer;
4835+
// ... create the ArrayBuffer or acuiqre it from somewhere.
4836+
4837+
jerry_value_t bytes_read;
4838+
4839+
// read 10 bytes from the start of the ArrayBuffer.
4840+
bytes_read = jerry_arraybuffer_read (buffer, 0, data, 10);
4841+
// read the next 10 bytes
4842+
bytes_read += jerry_arraybuffer_read (buffer, bytes_read, data + bytes_read, 10);
4843+
4844+
// process the data variable
4845+
4846+
jerry_release_value (buffer);
4847+
}
4848+
```
4849+
4850+
**See also**
4851+
4852+
- [jerry_create_arraybuffer](#jerry_create_arraybuffer)
4853+
- [jerry_arraybuffer_write](#jerry_arraybuffer_write)
4854+
- [jerry_get_arraybuffer_byte_length](#jerry_get_arraybuffer_byte_length)
4855+
4856+
4857+
## jerry_arraybuffer_write
4858+
4859+
**Summary**
4860+
4861+
Copy the contents of a buffer into the ArrayBuffer.
4862+
The start offset of the write operation can be specified.
4863+
4864+
The number bytes to be written can be specified via the `buf_size`
4865+
parameter. It is not possible to write more than the length of
4866+
the ArrayBuffer.
4867+
4868+
Function returns the number of bytes written into the ArrayBuffer
4869+
(and read from the buffer parameter). This value is
4870+
calculated in the following way: `min(array buffer length - offset, buf_size)`.
4871+
4872+
**Prototype**
4873+
4874+
```c
4875+
jerry_length_t
4876+
jerry_arraybuffer_write (const jerry_value_t value,
4877+
jerry_length_t offset,
4878+
const uint8_t *buf_p,
4879+
jerry_length_t buf_size);
4880+
```
4881+
4882+
- `value` - ArrayBuffer to write to
4883+
- `offset` - start offset of the write operation
4884+
- `buf_p` - buffer to read the data from
4885+
- `buf_size` - maximum number of bytes to write into the ArrayBuffer
4886+
- return value
4887+
- number of bytes written into the ArrayBuffer (read from the buffer parameter)
4888+
- 0 if the `value` is not an ArrayBuffer object
4889+
- 0 if the `buf_size` is zero or there is nothing to write
4890+
4891+
**Example**
4892+
4893+
```c
4894+
{
4895+
uint8_t data[20];
4896+
4897+
// fill the data with values
4898+
for (int i = 0; i < 20; i++)
4899+
{
4900+
data[i] = (uint8_t) (i * 2);
4901+
}
4902+
4903+
jerry_value_t buffer;
4904+
// ... create the ArrayBuffer or acquire it from somewhere.
4905+
4906+
jerry_value_t bytes_written;
4907+
4908+
// write 10 bytes from to the start of the ArrayBuffer.
4909+
bytes_written = jerry_arraybuffer_write (buffer, 0, data, 10);
4910+
// read the next 10 bytes
4911+
bytes_written += jerry_arraybuffer_write (buffer, bytes_written, data + bytes_written, 10);
4912+
4913+
// use the ArrayBuffer
4914+
4915+
jerry_release_value (buffer);
4916+
}
4917+
```
4918+
4919+
**See also**
4920+
4921+
- [jerry_create_arraybuffer](#jerry_create_arraybuffer)
4922+
- [jerry_arraybuffer_write](#jerry_arraybuffer_write)
4923+
- [jerry_get_arraybuffer_byte_length](#jerry_get_arraybuffer_byte_length)

0 commit comments

Comments
 (0)