xref: /aosp_15_r20/external/grpc-grpc/third_party/upb/upb/mini_table/internal/extension.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
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)31 UPB_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)36 UPB_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)41 UPB_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)47 UPB_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