MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1#ifndef BUFFER_H
2#define BUFFER_H
3
4#include <stdint.h>
5#include <stddef.h>
6#include "types.h"
7
8typedef struct {
9 uint8_t *data;
10 size_t length;
11 size_t capacity;
12 int ref_count;
13 int is_shared;
14 int is_detached;
15} ArrayBufferData;
16
17typedef enum {
18 TYPED_ARRAY_INT8,
19 TYPED_ARRAY_UINT8,
20 TYPED_ARRAY_UINT8_CLAMPED,
21 TYPED_ARRAY_INT16,
22 TYPED_ARRAY_UINT16,
23 TYPED_ARRAY_INT32,
24 TYPED_ARRAY_UINT32,
25 TYPED_ARRAY_FLOAT16,
26 TYPED_ARRAY_FLOAT32,
27 TYPED_ARRAY_FLOAT64,
28 TYPED_ARRAY_BIGINT64,
29 TYPED_ARRAY_BIGUINT64
30} TypedArrayType;
31
32typedef struct {
33 ArrayBufferData *buffer;
34 TypedArrayType type;
35 size_t byte_offset;
36 size_t byte_length;
37 size_t length;
38} TypedArrayData;
39
40typedef struct {
41 ArrayBufferData *buffer;
42 size_t byte_offset;
43 size_t byte_length;
44} DataViewData;
45
46ant_value_t buffer_library(ant_t *js);
47
48void init_buffer_module(void);
49void cleanup_buffer_module(void);
50void free_array_buffer_data(ArrayBufferData *data);
51
52size_t buffer_get_external_memory(void);
53
54ant_value_t create_arraybuffer_obj(ant_t *js, ArrayBufferData *buffer);
55const char *buffer_typedarray_type_name(TypedArrayType type);
56
57ArrayBufferData *create_array_buffer_data(size_t length);
58ArrayBufferData *buffer_get_arraybuffer_data(ant_value_t value);
59TypedArrayData *buffer_get_typedarray_data(ant_value_t value);
60DataViewData *buffer_get_dataview_data(ant_value_t value);
61
62ant_value_t create_typed_array(
63 ant_t *js, TypedArrayType type, ArrayBufferData *buffer,
64 size_t byte_offset, size_t length, const char *type_name
65);
66
67ant_value_t create_typed_array_with_buffer(
68 ant_t *js, TypedArrayType type, ArrayBufferData *buffer,
69 size_t byte_offset, size_t length,
70 const char *type_name, ant_value_t arraybuffer_obj
71);
72
73ant_value_t create_dataview_with_buffer(
74 ant_t *js, ArrayBufferData *buffer,
75 size_t byte_offset, size_t byte_length,
76 ant_value_t arraybuffer_obj
77);
78
79bool buffer_is_dataview(ant_value_t obj);
80bool buffer_is_binary_source(ant_value_t value);
81bool buffer_source_get_bytes(ant_t *js, ant_value_t value, const uint8_t **out, size_t *len);
82
83#endif