5#ifndef DUK_HBUFFEROBJECT_H_INCLUDED
6#define DUK_HBUFFEROBJECT_H_INCLUDED
9#define DUK_HBUFFEROBJECT_ELEM_UINT8 0
10#define DUK_HBUFFEROBJECT_ELEM_UINT8CLAMPED 1
11#define DUK_HBUFFEROBJECT_ELEM_INT8 2
12#define DUK_HBUFFEROBJECT_ELEM_UINT16 3
13#define DUK_HBUFFEROBJECT_ELEM_INT16 4
14#define DUK_HBUFFEROBJECT_ELEM_UINT32 5
15#define DUK_HBUFFEROBJECT_ELEM_INT32 6
16#define DUK_HBUFFEROBJECT_ELEM_FLOAT32 7
17#define DUK_HBUFFEROBJECT_ELEM_FLOAT64 8
18#define DUK_HBUFFEROBJECT_ELEM_MAX 8
20#define DUK_ASSERT_HBUFFEROBJECT_VALID(h) do { \
21 DUK_ASSERT((h) != NULL); \
22 DUK_ASSERT((h)->shift <= 3); \
23 DUK_ASSERT((h)->elem_type <= DUK_HBUFFEROBJECT_ELEM_MAX); \
24 DUK_ASSERT(((h)->shift == 0 && (h)->elem_type == DUK_HBUFFEROBJECT_ELEM_UINT8) || \
25 ((h)->shift == 0 && (h)->elem_type == DUK_HBUFFEROBJECT_ELEM_UINT8CLAMPED) || \
26 ((h)->shift == 0 && (h)->elem_type == DUK_HBUFFEROBJECT_ELEM_INT8) || \
27 ((h)->shift == 1 && (h)->elem_type == DUK_HBUFFEROBJECT_ELEM_UINT16) || \
28 ((h)->shift == 1 && (h)->elem_type == DUK_HBUFFEROBJECT_ELEM_INT16) || \
29 ((h)->shift == 2 && (h)->elem_type == DUK_HBUFFEROBJECT_ELEM_UINT32) || \
30 ((h)->shift == 2 && (h)->elem_type == DUK_HBUFFEROBJECT_ELEM_INT32) || \
31 ((h)->shift == 2 && (h)->elem_type == DUK_HBUFFEROBJECT_ELEM_FLOAT32) || \
32 ((h)->shift == 3 && (h)->elem_type == DUK_HBUFFEROBJECT_ELEM_FLOAT64)); \
33 DUK_ASSERT((h)->is_view == 0 || (h)->is_view == 1); \
34 DUK_ASSERT(DUK_HOBJECT_IS_BUFFEROBJECT((duk_hobject *) (h))); \
35 if ((h)->buf == NULL) { \
36 DUK_ASSERT((h)->offset == 0); \
37 DUK_ASSERT((h)->length == 0); \
43 DUK_ASSERT((h)->offset + (h)->length >= (h)->offset); \
50#define DUK_HBUFFEROBJECT_GET_SLICE_BASE(heap,h) \
51 (DUK_ASSERT_EXPR((h) != NULL), DUK_ASSERT_EXPR((h)->buf != NULL), \
52 (((duk_uint8_t *) DUK_HBUFFER_GET_DATA_PTR((heap), (h)->buf)) + (h)->offset))
59#define DUK_HBUFFEROBJECT_FULL_SLICE(h) \
60 (DUK_ASSERT_EXPR((h) != NULL), DUK_ASSERT_EXPR((h)->buf != NULL), \
61 ((h)->offset == 0 && (h)->length == DUK_HBUFFER_GET_SIZE((h)->buf)))
66#define DUK_HBUFFEROBJECT_VALID_SLICE(h) \
67 (DUK_ASSERT_EXPR((h) != NULL), DUK_ASSERT_EXPR((h)->buf != NULL), \
68 ((h)->offset + (h)->length <= DUK_HBUFFER_GET_SIZE((h)->buf)))
77#define DUK_HBUFFEROBJECT_VALID_BYTEOFFSET_INCL(h,off) \
78 (DUK_ASSERT_EXPR((h) != NULL), DUK_ASSERT_EXPR((h)->buf != NULL), \
79 ((h)->offset + (off) < DUK_HBUFFER_GET_SIZE((h)->buf)))
81#define DUK_HBUFFEROBJECT_VALID_BYTEOFFSET_EXCL(h,off) \
82 (DUK_ASSERT_EXPR((h) != NULL), DUK_ASSERT_EXPR((h)->buf != NULL), \
83 ((h)->offset + (off) <= DUK_HBUFFER_GET_SIZE((h)->buf)))
91#define DUK_HBUFFEROBJECT_CLAMP_BYTELENGTH(h,len) \
92 (DUK_ASSERT_EXPR((h) != NULL), \
93 duk_hbufferobject_clamp_bytelength((h), (len)))
127#if defined(DUK_USE_BUFFEROBJECT_SUPPORT)
unsigned int duk_small_uint_t
#define DUK_INTERNAL_DECL
duk_uint_fast32_t duk_uint_t
DUK_INTERNAL_DECL duk_uint_t duk_hbufferobject_clamp_bytelength(duk_hbufferobject *h_bufobj, duk_uint_t len)
DUK_INTERNAL_DECL void duk_hbufferobject_validated_write(duk_context *ctx, duk_hbufferobject *h_bufobj, duk_uint8_t *p, duk_small_uint_t elem_size)
DUK_INTERNAL_DECL void duk_hbufferobject_push_validated_read(duk_context *ctx, duk_hbufferobject *h_bufobj, duk_uint8_t *p, duk_small_uint_t elem_size)