12#ifndef DUK_HBUFFER_H_INCLUDED
13#define DUK_HBUFFER_H_INCLUDED
23#define DUK_HBUFFER_FLAG_DYNAMIC DUK_HEAPHDR_USER_FLAG(0)
24#define DUK_HBUFFER_FLAG_EXTERNAL DUK_HEAPHDR_USER_FLAG(1)
26#define DUK_HBUFFER_HAS_DYNAMIC(x) DUK_HEAPHDR_CHECK_FLAG_BITS(&(x)->hdr, DUK_HBUFFER_FLAG_DYNAMIC)
27#define DUK_HBUFFER_HAS_EXTERNAL(x) DUK_HEAPHDR_CHECK_FLAG_BITS(&(x)->hdr, DUK_HBUFFER_FLAG_EXTERNAL)
29#define DUK_HBUFFER_SET_DYNAMIC(x) DUK_HEAPHDR_SET_FLAG_BITS(&(x)->hdr, DUK_HBUFFER_FLAG_DYNAMIC)
30#define DUK_HBUFFER_SET_EXTERNAL(x) DUK_HEAPHDR_SET_FLAG_BITS(&(x)->hdr, DUK_HBUFFER_FLAG_EXTERNAL)
32#define DUK_HBUFFER_CLEAR_DYNAMIC(x) DUK_HEAPHDR_CLEAR_FLAG_BITS(&(x)->hdr, DUK_HBUFFER_FLAG_DYNAMIC)
33#define DUK_HBUFFER_CLEAR_EXTERNAL(x) DUK_HEAPHDR_CLEAR_FLAG_BITS(&(x)->hdr, DUK_HBUFFER_FLAG_EXTERNAL)
45#if defined(DUK_USE_BUFLEN16)
46#define DUK_HBUFFER_MAX_BYTELEN (0x0000ffffUL)
51#define DUK_HBUFFER_MAX_BYTELEN (0x7ffffffeUL)
61#if defined(DUK_USE_BUFLEN16)
63#define DUK_HBUFFER_GET_SIZE(x) ((x)->hdr.h_flags >> 16)
64#define DUK_HBUFFER_SET_SIZE(x,v) do { \
67 DUK_ASSERT(duk__v <= 0xffffUL); \
68 (x)->hdr.h_flags = ((x)->hdr.h_flags & 0x0000ffffUL) | (((duk_uint32_t) duk__v) << 16); \
70#define DUK_HBUFFER_ADD_SIZE(x,dv) do { \
71 (x)->hdr.h_flags += ((dv) << 16); \
73#define DUK_HBUFFER_SUB_SIZE(x,dv) do { \
74 (x)->hdr.h_flags -= ((dv) << 16); \
77#define DUK_HBUFFER_GET_SIZE(x) (((duk_hbuffer *) (x))->size)
78#define DUK_HBUFFER_SET_SIZE(x,v) do { \
79 ((duk_hbuffer *) (x))->size = (v); \
81#define DUK_HBUFFER_ADD_SIZE(x,dv) do { \
84#define DUK_HBUFFER_SUB_SIZE(x,dv) do { \
89#define DUK_HBUFFER_FIXED_GET_SIZE(x) DUK_HBUFFER_GET_SIZE((duk_hbuffer *) (x))
90#define DUK_HBUFFER_FIXED_SET_SIZE(x,v) DUK_HBUFFER_SET_SIZE((duk_hbuffer *) (x))
92#define DUK_HBUFFER_DYNAMIC_GET_SIZE(x) DUK_HBUFFER_GET_SIZE((duk_hbuffer *) (x))
93#define DUK_HBUFFER_DYNAMIC_SET_SIZE(x,v) DUK_HBUFFER_SET_SIZE((duk_hbuffer *) (x), (v))
94#define DUK_HBUFFER_DYNAMIC_ADD_SIZE(x,dv) DUK_HBUFFER_ADD_SIZE((duk_hbuffer *) (x), (dv))
95#define DUK_HBUFFER_DYNAMIC_SUB_SIZE(x,dv) DUK_HBUFFER_SUB_SIZE((duk_hbuffer *) (x), (dv))
97#define DUK_HBUFFER_EXTERNAL_GET_SIZE(x) DUK_HBUFFER_GET_SIZE((duk_hbuffer *) (x))
98#define DUK_HBUFFER_EXTERNAL_SET_SIZE(x,v) DUK_HBUFFER_SET_SIZE((duk_hbuffer *) (x), (v))
100#define DUK_HBUFFER_FIXED_GET_DATA_PTR(heap,x) ((duk_uint8_t *) (((duk_hbuffer_fixed *) (x)) + 1))
102#if defined(DUK_USE_HEAPPTR16)
103#define DUK_HBUFFER_DYNAMIC_GET_DATA_PTR(heap,x) \
104 ((void *) DUK_USE_HEAPPTR_DEC16((heap)->heap_udata, ((duk_heaphdr *) (x))->h_extra16))
105#define DUK_HBUFFER_DYNAMIC_SET_DATA_PTR(heap,x,v) do { \
106 ((duk_heaphdr *) (x))->h_extra16 = DUK_USE_HEAPPTR_ENC16((heap)->heap_udata, (void *) (v)); \
108#define DUK_HBUFFER_DYNAMIC_SET_DATA_PTR_NULL(heap,x) do { \
109 ((duk_heaphdr *) (x))->h_extra16 = 0; \
112#define DUK_HBUFFER_DYNAMIC_GET_DATA_PTR(heap,x) ((x)->curr_alloc)
113#define DUK_HBUFFER_DYNAMIC_SET_DATA_PTR(heap,x,v) do { \
114 (x)->curr_alloc = (void *) (v); \
116#define DUK_HBUFFER_DYNAMIC_SET_DATA_PTR_NULL(heap,x) do { \
117 (x)->curr_alloc = (void *) NULL; \
124#if defined(DUK_USE_HEAPPTR16)
125#define DUK_HBUFFER_EXTERNAL_GET_DATA_PTR(heap,x) \
126 ((void *) (x)->curr_alloc)
127#define DUK_HBUFFER_EXTERNAL_SET_DATA_PTR(heap,x,v) do { \
128 (x)->curr_alloc = (void *) (v); \
130#define DUK_HBUFFER_EXTERNAL_SET_DATA_PTR_NULL(heap,x) do { \
131 (x)->curr_alloc = (void *) NULL; \
134#define DUK_HBUFFER_EXTERNAL_GET_DATA_PTR(heap,x) \
135 ((void *) (x)->curr_alloc)
136#define DUK_HBUFFER_EXTERNAL_SET_DATA_PTR(heap,x,v) do { \
137 (x)->curr_alloc = (void *) (v); \
139#define DUK_HBUFFER_EXTERNAL_SET_DATA_PTR_NULL(heap,x) do { \
140 (x)->curr_alloc = (void *) NULL; \
147#if defined(DUK_USE_HEAPPTR16)
148#define DUK_HBUFFER_GET_DATA_PTR(heap,x) ( \
149 DUK_HBUFFER_HAS_DYNAMIC((x)) ? \
151 DUK_HBUFFER_HAS_EXTERNAL((x)) ? \
152 DUK_HBUFFER_EXTERNAL_GET_DATA_PTR((heap), (duk_hbuffer_external *) (x)) : \
153 DUK_HBUFFER_DYNAMIC_GET_DATA_PTR((heap), (duk_hbuffer_dynamic *) (x)) \
155 DUK_HBUFFER_FIXED_GET_DATA_PTR((heap), (duk_hbuffer_fixed *) (x)) \
161#define DUK_HBUFFER_GET_DATA_PTR(heap,x) ( \
162 DUK_HBUFFER_HAS_DYNAMIC((x)) ? \
163 DUK_HBUFFER_DYNAMIC_GET_DATA_PTR((heap), (duk_hbuffer_dynamic *) (x)) : \
164 DUK_HBUFFER_FIXED_GET_DATA_PTR((heap), (duk_hbuffer_fixed *) (x)) \
181#if defined(DUK_USE_BUFLEN16)
216#if (DUK_USE_ALIGN_BY == 8) && defined(DUK_USE_PACK_MSVC_PRAGMA)
229#if defined(DUK_USE_BUFLEN16)
235#if (DUK_USE_ALIGN_BY == 4)
236 duk_uint32_t dummy_for_align4;
237#elif (DUK_USE_ALIGN_BY == 8)
239#elif (DUK_USE_ALIGN_BY == 1)
242#error invalid DUK_USE_ALIGN_BY
259#if (DUK_USE_ALIGN_BY == 8) && defined(DUK_USE_PACK_GCC_ATTR)
260__attribute__ ((aligned (8)))
261#elif (DUK_USE_ALIGN_BY == 8) && defined(DUK_USE_PACK_CLANG_ATTR)
262__attribute__ ((aligned (8)))
265#if (DUK_USE_ALIGN_BY == 8) && defined(DUK_USE_PACK_MSVC_PRAGMA)
276#if defined(DUK_USE_BUFLEN16)
282#if defined(DUK_USE_HEAPPTR16)
305#if defined(DUK_USE_BUFLEN16)
unsigned int duk_small_uint_t
#define DUK_INTERNAL_DECL
DUK_INTERNAL_DECL duk_hbuffer * duk_hbuffer_alloc(duk_heap *heap, duk_size_t size, duk_small_uint_t flags, void **out_bufdata)
DUK_INTERNAL_DECL void duk_hbuffer_reset(duk_hthread *thr, duk_hbuffer_dynamic *buf)
DUK_INTERNAL_DECL void * duk_hbuffer_get_dynalloc_ptr(duk_heap *heap, void *ud)
DUK_INTERNAL_DECL void duk_hbuffer_resize(duk_hthread *thr, duk_hbuffer_dynamic *buf, duk_size_t new_size)
duk_double_t dummy_for_align8
struct duk_hbuffer_fixed::@19::@20 s
union duk_hbuffer_fixed::@19 u