Skip to content

Commit

Permalink
upb: tag upb_Array.size as UPB_ONLYBITS()
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 592035282
  • Loading branch information
ericsalo authored and copybara-github committed Dec 19, 2023
1 parent ba57a4e commit a4a98bd
Show file tree
Hide file tree
Showing 10 changed files with 421 additions and 321 deletions.
29 changes: 15 additions & 14 deletions upb/message/array.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,30 +28,30 @@ const void* upb_Array_DataPtr(const upb_Array* arr) {

void* upb_Array_MutableDataPtr(upb_Array* arr) { return _upb_array_ptr(arr); }

size_t upb_Array_Size(const upb_Array* arr) { return arr->size; }
size_t upb_Array_Size(const upb_Array* arr) { return arr->UPB_PRIVATE(size); }

upb_MessageValue upb_Array_Get(const upb_Array* arr, size_t i) {
upb_MessageValue ret;
const char* data = _upb_array_constptr(arr);
const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
UPB_ASSERT(i < arr->size);
UPB_ASSERT(i < arr->UPB_PRIVATE(size));
memcpy(&ret, data + (i << lg2), 1 << lg2);
return ret;
}

void upb_Array_Set(upb_Array* arr, size_t i, upb_MessageValue val) {
char* data = _upb_array_ptr(arr);
const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
UPB_ASSERT(i < arr->size);
UPB_ASSERT(i < arr->UPB_PRIVATE(size));
memcpy(data + (i << lg2), &val, 1 << lg2);
}

bool upb_Array_Append(upb_Array* arr, upb_MessageValue val, upb_Arena* arena) {
UPB_ASSERT(arena);
if (!_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
if (!_upb_Array_ResizeUninitialized(arr, arr->UPB_PRIVATE(size) + 1, arena)) {
return false;
}
upb_Array_Set(arr, arr->size - 1, val);
upb_Array_Set(arr, arr->UPB_PRIVATE(size) - 1, val);
return true;
}

Expand All @@ -65,10 +65,11 @@ void upb_Array_Move(upb_Array* arr, size_t dst_idx, size_t src_idx,
bool upb_Array_Insert(upb_Array* arr, size_t i, size_t count,
upb_Arena* arena) {
UPB_ASSERT(arena);
UPB_ASSERT(i <= arr->size);
UPB_ASSERT(count + arr->size >= count);
const size_t oldsize = arr->size;
if (!_upb_Array_ResizeUninitialized(arr, arr->size + count, arena)) {
UPB_ASSERT(i <= arr->UPB_PRIVATE(size));
UPB_ASSERT(count + arr->UPB_PRIVATE(size) >= count);
const size_t oldsize = arr->UPB_PRIVATE(size);
if (!_upb_Array_ResizeUninitialized(arr, arr->UPB_PRIVATE(size) + count,
arena)) {
return false;
}
upb_Array_Move(arr, i + count, i, oldsize - i);
Expand All @@ -82,17 +83,17 @@ bool upb_Array_Insert(upb_Array* arr, size_t i, size_t count,
void upb_Array_Delete(upb_Array* arr, size_t i, size_t count) {
const size_t end = i + count;
UPB_ASSERT(i <= end);
UPB_ASSERT(end <= arr->size);
upb_Array_Move(arr, i, end, arr->size - end);
arr->size -= count;
UPB_ASSERT(end <= arr->UPB_PRIVATE(size));
upb_Array_Move(arr, i, end, arr->UPB_PRIVATE(size) - end);
arr->UPB_PRIVATE(size) -= count;
}

bool upb_Array_Resize(upb_Array* arr, size_t size, upb_Arena* arena) {
const size_t oldsize = arr->size;
const size_t oldsize = arr->UPB_PRIVATE(size);
if (UPB_UNLIKELY(!_upb_Array_ResizeUninitialized(arr, size, arena))) {
return false;
}
const size_t newsize = arr->size;
const size_t newsize = arr->UPB_PRIVATE(size);
if (newsize > oldsize) {
const int lg2 = UPB_PRIVATE(_upb_Array_ElemSizeLg2)(arr);
char* data = _upb_array_ptr(arr);
Expand Down
2 changes: 1 addition & 1 deletion upb/message/copy.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ static upb_Map* upb_Message_Map_DeepClone(const upb_Map* map,

upb_Array* upb_Array_DeepClone(const upb_Array* array, upb_CType value_type,
const upb_MiniTable* sub, upb_Arena* arena) {
size_t size = array->size;
size_t size = array->UPB_PRIVATE(size);
upb_Array* cloned_array =
UPB_PRIVATE(_upb_Array_New)(arena, size, upb_CType_SizeLg2(value_type));
if (!cloned_array) {
Expand Down
11 changes: 6 additions & 5 deletions upb/message/internal/array.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ struct upb_Array {
// Bit #2 contains the frozen/immutable flag (currently unimplemented).
uintptr_t data;

size_t size; // The number of elements in the array.
size_t UPB_ONLYBITS(size); // The number of elements in the array.
size_t UPB_PRIVATE(capacity); // Allocated storage. Measured in elements.
};

Expand Down Expand Up @@ -73,7 +73,7 @@ UPB_INLINE upb_Array* UPB_PRIVATE(_upb_Array_New)(upb_Arena* arena,
if (!array) return NULL;
UPB_PRIVATE(_upb_Array_SetTaggedPtr)
(array, UPB_PTR_AT(array, array_size, void), elem_size_lg2);
array->size = 0;
array->UPB_ONLYBITS(size) = 0;
array->UPB_PRIVATE(capacity) = init_capacity;
return array;
}
Expand All @@ -92,9 +92,10 @@ UPB_INLINE bool UPB_PRIVATE(_upb_Array_Reserve)(upb_Array* array, size_t size,
// Resize without initializing new elements.
UPB_INLINE bool _upb_Array_ResizeUninitialized(upb_Array* array, size_t size,
upb_Arena* arena) {
UPB_ASSERT(size <= array->size || arena); // Allow NULL arena when shrinking.
UPB_ASSERT(size <= array->UPB_ONLYBITS(size) ||
arena); // Allow NULL arena when shrinking.
if (!UPB_PRIVATE(_upb_Array_Reserve)(array, size, arena)) return false;
array->size = size;
array->UPB_ONLYBITS(size) = size;
return true;
}

Expand All @@ -104,7 +105,7 @@ UPB_INLINE bool _upb_Array_ResizeUninitialized(upb_Array* array, size_t size,
UPB_INLINE void UPB_PRIVATE(_upb_Array_Set)(upb_Array* array, size_t i,
const void* data,
size_t elem_size) {
UPB_ASSERT(i < array->size);
UPB_ASSERT(i < array->UPB_ONLYBITS(size));
UPB_ASSERT(elem_size == 1U << UPB_PRIVATE(_upb_Array_ElemSizeLg2)(array));
char* arr_data = (char*)_upb_array_ptr(array);
memcpy(arr_data + (i * elem_size), data, elem_size);
Expand Down
2 changes: 1 addition & 1 deletion upb/message/promote.c
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ upb_DecodeStatus upb_Array_PromoteMessages(upb_Array* arr,
int decode_options,
upb_Arena* arena) {
void** data = _upb_array_ptr(arr);
size_t size = arr->size;
size_t size = arr->UPB_PRIVATE(size);
for (size_t i = 0; i < size; i++) {
upb_TaggedMessagePtr tagged;
memcpy(&tagged, &data[i], sizeof(tagged));
Expand Down
Loading

0 comments on commit a4a98bd

Please sign in to comment.