File indexing completed on 2026-09-16 09:28:56
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
0009 #define UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
0010
0011 #include <stddef.h>
0012 #include <stdint.h>
0013
0014 #include "upb/base/descriptor_constants.h"
0015 #include "upb/mini_table/internal/field.h"
0016 #include "upb/mini_table/internal/sub.h"
0017
0018
0019 #include "upb/port/def.inc"
0020
0021 struct upb_MiniTableExtension {
0022
0023 struct upb_MiniTableField UPB_PRIVATE(field);
0024
0025 const struct upb_MiniTable* UPB_PRIVATE(extendee);
0026 union upb_MiniTableSub UPB_PRIVATE(sub);
0027 };
0028
0029 #ifdef __cplusplus
0030 extern "C" {
0031 #endif
0032
0033 UPB_API_INLINE upb_CType
0034 upb_MiniTableExtension_CType(const struct upb_MiniTableExtension* e) {
0035 return upb_MiniTableField_CType(&e->UPB_PRIVATE(field));
0036 }
0037
0038 UPB_API_INLINE uint32_t
0039 upb_MiniTableExtension_Number(const struct upb_MiniTableExtension* e) {
0040 return e->UPB_PRIVATE(field).UPB_ONLYBITS(number);
0041 }
0042
0043 UPB_API_INLINE const struct upb_MiniTable* upb_MiniTableExtension_Extendee(
0044 const struct upb_MiniTableExtension* e) {
0045 return e->UPB_PRIVATE(extendee);
0046 }
0047
0048 UPB_API_INLINE const struct upb_MiniTable* upb_MiniTableExtension_GetSubMessage(
0049 const struct upb_MiniTableExtension* e) {
0050 if (upb_MiniTableExtension_CType(e) != kUpb_CType_Message) {
0051 return NULL;
0052 }
0053 return upb_MiniTableSub_Message(e->UPB_PRIVATE(sub));
0054 }
0055
0056 UPB_API_INLINE const struct upb_MiniTableEnum*
0057 upb_MiniTableExtension_GetSubEnum(const struct upb_MiniTableExtension* e) {
0058 if (upb_MiniTableExtension_CType(e) != kUpb_CType_Enum) {
0059 return NULL;
0060 }
0061 return upb_MiniTableSub_Enum(e->UPB_PRIVATE(sub));
0062 }
0063
0064 UPB_API_INLINE bool upb_MiniTableExtension_SetSubMessage(
0065 struct upb_MiniTableExtension* e, const struct upb_MiniTable* m) {
0066 if (e->UPB_PRIVATE(field).UPB_PRIVATE(descriptortype) !=
0067 kUpb_FieldType_Message) {
0068 return false;
0069 }
0070 e->UPB_PRIVATE(sub).UPB_PRIVATE(submsg) = m;
0071 return true;
0072 }
0073
0074 UPB_API_INLINE bool upb_MiniTableExtension_SetSubEnum(
0075 struct upb_MiniTableExtension* e, const struct upb_MiniTableEnum* en) {
0076 if (e->UPB_PRIVATE(field).UPB_PRIVATE(descriptortype) !=
0077 kUpb_FieldType_Enum) {
0078 return false;
0079 }
0080 e->UPB_PRIVATE(sub).UPB_PRIVATE(subenum) = en;
0081 return true;
0082 }
0083
0084 UPB_INLINE upb_FieldRep UPB_PRIVATE(_upb_MiniTableExtension_GetRep)(
0085 const struct upb_MiniTableExtension* e) {
0086 return UPB_PRIVATE(_upb_MiniTableField_GetRep)(&e->UPB_PRIVATE(field));
0087 }
0088
0089 #ifdef __cplusplus
0090 }
0091 #endif
0092
0093 #include "upb/port/undef.inc"
0094
0095 #endif