• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_MESSAGE_ACCESSORS_H_
9 #define UPB_MESSAGE_ACCESSORS_H_
10 
11 #include <stdint.h>
12 
13 #include "upb/base/string_view.h"
14 #include "upb/mem/arena.h"
15 #include "upb/message/array.h"
16 #include "upb/message/internal/accessors.h"
17 #include "upb/message/map.h"
18 #include "upb/message/message.h"
19 #include "upb/message/tagged_ptr.h"
20 #include "upb/message/value.h"
21 #include "upb/mini_table/extension.h"
22 #include "upb/mini_table/field.h"
23 #include "upb/mini_table/message.h"
24 
25 // Must be last.
26 #include "upb/port/def.inc"
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
32 // Functions ending in BaseField() take a (upb_MiniTableField*) argument
33 // and work only on non-extension fields.
34 //
35 // Functions ending in Extension() take a (upb_MiniTableExtension*) argument
36 // and work only on extensions.
37 
38 UPB_API_INLINE void upb_Message_Clear(upb_Message* msg, const upb_MiniTable* m);
39 
40 UPB_API_INLINE void upb_Message_ClearBaseField(upb_Message* msg,
41                                                const upb_MiniTableField* f);
42 
43 UPB_API_INLINE void upb_Message_ClearExtension(upb_Message* msg,
44                                                const upb_MiniTableExtension* e);
45 
46 UPB_API_INLINE void upb_Message_ClearOneof(upb_Message* msg,
47                                            const upb_MiniTable* m,
48                                            const upb_MiniTableField* f);
49 
50 UPB_API_INLINE bool upb_Message_HasBaseField(const upb_Message* msg,
51                                              const upb_MiniTableField* f);
52 
53 UPB_API_INLINE bool upb_Message_HasExtension(const upb_Message* msg,
54                                              const upb_MiniTableExtension* e);
55 
56 UPB_API_INLINE upb_MessageValue
57 upb_Message_GetField(const upb_Message* msg, const upb_MiniTableField* f,
58                      upb_MessageValue default_val);
59 
60 UPB_API_INLINE upb_TaggedMessagePtr upb_Message_GetTaggedMessagePtr(
61     const upb_Message* msg, const upb_MiniTableField* field,
62     upb_Message* default_val);
63 
64 UPB_API_INLINE const upb_Array* upb_Message_GetArray(
65     const upb_Message* msg, const upb_MiniTableField* f);
66 
67 UPB_API_INLINE bool upb_Message_GetBool(const upb_Message* msg,
68                                         const upb_MiniTableField* f,
69                                         bool default_val);
70 
71 UPB_API_INLINE double upb_Message_GetDouble(const upb_Message* msg,
72                                             const upb_MiniTableField* field,
73                                             double default_val);
74 
75 UPB_API_INLINE float upb_Message_GetFloat(const upb_Message* msg,
76                                           const upb_MiniTableField* f,
77                                           float default_val);
78 
79 UPB_API_INLINE int32_t upb_Message_GetInt32(const upb_Message* msg,
80                                             const upb_MiniTableField* f,
81                                             int32_t default_val);
82 
83 UPB_API_INLINE int64_t upb_Message_GetInt64(const upb_Message* msg,
84                                             const upb_MiniTableField* f,
85                                             int64_t default_val);
86 
87 UPB_API_INLINE const upb_Map* upb_Message_GetMap(const upb_Message* msg,
88                                                  const upb_MiniTableField* f);
89 
90 UPB_API_INLINE const upb_Message* upb_Message_GetMessage(
91     const upb_Message* msg, const upb_MiniTableField* f);
92 
93 UPB_API_INLINE upb_Array* upb_Message_GetMutableArray(
94     upb_Message* msg, const upb_MiniTableField* f);
95 
96 UPB_API_INLINE upb_Map* upb_Message_GetMutableMap(upb_Message* msg,
97                                                   const upb_MiniTableField* f);
98 
99 UPB_API_INLINE upb_Message* upb_Message_GetMutableMessage(
100     upb_Message* msg, const upb_MiniTableField* f);
101 
102 UPB_API_INLINE upb_Array* upb_Message_GetOrCreateMutableArray(
103     upb_Message* msg, const upb_MiniTableField* f, upb_Arena* arena);
104 
105 UPB_API_INLINE upb_Map* upb_Message_GetOrCreateMutableMap(
106     upb_Message* msg, const upb_MiniTable* map_entry_mini_table,
107     const upb_MiniTableField* f, upb_Arena* arena);
108 
109 UPB_API_INLINE upb_Message* upb_Message_GetOrCreateMutableMessage(
110     upb_Message* msg, const upb_MiniTable* mini_table,
111     const upb_MiniTableField* f, upb_Arena* arena);
112 
113 UPB_API_INLINE upb_StringView
114 upb_Message_GetString(const upb_Message* msg, const upb_MiniTableField* field,
115                       upb_StringView default_val);
116 
117 UPB_API_INLINE uint32_t upb_Message_GetUInt32(const upb_Message* msg,
118                                               const upb_MiniTableField* f,
119                                               uint32_t default_val);
120 
121 UPB_API_INLINE uint64_t upb_Message_GetUInt64(const upb_Message* msg,
122                                               const upb_MiniTableField* f,
123                                               uint64_t default_val);
124 
125 UPB_API_INLINE void upb_Message_SetClosedEnum(
126     upb_Message* msg, const upb_MiniTable* msg_mini_table,
127     const upb_MiniTableField* f, int32_t value);
128 
129 // BaseField Setters ///////////////////////////////////////////////////////////
130 
131 UPB_API_INLINE void upb_Message_SetBaseField(upb_Message* msg,
132                                              const upb_MiniTableField* f,
133                                              const void* val);
134 
135 UPB_API_INLINE void upb_Message_SetBaseFieldBool(struct upb_Message* msg,
136                                                  const upb_MiniTableField* f,
137                                                  bool value);
138 
139 UPB_API_INLINE void upb_Message_SetBaseFieldDouble(struct upb_Message* msg,
140                                                    const upb_MiniTableField* f,
141                                                    double value);
142 
143 UPB_API_INLINE void upb_Message_SetBaseFieldFloat(struct upb_Message* msg,
144                                                   const upb_MiniTableField* f,
145                                                   float value);
146 
147 UPB_API_INLINE void upb_Message_SetBaseFieldInt32(struct upb_Message* msg,
148                                                   const upb_MiniTableField* f,
149                                                   int32_t value);
150 
151 UPB_API_INLINE void upb_Message_SetBaseFieldInt64(struct upb_Message* msg,
152                                                   const upb_MiniTableField* f,
153                                                   int64_t value);
154 
155 UPB_API_INLINE void upb_Message_SetBaseFieldMessage(struct upb_Message* msg,
156                                                     const upb_MiniTableField* f,
157                                                     upb_Message* value);
158 
159 UPB_API_INLINE void upb_Message_SetBaseFieldString(struct upb_Message* msg,
160                                                    const upb_MiniTableField* f,
161                                                    upb_StringView value);
162 
163 UPB_API_INLINE void upb_Message_SetBaseFieldUInt32(struct upb_Message* msg,
164                                                    const upb_MiniTableField* f,
165                                                    uint32_t value);
166 
167 UPB_API_INLINE void upb_Message_SetBaseFieldUInt64(struct upb_Message* msg,
168                                                    const upb_MiniTableField* f,
169                                                    uint64_t value);
170 
171 // Extension Setters ///////////////////////////////////////////////////////////
172 
173 UPB_API_INLINE bool upb_Message_SetExtension(upb_Message* msg,
174                                              const upb_MiniTableExtension* e,
175                                              const void* value, upb_Arena* a);
176 
177 UPB_API_INLINE bool upb_Message_SetExtensionBool(
178     struct upb_Message* msg, const upb_MiniTableExtension* e, bool value,
179     upb_Arena* a);
180 
181 UPB_API_INLINE bool upb_Message_SetExtensionDouble(
182     struct upb_Message* msg, const upb_MiniTableExtension* e, double value,
183     upb_Arena* a);
184 
185 UPB_API_INLINE bool upb_Message_SetExtensionFloat(
186     struct upb_Message* msg, const upb_MiniTableExtension* e, float value,
187     upb_Arena* a);
188 
189 UPB_API_INLINE bool upb_Message_SetExtensionInt32(
190     struct upb_Message* msg, const upb_MiniTableExtension* e, int32_t value,
191     upb_Arena* a);
192 
193 UPB_API_INLINE bool upb_Message_SetExtensionInt64(
194     struct upb_Message* msg, const upb_MiniTableExtension* e, int64_t value,
195     upb_Arena* a);
196 
197 UPB_API_INLINE bool upb_Message_SetExtensionString(
198     struct upb_Message* msg, const upb_MiniTableExtension* e,
199     upb_StringView value, upb_Arena* a);
200 
201 UPB_API_INLINE bool upb_Message_SetExtensionUInt32(
202     struct upb_Message* msg, const upb_MiniTableExtension* e, uint32_t value,
203     upb_Arena* a);
204 
205 UPB_API_INLINE bool upb_Message_SetExtensionUInt64(
206     struct upb_Message* msg, const upb_MiniTableExtension* e, uint64_t value,
207     upb_Arena* a);
208 
209 // Universal Setters ///////////////////////////////////////////////////////////
210 
211 UPB_API_INLINE bool upb_Message_SetBool(upb_Message* msg,
212                                         const upb_MiniTableField* f, bool value,
213                                         upb_Arena* a);
214 
215 UPB_API_INLINE bool upb_Message_SetDouble(upb_Message* msg,
216                                           const upb_MiniTableField* f,
217                                           double value, upb_Arena* a);
218 
219 UPB_API_INLINE bool upb_Message_SetFloat(upb_Message* msg,
220                                          const upb_MiniTableField* f,
221                                          float value, upb_Arena* a);
222 
223 UPB_API_INLINE bool upb_Message_SetInt32(upb_Message* msg,
224                                          const upb_MiniTableField* f,
225                                          int32_t value, upb_Arena* a);
226 
227 UPB_API_INLINE bool upb_Message_SetInt64(upb_Message* msg,
228                                          const upb_MiniTableField* f,
229                                          int64_t value, upb_Arena* a);
230 
231 // Unlike the other similarly-named setters, this function can only be
232 // called on base fields. Prefer upb_Message_SetBaseFieldMessage().
233 UPB_API_INLINE void upb_Message_SetMessage(upb_Message* msg,
234                                            const upb_MiniTableField* f,
235                                            upb_Message* value);
236 
237 UPB_API_INLINE bool upb_Message_SetString(upb_Message* msg,
238                                           const upb_MiniTableField* f,
239                                           upb_StringView value, upb_Arena* a);
240 
241 UPB_API_INLINE bool upb_Message_SetUInt32(upb_Message* msg,
242                                           const upb_MiniTableField* f,
243                                           uint32_t value, upb_Arena* a);
244 
245 UPB_API_INLINE bool upb_Message_SetUInt64(upb_Message* msg,
246                                           const upb_MiniTableField* f,
247                                           uint64_t value, upb_Arena* a);
248 
249 ////////////////////////////////////////////////////////////////////////////////
250 
251 UPB_API_INLINE void* upb_Message_ResizeArrayUninitialized(
252     upb_Message* msg, const upb_MiniTableField* f, size_t size,
253     upb_Arena* arena);
254 
255 UPB_API_INLINE uint32_t upb_Message_WhichOneofFieldNumber(
256     const upb_Message* message, const upb_MiniTableField* oneof_field);
257 
258 // For a field `f` which is in a oneof, return the field of that
259 // oneof that is actually set (or NULL if none).
260 UPB_API_INLINE const upb_MiniTableField* upb_Message_WhichOneof(
261     const upb_Message* msg, const upb_MiniTable* m,
262     const upb_MiniTableField* f);
263 
264 // Updates a map entry given an entry message.
265 bool upb_Message_SetMapEntry(upb_Map* map, const upb_MiniTable* mini_table,
266                              const upb_MiniTableField* field,
267                              upb_Message* map_entry_message, upb_Arena* arena);
268 
269 #ifdef __cplusplus
270 } /* extern "C" */
271 #endif
272 
273 #include "upb/port/undef.inc"
274 
275 #endif  // UPB_MESSAGE_ACCESSORS_H_
276