Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-16 09:28:56

0001 // Protocol Buffers - Google's data interchange format
0002 // Copyright 2023 Google LLC.  All rights reserved.
0003 //
0004 // Use of this source code is governed by a BSD-style
0005 // license that can be found in the LICENSE file or at
0006 // https://developers.google.com/open-source/licenses/bsd
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 // Must be last.
0019 #include "upb/port/def.inc"
0020 
0021 struct upb_MiniTableExtension {
0022   // Do not move this field. We need to be able to alias pointers.
0023   struct upb_MiniTableField UPB_PRIVATE(field);
0024 
0025   const struct upb_MiniTable* UPB_PRIVATE(extendee);
0026   union upb_MiniTableSub UPB_PRIVATE(sub);  // NULL unless submsg or proto2 enum
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 } /* extern "C" */
0091 #endif
0092 
0093 #include "upb/port/undef.inc"
0094 
0095 #endif /* UPB_MINI_TABLE_INTERNAL_EXTENSION_H_ */