Go to the documentation of this file.
37 #include "upb/port_def.inc"
85 static const char kUpb_ToBase92[] = {
86 ' ',
'!',
'#',
'$',
'%',
'&',
'(',
')',
'*',
'+',
',',
'-',
'.',
'/',
87 '0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
':',
';',
'<',
'=',
88 '>',
'?',
'@',
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
89 'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
90 'Z',
'[',
']',
'^',
'_',
'`',
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
91 'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
92 'w',
'x',
'y',
'z',
'{',
'|',
'}',
'~',
96 return kUpb_ToBase92[
ch];
100 static const int8_t kUpb_FromBase92[] = {
101 0, 1, -1, 2, 3, 4, 5, -1, 6, 7, 8, 9, 10, 11, 12, 13,
102 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
103 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
104 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 58, 59, 60,
105 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
106 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
109 if (
' ' >
ch ||
ch >
'~')
return -1;
110 return kUpb_FromBase92[
ch -
' '];
115 static const unsigned kUnpackableTypes =
121 return (1 <<
type) & ~kUnpackableTypes;
140 ret->buf_start = buf_start;
147 if (
ptr == e->end)
return NULL;
160 if (!
ptr)
return NULL;
179 in->msg_mod = msg_mod;
180 in->last_field_num = 0;
181 in->oneof_state = kUpb_OneofState_NotStarted;
188 static const char kUpb_TypeToEncoded[] = {
210 if (field_num <= in->last_field_num)
return NULL;
211 if (
in->last_field_num + 1 != field_num) {
217 if (!
ptr)
return NULL;
219 in->last_field_num = field_num;
229 int encoded_type = kUpb_TypeToEncoded[
type];
237 bool default_is_packed =
239 if (field_is_packed != default_is_packed) {
245 if (!
ptr)
return NULL;
258 if (
in->oneof_state == kUpb_OneofState_NotStarted) {
264 in->oneof_state = kUpb_OneofState_StartedOneof;
271 if (
in->oneof_state == kUpb_OneofState_EmittedOneofField) {
274 if (!
ptr)
return NULL;
278 in->oneof_state = kUpb_OneofState_EmittedOneofField;
284 int n =
table->field_count;
285 for (
int i = 0;
i <
n;
i++) {
304 #define kUpb_LayoutItem_IndexSentinel ((uint16_t)-1)
365 const int bits_per_char =
371 val |=
bits << shift;
377 shift += bits_per_char;
383 switch (
field->descriptortype) {
408 field->submsg_index = sub_count ? (*sub_count)++ : 0;
423 static const char kUpb_EncodedToFieldRep[] = {
444 static const char kUpb_EncodedToType[] = {
491 d,
"Cannot flip packed on unpackable field %" PRIu32,
field->number);
503 d,
"Invalid modifier(s) for repeated field %" PRIu32,
field->number);
508 d,
"Field %" PRIu32
" cannot be both singular and required",
520 if (
d->vec.size ==
d->vec.capacity) {
521 size_t new_cap =
UPB_MAX(8,
d->vec.size * 2);
522 d->vec.data = realloc(
d->vec.data, new_cap *
sizeof(*
d->vec.data));
524 d->vec.capacity = new_cap;
526 d->vec.data[
d->vec.size++] = item;
548 static const uint8_t kRepToSize32[] = {
553 static const uint8_t kRepToSize64[] = {
566 static const uint8_t kRepToAlign32[] = {
571 static const uint8_t kRepToAlign64[] = {
579 : kRepToAlign64[
rep];
595 "Couldn't add field number %" PRIu32
596 " to oneof, no such field number.",
603 "Cannot add repeated, required, or singular field %" PRIu32
625 while (ptr < d->
end) {
644 const char*
ptr,
char first_ch,
658 *msg_modifiers = mod;
665 size_t subs_bytes =
sizeof(*
d->table->subs) * sub_count;
671 void*
fields,
size_t field_size,
676 bool need_dense_below =
d->table != NULL;
680 while (ptr < d->
end) {
686 field->number = ++last_field_number;
700 if (need_dense_below) {
701 d->table->dense_below =
d->table->field_count;
702 need_dense_below =
false;
708 last_field_number +=
skip;
713 if (need_dense_below) {
714 d->table->dense_below =
d->table->field_count;
726 d->table->field_count = 0;
727 d->table->fields =
d->fields;
729 &
d->table->field_count, &sub_count);
732 sizeof(*
d->fields) *
d->table->field_count);
733 d->table->fields =
d->fields;
748 const int idx_bits = (
sizeof(
a->field_index) * 8);
749 UPB_ASSERT(idx_bits + rep_bits + type_bits < 32);
750 #define UPB_COMBINE(rep, ty, idx) (((rep << type_bits) | ty) << idx_bits) | idx
753 assert(a_packed != b_packed);
755 return a_packed < b_packed ? -1 : 1;
760 int n =
d->table->field_count;
761 for (
int i = 0;
i <
n;
i++) {
771 qsort(
d->vec.data,
d->vec.size,
sizeof(*
d->vec.data),
779 return (
n +
d - 1) /
d;
783 int n =
ret->field_count;
787 for (
int i = 0;
i <
n;
i++) {
790 field->presence = ++last_hasbit;
795 ret->required_count = last_hasbit;
798 for (
int i = 0;
i <
n;
i++) {
801 field->presence = ++last_hasbit;
830 f->presence = ~item->offset;
840 switch (item->type) {
844 f->offset = item->offset;
850 f->offset = item->offset;
881 .capacity = *buf_size /
sizeof(*decoder.
vec.
data),
890 decoder.
table = NULL;
911 return decoder.
table;
917 if (!
ret)
return NULL;
920 ret->field_count = 0;
922 ret->dense_below = 0;
924 ret->required_count = 0;
930 bool value_is_proto3_enum,
942 if (!
subs)
return NULL;
955 fields[1].offset = field_size;
961 ret->field_count = 2;
963 ret->dense_below = 2;
965 ret->required_count = 0;
986 table->value_count = 0;
987 table->values = NULL;
998 if (val >= 64)
break;
1005 if (
bytes % 4 != 0) {
1034 ext->field.offset = 0;
@ kUpb_EncodedType_UInt32
char * upb_MtDataEncoder_StartMessage(upb_MtDataEncoder *e, char *ptr, uint64_t msg_mod)
@ kUpb_LayoutItemType_Field
static bool upb_MtDecoder_SortLayoutItems(upb_MtDecoder *d)
@ kUpb_FieldType_SFixed64
UPB_INLINE void upb_Arena_ShrinkLast(upb_Arena *a, void *ptr, size_t oldsize, size_t size)
@ kUpb_EncodedFieldModifier_IsClosedEnum
@ kUpb_EncodedValue_MaxSkip
static char * upb_MtDataEncoder_Put(upb_MtDataEncoder *e, char *ptr, char ch)
#define kUpb_MtDataEncoder_MinSize
static bool upb_MiniTable_HasSub(upb_MiniTable_Field *field, uint64_t msg_modifiers)
size_t upb_MtDecoder_Place(upb_MtDecoder *d, upb_FieldRep rep)
const upb_MiniTable_Enum * subenum
@ kUpb_LabelFlags_IsPacked
char * upb_MtDataEncoder_PutOneofField(upb_MtDataEncoder *e, char *ptr, uint32_t field_num)
@ kUpb_LayoutItemType_OneofCase
@ kUpb_FieldModifier_IsPacked
static void upb_MtDecoder_PushOneof(upb_MtDecoder *d, upb_LayoutItem item)
const upb_MiniTable_Field * upb_MiniTable_FindFieldByNumber(const upb_MiniTable *table, uint32_t number)
@ kUpb_EncodedType_SInt64
const struct upb_MiniTable * submsg
@ kUpb_MiniTablePlatform_64Bit
static UPB_NORETURN void upb_MtDecoder_ErrorFormat(upb_MtDecoder *d, const char *fmt,...)
@ kUpb_EncodedValue_MaxField
static void upb_MtDecoder_AllocateSubs(upb_MtDecoder *d, uint32_t sub_count)
#define UPB_ALIGN_UP(size, align)
static void upb_MtDecoder_AssignOffsets(upb_MtDecoder *d)
#define UPB_UNREACHABLE()
void upb_MiniTable_SetSubMessage(upb_MiniTable *table, upb_MiniTable_Field *field, const upb_MiniTable *sub)
@ kUpb_FieldType_SFixed32
upb_MiniTable * upb_MiniTable_BuildMapEntry(upb_FieldType key_type, upb_FieldType value_type, bool value_is_proto3_enum, upb_MiniTablePlatform platform, upb_Arena *arena)
char * upb_MtDataEncoder_PutField(upb_MtDataEncoder *e, char *ptr, upb_FieldType type, uint32_t field_num, uint64_t field_mod)
static upb_MtDataEncoderInternal * upb_MtDataEncoder_GetInternal(upb_MtDataEncoder *e, char *buf_start)
#define UPB_PRINTF(str, first_vararg)
@ kUpb_EncodedValue_MinModifier
static void upb_MiniTable_SetTypeAndSub(upb_MiniTable_Field *field, upb_FieldType type, uint32_t *sub_count, uint64_t msg_modifiers)
static const char * upb_MiniTable_DecodeBase92Varint(upb_MtDecoder *d, const char *ptr, char first_ch, uint8_t min, uint8_t max, uint32_t *out_val)
static const char * upb_MtDecoder_DecodeOneofs(upb_MtDecoder *d, const char *ptr)
@ kUpb_FieldModifier_IsRepeated
grpc_core::ScopedArenaPtr arena
@ kUpb_LabelFlags_IsExtension
size_t upb_MtDecoder_SizeOfRep(upb_FieldRep rep, upb_MiniTablePlatform platform)
@ kUpb_EncodedType_UInt64
bool upb_IsTypePackable(upb_FieldType type)
@ kUpb_ExtMode_NonExtendable
@ kUpb_EncodedValue_OneofSeparator
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
#define UPB_PTRADD(ptr, ofs)
void upb_Status_SetErrorMessage(upb_Status *status, const char *msg)
@ kUpb_ExtMode_IsMapEntry
upb_MiniTable_Field * fields
@ kUpb_EncodedFieldModifier_IsProto3Singular
@ kUpb_EncodedType_Double
@ kUpb_EncodedType_String
static void upb_MiniTable_SetField(upb_MtDecoder *d, uint8_t ch, upb_MiniTable_Field *field, uint64_t msg_modifiers, uint32_t *sub_count)
@ kUpb_EncodedType_Fixed64
@ kUpb_EncodedValue_MinOneofField
static void upb_MtDecoder_ParseMessage(upb_MtDecoder *d, const char *data, size_t len)
static void upb_MtDecoder_AssignHasbits(upb_MiniTable *ret)
#define UPB_SIZE(size32, size64)
UPB_INLINE void * upb_Arena_Malloc(upb_Arena *a, size_t size)
void upb_Status_VAppendErrorFormat(upb_Status *status, const char *fmt, va_list args)
@ kUpb_MessageModifier_DefaultIsPacked
@ kUpb_EncodedType_Fixed32
unsigned __int64 uint64_t
#define UPB_ALIGN_OF(type)
OPENSSL_EXPORT ASN1_BIT_STRING * bits
upb_MiniTablePlatform platform
char upb_FromBase92(uint8_t ch)
static char * upb_MtDataEncoder_PutBase92Varint(upb_MtDataEncoder *e, char *ptr, uint32_t val, int min, int max)
upb_MiniTable_Enum * upb_MiniTable_BuildEnum(const char *data, size_t len, upb_Arena *arena, upb_Status *status)
static void upb_MtDecoder_CheckOutOfMemory(upb_MtDecoder *d, const void *ptr)
static void upb_MtDecoder_PushItem(upb_MtDecoder *d, upb_LayoutItem item)
char * upb_MtDataEncoder_PutModifier(upb_MtDataEncoder *e, char *ptr, uint64_t mod)
_W64 unsigned int uintptr_t
static const char * upb_MtDecoder_ParseModifier(upb_MtDecoder *d, const char *ptr, char first_ch, upb_MiniTable_Field *last_field, uint64_t *msg_modifiers)
#define UPB_COMBINE(rep, ty, idx)
@ kUpb_EncodedFieldModifier_IsRequired
@ kUpb_LayoutItemType_OneofField
void qsort(void *a, size_t n, size_t es, int(*cmp)(const void *, const void *))
@ kUpb_OneofState_NotStarted
@ kUpb_FieldModifier_IsRequired
upb_MiniTable * upb_MiniTable_BuildMessageSet(upb_MiniTablePlatform platform, upb_Arena *arena)
int upb_MtDecoder_CompareFields(const void *_a, const void *_b)
static const char * upb_MtDecoder_DecodeOneofField(upb_MtDecoder *d, const char *ptr, char first_ch, upb_LayoutItem *item)
@ kUpb_EncodedType_SInt32
@ kUpb_MiniTablePlatform_32Bit
GTEST_API_ const char * fmt
@ kUpb_EncodedType_Message
upb_MiniTable * upb_MiniTable_BuildWithBuf(const char *data, size_t len, upb_MiniTablePlatform platform, upb_Arena *arena, void **buf, size_t *buf_size, upb_Status *status)
const FieldDescriptor * field
CONSTEXPR_F fields align(second_tag, fields f) noexcept
@ kUpb_FieldModifier_IsProto3Singular
#define kUpb_LayoutItem_IndexSentinel
UniquePtr< SSL_SESSION > ret
@ kUpb_EncodedType_RepeatedBase
static void upb_MtDecoder_ModifyField(upb_MtDecoder *d, uint32_t message_modifiers, uint32_t field_modifiers, upb_MiniTable_Field *field)
UPB_INLINE int _upb_Log2Ceiling(int x)
static bool upb_MtDecoder_FieldIsPackable(upb_MiniTable_Field *field)
@ kUpb_ExtMode_IsMessageSet
char upb_ToBase92(int8_t ch)
char * upb_MtDataEncoder_StartOneof(upb_MtDataEncoder *e, char *ptr)
upb_MiniTable * upb_MiniTable_Build(const char *data, size_t len, upb_MiniTablePlatform platform, upb_Arena *arena, upb_Status *status)
@ kUpb_FieldModifier_IsClosedEnum
@ kUpb_OneofState_EmittedOneofField
@ kUpb_EncodedValue_FieldSeparator
@ kUpb_EncodedValue_MinField
size_t upb_MtDecoder_AlignOfRep(upb_FieldRep rep, upb_MiniTablePlatform platform)
@ kUpb_EncodedType_SFixed32
void upb_MiniTable_SetSubEnum(upb_MiniTable *table, upb_MiniTable_Field *field, const upb_MiniTable_Enum *sub)
@ kUpb_EncodedType_SFixed64
@ kUpb_EncodedFieldModifier_FlipPacked
@ kUpb_OneofState_StartedOneof
@ kUpb_MessageModifier_ValidateUtf8
@ kUpb_FieldRep_StringView
static void upb_MtDecoder_Parse(upb_MtDecoder *d, const char *ptr, size_t len, void *fields, size_t field_size, uint16_t *field_count, uint32_t *sub_count)
@ kUpb_EncodedValue_MaxOneofField
@ kUpb_LayoutItemType_Max
bool upb_MiniTable_BuildExtension(const char *data, size_t len, upb_MiniTable_Extension *ext, upb_MiniTable_Sub sub, upb_Status *status)
if(p->owned &&p->wrapped !=NULL)
#define UPB_LONGJMP(buf, val)
@ kUpb_EncodedValue_MinSkip
static size_t upb_MiniTable_DivideRoundUp(size_t n, size_t d)
@ kUpb_EncodedValue_MaxModifier
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:00:40