8#ifndef UPB_MESSAGE_INTERNAL_ARRAY_H_
9#define UPB_MESSAGE_INTERNAL_ARRAY_H_
19#define _UPB_ARRAY_MASK_IMM 0x4
20#define _UPB_ARRAY_MASK_LG2 0x3
21#define _UPB_ARRAY_MASK_ALL (_UPB_ARRAY_MASK_IMM | _UPB_ARRAY_MASK_LG2)
53 void* data,
size_t lg2) {
56 const size_t bits = lg2 - (lg2 != 0);
57 array->UPB_ONLYBITS(data) = (uintptr_t)data | bits;
63 const size_t lg2 = bits + (bits != 0);
77 upb_Arena* arena,
size_t init_capacity,
int elem_size_lg2,
81 const size_t array_size =
83 const size_t bytes = array_size + (init_capacity << elem_size_lg2);
87 if (!array)
return NULL;
89 (array,
UPB_PTR_AT(array, array_size,
void), elem_size_lg2);
90 array->UPB_ONLYBITS(size) = 0;
91 array->UPB_PRIVATE(capacity) = init_capacity;
103 upb_Arena* arena,
size_t init_capacity,
int elem_size_lg2) {
105 elem_size_lg2,
false);
114 size_t capacity,
int elem_size_lg2,
116 size_t old_bytes = array->UPB_PRIVATE(capacity) << elem_size_lg2;
117 size_t new_bytes = capacity << elem_size_lg2;
120 array->UPB_PRIVATE(capacity) = capacity;
127 if (array->UPB_PRIVATE(capacity) < size)
139 array->UPB_ONLYBITS(size) = size;
153 memcpy(arr_data + (i * elem_size), data, elem_size);
170#undef _UPB_ARRAY_MASK_IMM
171#undef _UPB_ARRAY_MASK_LG2
172#undef _UPB_ARRAY_MASK_ALL
#define UPB_API_INLINE
Definition def.inc:163
#define UPB_ALIGN_UP(size, align)
Definition def.inc:205
#define UPB_PTR_AT(msg, ofs, type)
Definition def.inc:118
#define UPB_ASSUME(expr)
Definition def.inc:319
#define UPB_ASSERT(expr)
Definition def.inc:329
#define UPB_PRIVATE(x)
Definition def.inc:393
#define UPB_FORCEINLINE
Definition def.inc:288
#define UPB_MALLOC_ALIGN
Definition def.inc:184
#define UPB_INLINE
Definition def.inc:144
#define UPB_ONLYBITS(x)
Definition def.inc:398
UPB_INLINE size_t UPB_PRIVATE _upb_ArenaHas(const struct upb_Arena *a)
Definition arena.h:46
UPB_API_INLINE bool upb_Arena_TryExtend(struct upb_Arena *a, void *ptr, size_t oldsize, size_t size)
Definition arena.h:106
UPB_INLINE size_t UPB_PRIVATE _upb_Arena_AllocSpan(size_t size)
Definition arena.h:50
UPB_API_INLINE void * upb_Arena_Malloc(struct upb_Arena *a, size_t size)
Definition arena.h:65
uintptr_t UPB_ONLYBITS(data)
size_t UPB_ONLYBITS(size)
size_t UPB_PRIVATE(capacity)
UPB_API_INLINE size_t upb_Array_Capacity(const upb_Array *arr)
UPB_API_INLINE bool upb_Array_IsFrozen(const upb_Array *arr)
UPB_API_INLINE const void * upb_Array_DataPtr(const upb_Array *arr)
UPB_API_INLINE void * upb_Array_MutableDataPtr(upb_Array *arr)
Definition array.h:72
UPB_API_INLINE size_t upb_Array_Size(const upb_Array *arr)
UPB_API_INLINE bool upb_Array_Reserve(struct upb_Array *array, size_t size, upb_Arena *arena)
Definition array.h:124
UPB_INLINE struct upb_Array *UPB_PRIVATE _upb_Array_New(upb_Arena *arena, size_t init_capacity, int elem_size_lg2)
Definition array.h:95
#define _UPB_ARRAY_MASK_IMM
Definition array.h:19
#define _UPB_ARRAY_MASK_LG2
Definition array.h:20
UPB_INLINE void UPB_PRIVATE _upb_Array_SetTaggedPtr(struct upb_Array *array, void *data, size_t lg2)
Definition array.h:52
UPB_INLINE struct upb_Array *UPB_PRIVATE _upb_Array_TryFastNew(upb_Arena *arena, size_t init_capacity, int elem_size_lg2)
Definition array.h:102
bool UPB_PRIVATE _upb_Array_Realloc(struct upb_Array *array, size_t min_size, upb_Arena *arena)
UPB_INLINE size_t UPB_PRIVATE _upb_Array_ElemSizeLg2(const struct upb_Array *array)
Definition array.h:61
UPB_INLINE bool UPB_PRIVATE _upb_Array_ResizeUninitialized(struct upb_Array *array, size_t size, upb_Arena *arena)
Definition array.h:133
UPB_INLINE void UPB_PRIVATE _upb_Array_ShallowFreeze(struct upb_Array *arr)
Definition array.h:44
UPB_INLINE void UPB_PRIVATE _upb_Array_Set(struct upb_Array *array, size_t i, const void *data, size_t elem_size)
Definition array.h:146
UPB_FORCEINLINE bool UPB_PRIVATE _upb_Array_TryFastRealloc(struct upb_Array *array, size_t capacity, int elem_size_lg2, upb_Arena *arena)
Definition array.h:113
UPB_INLINE struct upb_Array *UPB_PRIVATE _upb_Array_NewMaybeAllowSlow(upb_Arena *arena, size_t init_capacity, int elem_size_lg2, bool allow_slow)
Definition array.h:76
#define _UPB_ARRAY_MASK_ALL
Definition array.h:21