add constructors for mini table extensions

PiperOrigin-RevId: 512261931
pull/13171/head
Eric Salo 2 years ago committed by Copybara-Service
parent 1b6beaa53d
commit 19c4e62875
  1. 15
      upb/mini_table/decode.c
  2. 31
      upb/mini_table/decode.h

@ -992,6 +992,21 @@ const char* _upb_MiniTableExtension_Init(const char* data, size_t len,
extendee, sub);
}
upb_MiniTableExtension* _upb_MiniTableExtension_Build(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_MiniTableSub sub, upb_MiniTablePlatform platform, upb_Arena* arena,
upb_Status* status) {
upb_MiniTableExtension* ext =
upb_Arena_Malloc(arena, sizeof(upb_MiniTableExtension));
if (UPB_UNLIKELY(!ext)) return NULL;
const char* ptr = _upb_MiniTableExtension_Init(data, len, ext, extendee, sub,
platform, status);
if (UPB_UNLIKELY(!ptr)) return NULL;
return ext;
}
upb_MiniTable* _upb_MiniTable_Build(const char* data, size_t len,
upb_MiniTablePlatform platform,
upb_Arena* arena, upb_Status* status) {

@ -80,7 +80,7 @@ UPB_API bool upb_MiniTable_SetSubEnum(upb_MiniTable* table,
const upb_MiniTableEnum* sub);
// Initializes a MiniTableExtension buffer that has already been allocated.
// This is needed (for example) by upb_FileDef, which allocates all of the
// This is needed by upb_FileDef and upb_MessageDef, which allocate all of the
// extensions together in a single contiguous array.
const char* _upb_MiniTableExtension_Init(const char* data, size_t len,
upb_MiniTableExtension* ext,
@ -96,6 +96,35 @@ UPB_API_INLINE const char* upb_MiniTableExtension_Init(
kUpb_MiniTablePlatform_Native, status);
}
UPB_API upb_MiniTableExtension* _upb_MiniTableExtension_Build(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_MiniTableSub sub, upb_MiniTablePlatform platform, upb_Arena* arena,
upb_Status* status);
UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_Build(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_Arena* arena, upb_Status* status) {
upb_MiniTableSub sub = {.submsg = NULL};
return _upb_MiniTableExtension_Build(
data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
}
UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_BuildMessage(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_MiniTable* submsg, upb_Arena* arena, upb_Status* status) {
upb_MiniTableSub sub = {.submsg = submsg};
return _upb_MiniTableExtension_Build(
data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
}
UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_BuildEnum(
const char* data, size_t len, const upb_MiniTable* extendee,
upb_MiniTableEnum* subenum, upb_Arena* arena, upb_Status* status) {
upb_MiniTableSub sub = {.subenum = subenum};
return _upb_MiniTableExtension_Build(
data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
}
UPB_API upb_MiniTableEnum* upb_MiniTableEnum_Build(const char* data, size_t len,
upb_Arena* arena,
upb_Status* status);

Loading…
Cancel
Save