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_SUB_H_ 9 #define UPB_MINI_TABLE_INTERNAL_SUB_H_ 10 11 // Must be last. 12 #include "upb/port/def.inc" 13 14 typedef union { 15 const struct upb_MiniTable* const* UPB_PRIVATE(submsg); 16 const struct upb_MiniTableEnum* UPB_PRIVATE(subenum); 17 } upb_MiniTableSubInternal; 18 19 union upb_MiniTableSub { 20 const struct upb_MiniTable* UPB_PRIVATE(submsg); 21 const struct upb_MiniTableEnum* UPB_PRIVATE(subenum); 22 }; 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 upb_MiniTableSub_FromEnum(const struct upb_MiniTableEnum * subenum)28UPB_API_INLINE union upb_MiniTableSub upb_MiniTableSub_FromEnum( 29 const struct upb_MiniTableEnum* subenum) { 30 union upb_MiniTableSub out; 31 out.UPB_PRIVATE(subenum) = subenum; 32 return out; 33 } 34 upb_MiniTableSub_FromMessage(const struct upb_MiniTable * submsg)35UPB_API_INLINE union upb_MiniTableSub upb_MiniTableSub_FromMessage( 36 const struct upb_MiniTable* submsg) { 37 union upb_MiniTableSub out; 38 out.UPB_PRIVATE(submsg) = submsg; 39 return out; 40 } 41 upb_MiniTableSub_Enum(const union upb_MiniTableSub sub)42UPB_API_INLINE const struct upb_MiniTableEnum* upb_MiniTableSub_Enum( 43 const union upb_MiniTableSub sub) { 44 return sub.UPB_PRIVATE(subenum); 45 } 46 upb_MiniTableSub_Message(const union upb_MiniTableSub sub)47UPB_API_INLINE const struct upb_MiniTable* upb_MiniTableSub_Message( 48 const union upb_MiniTableSub sub) { 49 return sub.UPB_PRIVATE(submsg); 50 } 51 52 #ifdef __cplusplus 53 } /* extern "C" */ 54 #endif 55 56 #include "upb/port/undef.inc" 57 58 #endif /* UPB_MINI_TABLE_INTERNAL_SUB_H_ */ 59