@@ -1030,6 +1030,7 @@ jerry_value_is_arraybuffer (const jerry_value_t value)
10301030**See also**
10311031
10321032- [jerry_create_arraybuffer](#jerry_create_arraybuffer)
1033+ - [jerry_create_arraybuffer_external](#jerry_create_arraybuffer_external)
10331034
10341035
10351036## jerry_value_is_boolean
@@ -2465,6 +2466,56 @@ jerry_create_arraybuffer (jerry_length_t size);
24652466- [jerry_release_value](#jerry_release_value)
24662467
24672468
2469+ ## jerry_create_arraybuffer_external
2470+
2471+ **Summary**
2472+
2473+ Create a jerry_value_t representing an ArrayBuffer object with
2474+ user specified back-buffer.
2475+
2476+ User must pass a buffer pointer which is at least `size` big.
2477+ After the object is not needed the GC will call the `free_cb`
2478+ so the user can release the buffer which was provided.
2479+
2480+ **Prototype**
2481+
2482+ ```c
2483+ jerry_value_t
2484+ jerry_create_arraybuffer_external (const jerry_length_t size
2485+ uint8_t *buffer_p,
2486+ jerry_object_native_free_callback_t free_cb);
2487+ ```
2488+
2489+ - `size` - size of the buffer to use **in bytes** (should not be 0)
2490+ - `buffer_p` - the buffer used for the Array Buffer object (should not be a null pointer)
2491+ - `free_cb` - the callback function called when the object is released
2492+ - return value
2493+ - the new ArrayBuffer as a `jerry_value_t`
2494+ - if the `size` is zero or `buffer_p` is a null pointer will return RangeError
2495+
2496+ **Example**
2497+
2498+ ```c
2499+ {
2500+ uint8_t buffer_p[15];
2501+ jerry_value_t buffer_value = jerry_create_arraybuffer_external (15, buffer_p, NULL);
2502+
2503+ ... // use the array buffer
2504+
2505+ jerry_release_value (buffer_value);
2506+ }
2507+ ```
2508+
2509+ **See also**
2510+
2511+ - [jerry_get_arraybuffer_pointer](#jerry_get_arraybuffer_pointer)
2512+ - [jerry_arraybuffer_read](#jerry_arraybuffer_read)
2513+ - [jerry_arraybuffer_write](#jerry_arraybuffer_write)
2514+ - [jerry_value_is_arraybuffer](#jerry_value_is_arraybuffer)
2515+ - [jerry_release_value](#jerry_release_value)
2516+ - [jerry_object_native_free_callback_t](#jerry_object_native_free_callback_t)
2517+
2518+
24682519## jerry_create_boolean
24692520
24702521**Summary**
@@ -4921,3 +4972,61 @@ jerry_arraybuffer_write (const jerry_value_t value,
49214972- [jerry_create_arraybuffer](#jerry_create_arraybuffer)
49224973- [jerry_arraybuffer_write](#jerry_arraybuffer_write)
49234974- [jerry_get_arraybuffer_byte_length](#jerry_get_arraybuffer_byte_length)
4975+
4976+
4977+ ## jerry_get_arraybuffer_pointer
4978+
4979+ **Summary**
4980+
4981+ The function allows acces to the contents of the Array Buffer directly.
4982+ Only allowed for Array Buffers which were created with
4983+ [jerry_create_arraybuffer_external](#jerry_create_arraybuffer_external)
4984+ function calls. In any other case this function will return `NULL`.
4985+
4986+ After using the pointer the [jerry_release_value](#jerry_release_value)
4987+ function must be called.
4988+
4989+ WARNING! This operation is for expert use only! The programmer must
4990+ ensure that the returned memory area is used correctly. That is
4991+ there is no out of bounds reads or writes.
4992+
4993+ **Prototype**
4994+
4995+ ```c
4996+ uint8_t *
4997+ jerry_get_arraybuffer_pointer (const jerry_value_t value);
4998+ ```
4999+
5000+ - `value` - Array Buffer object.
5001+ - return value
5002+ - pointer to the Array Buffer's data area.
5003+ - NULL if the `value` is not an Array Buffer object with external memory.
5004+
5005+ **Example**
5006+
5007+ ```c
5008+ {
5009+ jerry_value_t buffer;
5010+
5011+ // acquire buffer somewhere which was created by a jerry_create_array_buffer_external call.
5012+
5013+ uint8_t *const data = jerry_get_arraybuffer_pointer (buffer);
5014+
5015+ for (int i = 0; i < 22; i++)
5016+ {
5017+ data[i] = (uint8_t) (i + 4);
5018+ }
5019+
5020+ // required after jerry_get_arraybuffer_pointer call.
5021+ jerry_release_value (buffer);
5022+
5023+ // use the Array Buffer
5024+
5025+ // release buffer as it is not needed after this point
5026+ jerry_release_value (buffer);
5027+ }
5028+ ```
5029+
5030+ **See also**
5031+
5032+ - [jerry_create_arraybuffer_external](#jerry_create_arraybuffer_external)
0 commit comments