1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2023 Google LLC. All rights reserved. 3 // 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file or at 6 // https://developers.google.com/open-source/licenses/bsd 7 8 #ifndef UPB_MINI_TABLE_INTERNAL_EXTENSION_H_ 9 #define UPB_MINI_TABLE_INTERNAL_EXTENSION_H_ 10 11 #include <stdint.h> 12 13 #include "upb/mini_table/internal/field.h" 14 #include "upb/mini_table/internal/sub.h" 15 16 // Must be last. 17 #include "upb/port/def.inc" 18 19 struct upb_MiniTableExtension { 20 // Do not move this field. We need to be able to alias pointers. 21 struct upb_MiniTableField UPB_PRIVATE(field); 22 23 const struct upb_MiniTable* UPB_PRIVATE(extendee); 24 union upb_MiniTableSub UPB_PRIVATE(sub); // NULL unless submsg or proto2 enum 25 }; 26 27 #ifdef __cplusplus 28 extern "C" { 29 #endif 30 UPB_PRIVATE(_upb_MiniTableExtension_CType)31UPB_INLINE upb_CType UPB_PRIVATE(_upb_MiniTableExtension_CType)( 32 const struct upb_MiniTableExtension* e) { 33 return UPB_PRIVATE(_upb_MiniTableField_CType)(&e->UPB_PRIVATE(field)); 34 } 35 UPB_PRIVATE(_upb_MiniTableExtension_Number)36UPB_INLINE uint32_t UPB_PRIVATE(_upb_MiniTableExtension_Number)( 37 const struct upb_MiniTableExtension* e) { 38 return e->UPB_PRIVATE(field).UPB_ONLYBITS(number); 39 } 40 UPB_PRIVATE(_upb_MiniTableExtension_GetSubMessage)41UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE( 42 _upb_MiniTableExtension_GetSubMessage)( 43 const struct upb_MiniTableExtension* e) { 44 return UPB_PRIVATE(_upb_MiniTableSub_Message)(e->UPB_PRIVATE(sub)); 45 } 46 UPB_PRIVATE(_upb_MiniTableExtension_SetSubMessage)47UPB_INLINE void UPB_PRIVATE(_upb_MiniTableExtension_SetSubMessage)( 48 struct upb_MiniTableExtension* e, const struct upb_MiniTable* m) { 49 e->UPB_PRIVATE(sub).UPB_PRIVATE(submsg) = m; 50 } 51 52 #ifdef __cplusplus 53 } /* extern "C" */ 54 #endif 55 56 #include "upb/port/undef.inc" 57 58 #endif /* UPB_MINI_TABLE_INTERNAL_EXTENSION_H_ */ 59