WPILibC++ 2027.0.0-alpha-3
Loading...
Searching...
No Matches
accessors.h
Go to the documentation of this file.
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_INTERNAL_ACCESSORS_H_
9#define UPB_MESSAGE_INTERNAL_ACCESSORS_H_
10
11#include <stddef.h>
12#include <stdint.h>
13#include <string.h>
14
18#include "upb/mem/arena.h"
25#include "upb/message/value.h"
26#include "upb/mini_table/enum.h"
31
32// Must be last.
33#include "upb/port/def.inc"
34
35#if defined(__GNUC__) && !defined(__clang__)
36// GCC raises incorrect warnings in these functions. It thinks that we are
37// overrunning buffers, but we carefully write the functions in this file to
38// guarantee that this is impossible. GCC gets this wrong due it its failure
39// to perform constant propagation as we expect:
40// - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108217
41// - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108226
42//
43// Unfortunately this also indicates that GCC is not optimizing away the
44// switch() in cases where it should be, compromising the performance.
45#pragma GCC diagnostic push
46#pragma GCC diagnostic ignored "-Warray-bounds"
47#pragma GCC diagnostic ignored "-Wstringop-overflow"
48#if __GNUC__ >= 11
49#pragma GCC diagnostic ignored "-Wstringop-overread"
50#endif
51#endif
52
53#ifdef __cplusplus
54extern "C" {
55#endif
56
57// LINT.IfChange(presence_logic)
58
59// Hasbit access ///////////////////////////////////////////////////////////////
60
62 const struct upb_Message* msg, const upb_MiniTableField* f) {
63 const uint16_t offset = UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(f);
64 const char mask = UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(f);
65
66 return (*UPB_PTR_AT(msg, offset, const char) & mask) != 0;
67}
68
70 const struct upb_Message* msg, const upb_MiniTableField* f) {
71 const uint16_t offset = UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(f);
72 const char mask = UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(f);
73
74 (*UPB_PTR_AT(msg, offset, char)) |= mask;
75}
76
78 const struct upb_Message* msg, const upb_MiniTableField* f) {
79 const uint16_t offset = UPB_PRIVATE(_upb_MiniTableField_HasbitOffset)(f);
80 const char mask = UPB_PRIVATE(_upb_MiniTableField_HasbitMask)(f);
81
82 (*UPB_PTR_AT(msg, offset, char)) &= ~mask;
83}
84
85// Oneof case access ///////////////////////////////////////////////////////////
86
92
94 const struct upb_Message* msg, const upb_MiniTableField* f) {
95 const uint32_t* ptr =
97
98 return *ptr;
99}
100
107
108// Returns true if the given field is the current oneof case.
109// Does nothing if it is not the current oneof case.
111 struct upb_Message* msg, const upb_MiniTableField* f) {
112 uint32_t* ptr = UPB_PRIVATE(_upb_Message_OneofCasePtr)(msg, f);
113
114 if (*ptr != upb_MiniTableField_Number(f)) return false;
115 *ptr = 0;
116 return true;
117}
118
120 const struct upb_Message* message, const upb_MiniTableField* oneof_field) {
122 return UPB_PRIVATE(_upb_Message_GetOneofCase)(message, oneof_field);
123}
124
126 const struct upb_Message* msg, const upb_MiniTable* m,
127 const upb_MiniTableField* f) {
128 uint32_t field_number = upb_Message_WhichOneofFieldNumber(msg, f);
129 if (field_number == 0) {
130 // No field in the oneof is set.
131 return NULL;
132 }
133 return upb_MiniTable_FindFieldByNumber(m, field_number);
134}
135
136// LINT.ThenChange(GoogleInternalName2)
137
138// Returns false if the message is missing any of its required fields.
140 const struct upb_Message* msg, const upb_MiniTable* m) {
141 uint64_t bits;
142 memcpy(&bits, msg + 1, sizeof(bits));
143 bits = upb_BigEndian64(bits);
144 return (UPB_PRIVATE(_upb_MiniTable_RequiredMask)(m) & ~bits) == 0;
145}
146
148 struct upb_Message* msg, const upb_MiniTableField* f) {
149 return (char*)msg + f->UPB_ONLYBITS(offset);
150}
151
153 const struct upb_Message* msg, const upb_MiniTableField* f) {
154 return (const char*)msg + f->UPB_ONLYBITS(offset);
155}
156
165
167 const upb_MiniTableField* f, void* to, const void* from) {
170 memcpy(to, from, 1);
171 return;
173 memcpy(to, from, 4);
174 return;
176 memcpy(to, from, 8);
177 return;
179 memcpy(to, from, sizeof(upb_StringView));
180 return;
181 }
182 }
184}
185
187 const upb_MiniTableField* f, const void* a, const void* b) {
190 return memcmp(a, b, 1) == 0;
192 return memcmp(a, b, 4) == 0;
194 return memcmp(a, b, 8) == 0;
196 const upb_StringView sa = *(const upb_StringView*)a;
197 const upb_StringView sb = *(const upb_StringView*)b;
198 return upb_StringView_IsEqual(sa, sb);
199 }
200 }
202}
203
205 const upb_MiniTableField* f, void* val) {
206 const char zero[16] = {0};
208}
209
211 const upb_MiniTableField* f, const void* val) {
212 const char zero[16] = {0};
213 return UPB_PRIVATE(_upb_MiniTableField_DataEquals)(f, val, zero);
214}
215
216// Here we define universal getter/setter functions for message fields.
217// These look very branchy and inefficient, but as long as the MiniTableField
218// values are known at compile time, all the branches are optimized away and
219// we are left with ideal code. This can happen either through through
220// literals or UPB_ASSUME():
221//
222// // Via struct literals.
223// bool FooMessage_set_bool_field(const upb_Message* msg, bool val) {
224// const upb_MiniTableField field = {1, 0, 0, /* etc... */};
225// // All value in "field" are compile-time known.
226// upb_Message_SetBaseField(msg, &field, &value);
227// }
228//
229// // Via UPB_ASSUME().
230// UPB_INLINE bool upb_Message_SetBool(upb_Message* msg,
231// const upb_MiniTableField* field,
232// bool value, upb_Arena* a) {
233// UPB_ASSUME(field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Bool);
234// UPB_ASSUME(UPB_PRIVATE(_upb_MiniTableField_GetRep)(field) ==
235// kUpb_FieldRep_1Byte);
236// upb_Message_SetField(msg, field, &value, a);
237// }
238//
239// As a result, we can use these universal getters/setters for *all* message
240// accessors: generated code, MiniTable accessors, and reflection. The only
241// exception is the binary encoder/decoder, which need to be a bit more clever
242// about how they read/write the message data, for efficiency.
243//
244// These functions work on both extensions and non-extensions. If the field
245// of a setter is known to be a non-extension, the arena may be NULL and the
246// returned bool value may be ignored since it will always succeed.
247
249 const upb_MiniTableField* field) {
252 if (upb_MiniTableField_IsInOneof(field)) {
253 return UPB_PRIVATE(_upb_Message_GetOneofCase)(msg, field) ==
255 } else {
256 return UPB_PRIVATE(_upb_Message_GetHasbit)(msg, field);
257 }
258}
259
265
267 const struct upb_Message* msg, const upb_MiniTableField* field,
268 const void* default_val, void* val) {
270 if ((upb_MiniTableField_IsInOneof(field) ||
271 !UPB_PRIVATE(_upb_MiniTableField_DataIsZero)(field, default_val)) &&
272 !upb_Message_HasBaseField(msg, field)) {
273 UPB_PRIVATE(_upb_MiniTableField_DataCopy)(field, val, default_val);
274 return;
275 }
277 (field, val, UPB_PRIVATE(_upb_Message_DataPtr)(msg, field));
278}
279
281 const struct upb_Message* msg, const upb_MiniTableExtension* mt_ext,
282 const void* default_val, void* val) {
283 const upb_Extension* ext = UPB_PRIVATE(_upb_Message_Getext)(msg, mt_ext);
284 const upb_MiniTableField* f = &mt_ext->UPB_PRIVATE(field);
286
287 if (ext) {
289 } else {
290 UPB_PRIVATE(_upb_MiniTableField_DataCopy)(f, val, default_val);
291 }
292}
293
294// NOTE: The default_val is only used for fields that support presence.
295// For repeated/map fields, the resulting upb_Array*/upb_Map* can be NULL if a
296// upb_Array/upb_Map has not been allocated yet. Array/map fields do not have
297// presence, so this is semantically identical to a pointer to an empty
298// array/map, and must be treated the same for all semantic purposes.
300 const struct upb_Message* msg, const upb_MiniTableField* field,
301 upb_MessageValue default_val) {
305 &default_val, &ret);
306 } else {
307 _upb_Message_GetNonExtensionField(msg, field, &default_val, &ret);
308 }
309 return ret;
310}
311
321
323 const upb_MiniTableExtension* e,
324 const void* val, upb_Arena* a) {
326 UPB_ASSERT(a);
327 upb_Extension* ext =
329 if (!ext) return false;
331 (&e->UPB_PRIVATE(field), &ext->data, val);
332 return true;
333}
334
335// Sets the value of the given field in the given msg. The return value is true
336// if the operation completed successfully, or false if memory allocation
337// failed.
339 const upb_MiniTableField* f,
341 upb_Arena* a) {
343 const upb_MiniTableExtension* ext = (const upb_MiniTableExtension*)f;
344 return upb_Message_SetExtension(msg, ext, &val, a);
345 } else {
346 upb_Message_SetBaseField(msg, f, &val);
347 return true;
348 }
349}
350
352 const struct upb_Message* msg, const upb_MiniTableField* f) {
354 upb_Array* ret;
355 const upb_Array* default_val = NULL;
356 _upb_Message_GetNonExtensionField(msg, f, &default_val, &ret);
357 return ret;
358}
359
370
382
394
407
409 const upb_MiniTableField* f,
410 int64_t default_val) {
414
416 def.int64_val = default_val;
417 return upb_Message_GetField(msg, f, def).int64_val;
418}
419
421 const struct upb_Message* msg, const upb_MiniTableField* field) {
422 UPB_UNUSED(msg);
424#ifndef NDEBUG
425 uintptr_t default_val = 0;
426 uintptr_t tagged;
427 _upb_Message_GetNonExtensionField(msg, field, &default_val, &tagged);
429#endif
430}
431
433 const struct upb_Message* msg, const upb_MiniTableField* f) {
436 struct upb_Map* ret;
437 const struct upb_Map* default_val = NULL;
438 _upb_Message_GetNonExtensionField(msg, f, &default_val, &ret);
439 return ret;
440}
441
443 const struct upb_Message* msg, const upb_MiniTableField* f,
444 struct upb_Message* default_val) {
449 uintptr_t tagged;
450 _upb_Message_GetNonExtensionField(msg, f, &default_val, &tagged);
451 return tagged;
452}
453
454// For internal use only; users cannot set tagged messages because only the
455// parser and the message copier are allowed to directly create an empty
456// message.
466
468 const struct upb_Message* msg, const upb_MiniTableField* f) {
469 uintptr_t tagged = upb_Message_GetTaggedMessagePtr(msg, f, NULL);
471}
472
478
480 struct upb_Message* msg, const upb_MiniTableField* f) {
481 return (struct upb_Map*)upb_Message_GetMap(msg, f);
482}
483
488
490 struct upb_Message* msg, const upb_MiniTableField* f, upb_Arena* arena) {
491 UPB_ASSERT(arena);
493 upb_Array* array = upb_Message_GetMutableArray(msg, f);
494 if (!array) {
497 // Check again due to: https://godbolt.org/z/7WfaoKG1r
500 val.array_val = array;
501 UPB_PRIVATE(_upb_Message_SetField)(msg, f, val, arena);
502 }
503 return array;
504}
505
507 struct upb_Message* msg, const upb_MiniTableField* field, size_t key_size,
508 size_t val_size, upb_Arena* arena) {
511 struct upb_Map* map = NULL;
512 struct upb_Map* default_map_value = NULL;
513 _upb_Message_GetNonExtensionField(msg, field, &default_map_value, &map);
514 if (!map) {
516 // Check again due to: https://godbolt.org/z/7WfaoKG1r
518 upb_Message_SetBaseField(msg, field, &map);
519 }
520 return map;
521}
522
524 struct upb_Message* msg, const upb_MiniTable* map_entry_mini_table,
525 const upb_MiniTableField* f, upb_Arena* arena) {
527 const upb_MiniTableField* map_entry_key_field =
528 &map_entry_mini_table->UPB_ONLYBITS(fields)[0];
529 const upb_MiniTableField* map_entry_value_field =
530 &map_entry_mini_table->UPB_ONLYBITS(fields)[1];
532 msg, f, _upb_Map_CTypeSize(upb_MiniTableField_CType(map_entry_key_field)),
533 _upb_Map_CTypeSize(upb_MiniTableField_CType(map_entry_value_field)),
534 arena);
535}
536
538 struct upb_Message* msg, const upb_MiniTable* mini_table,
539 const upb_MiniTableField* f, upb_Arena* arena) {
540 UPB_ASSERT(arena);
543 struct upb_Message* sub_message =
544 *UPB_PTR_AT(msg, f->UPB_ONLYBITS(offset), struct upb_Message*);
545 if (!sub_message) {
546 const upb_MiniTable* sub_mini_table =
547 upb_MiniTable_SubMessage(mini_table, f);
548 UPB_ASSERT(sub_mini_table);
549 sub_message = _upb_Message_New(sub_mini_table, arena);
550 *UPB_PTR_AT(msg, f->UPB_ONLYBITS(offset), struct upb_Message*) =
551 sub_message;
553 }
554 return sub_message;
555}
556
569
571 const upb_MiniTableField* f,
572 uint32_t default_val) {
576
578 def.uint32_val = default_val;
579 return upb_Message_GetField(msg, f, def).uint32_val;
580}
581
583 const upb_MiniTableField* f,
584 uint64_t default_val) {
588
590 def.uint64_val = default_val;
591 return upb_Message_GetField(msg, f, def).uint64_val;
592}
593
594// BaseField Setters ///////////////////////////////////////////////////////////
595
604
613
622
632
641
648
659
668
677
688
689// Extension Setters ///////////////////////////////////////////////////////////
690
700
709
718
727
737
746
756
765
774
775// Universal Setters ///////////////////////////////////////////////////////////
776
778 const upb_MiniTableField* f, bool value,
779 upb_Arena* a) {
782 msg, (const upb_MiniTableExtension*)f, value, a)
783 : (upb_Message_SetBaseFieldBool(msg, f, value), true);
784}
785
787 const upb_MiniTableField* f,
788 double value, upb_Arena* a) {
791 msg, (const upb_MiniTableExtension*)f, value, a)
792 : (upb_Message_SetBaseFieldDouble(msg, f, value), true);
793}
794
796 const upb_MiniTableField* f,
797 float value, upb_Arena* a) {
800 msg, (const upb_MiniTableExtension*)f, value, a)
801 : (upb_Message_SetBaseFieldFloat(msg, f, value), true);
802}
803
805 const upb_MiniTableField* f,
806 int32_t value, upb_Arena* a) {
809 msg, (const upb_MiniTableExtension*)f, value, a)
810 : (upb_Message_SetBaseFieldInt32(msg, f, value), true);
811}
812
814 const upb_MiniTableField* f,
815 int64_t value, upb_Arena* a) {
818 msg, (const upb_MiniTableExtension*)f, value, a)
819 : (upb_Message_SetBaseFieldInt64(msg, f, value), true);
820}
821
822// Sets the value of a message-typed field. The mini_tables of `msg` and
823// `value` must have been linked for this to work correctly.
830
831// Sets the value of a `string` or `bytes` field. The bytes of the value are not
832// copied, so it is the caller's responsibility to ensure that they remain valid
833// for the lifetime of `msg`. That might be done by copying them into the given
834// arena, or by fusing that arena with the arena the bytes live in, for example.
836 const upb_MiniTableField* f,
837 upb_StringView value, upb_Arena* a) {
840 msg, (const upb_MiniTableExtension*)f, value, a)
841 : (upb_Message_SetBaseFieldString(msg, f, value), true);
842}
843
845 const upb_MiniTableField* f,
846 uint32_t value, upb_Arena* a) {
849 msg, (const upb_MiniTableExtension*)f, value, a)
850 : (upb_Message_SetBaseFieldUInt32(msg, f, value), true);
851}
852
854 const upb_MiniTableField* f,
855 uint64_t value, upb_Arena* a) {
858 msg, (const upb_MiniTableExtension*)f, value, a)
859 : (upb_Message_SetBaseFieldUInt64(msg, f, value), true);
860}
861
863 const upb_MiniTable* m) {
866 memset(msg, 0, m->UPB_PRIVATE(size));
867 if (in) {
868 // Reset the internal buffer to empty.
869 in->size = 0;
870 }
871}
872
874 const upb_MiniTableField* f) {
878 } else if (upb_MiniTableField_IsInOneof(f)) {
879 uint32_t* ptr = UPB_PRIVATE(_upb_Message_OneofCasePtr)(msg, f);
880 if (*ptr != upb_MiniTableField_Number(f)) return;
881 *ptr = 0;
882 }
883 const char zeros[16] = {0};
885 (f, UPB_PRIVATE(_upb_Message_MutableDataPtr)(msg, f), zeros);
886}
887
889 struct upb_Message* msg, const upb_MiniTableExtension* e) {
892 if (!in) return;
893 for (size_t i = 0; i < in->size; i++) {
894 upb_TaggedAuxPtr tagged_ptr = in->aux_data[i];
895 if (upb_TaggedAuxPtr_IsExtension(tagged_ptr)) {
896 const upb_Extension* ext = upb_TaggedAuxPtr_Extension(tagged_ptr);
897 if (ext->ext == e) {
898 in->aux_data[i] = upb_TaggedAuxPtr_Null();
899 return;
900 }
901 }
902 }
903}
904
906 const upb_MiniTable* m,
907 const upb_MiniTableField* f) {
909 uint32_t field_number = upb_Message_WhichOneofFieldNumber(msg, f);
910 if (field_number == 0) {
911 // No field in the oneof is set.
912 return;
913 }
914
915 const upb_MiniTableField* field =
916 upb_MiniTable_FindFieldByNumber(m, field_number);
917 upb_Message_ClearBaseField(msg, field);
918}
919
921 struct upb_Message* msg, const upb_MiniTableField* f, size_t size,
922 upb_Arena* arena) {
925 if (!arr || !UPB_PRIVATE(_upb_Array_ResizeUninitialized)(arr, size, arena)) {
926 return NULL;
927 }
928 return upb_Array_MutableDataPtr(arr);
929}
930
932 const struct upb_Message* msg, const upb_MiniTableExtension* e,
933 bool default_val) {
937 bool ret;
938 _upb_Message_GetExtensionField(msg, e, &default_val, &ret);
939 return ret;
940}
941
943 const struct upb_Message* msg, const upb_MiniTableExtension* e,
944 double default_val) {
948 double ret;
949 _upb_Message_GetExtensionField(msg, e, &default_val, &ret);
950 return ret;
951}
952
954 const struct upb_Message* msg, const upb_MiniTableExtension* e,
955 float default_val) {
956 float ret;
960 _upb_Message_GetExtensionField(msg, e, &default_val, &ret);
961 return ret;
962}
963
965 const struct upb_Message* msg, const upb_MiniTableExtension* e,
966 int32_t default_val) {
971 int32_t ret;
972 _upb_Message_GetExtensionField(msg, e, &default_val, &ret);
973 return ret;
974}
975
977 const struct upb_Message* msg, const upb_MiniTableExtension* e,
978 int64_t default_val) {
982 int64_t ret;
983 _upb_Message_GetExtensionField(msg, e, &default_val, &ret);
984 return ret;
985}
986
988 const struct upb_Message* msg, const upb_MiniTableExtension* e,
989 uint32_t default_val) {
993 uint32_t ret;
994 _upb_Message_GetExtensionField(msg, e, &default_val, &ret);
995 return ret;
996}
997
999 const struct upb_Message* msg, const upb_MiniTableExtension* e,
1000 uint64_t default_val) {
1004 uint64_t ret;
1005 _upb_Message_GetExtensionField(msg, e, &default_val, &ret);
1006 return ret;
1007}
1008
1020
1031
1032// Repeated
1034 const struct upb_Message* msg, const upb_MiniTableExtension* e) {
1038 UPB_ASSUME(e->UPB_PRIVATE(field).presence == 0);
1039 upb_Array* ret;
1040 const upb_Array* default_val = NULL;
1041 _upb_Message_GetExtensionField(msg, e, &default_val, &ret);
1042 return ret;
1043}
1044
1046 struct upb_Message* msg, const upb_MiniTableExtension* e) {
1051 UPB_ASSUME(e->UPB_PRIVATE(field).presence == 0);
1052 upb_Array* ret;
1053 upb_Array* default_val = NULL;
1054 _upb_Message_GetExtensionField(msg, e, &default_val, &ret);
1055 return ret;
1056}
1057
1058#ifdef __cplusplus
1059} /* extern "C" */
1060#endif
1061
1062#if defined(__GNUC__) && !defined(__clang__)
1063#pragma GCC diagnostic pop
1064#endif
1065
1066#include "upb/port/undef.inc"
1067
1068#endif // UPB_MESSAGE_INTERNAL_ACCESSORS_H_
and restrictions which apply to each piece of software is included later in this file and or inside of the individual applicable source files The disclaimer of warranty in the WPILib license above applies to all code in and nothing in any of the other licenses gives permission to use the names of FIRST nor the names of the WPILib contributors to endorse or promote products derived from this software The following pieces of software have additional or alternate and or glfw and nanopb were modified for use in Google Inc All rights reserved Redistribution and use in source and binary with or without are permitted provided that the following conditions are this list of conditions and the following disclaimer *Redistributions in binary form must reproduce the above copyright this list of conditions and the following disclaimer in the documentation and or other materials provided with the distribution *Neither the name of Google Inc nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY EXPRESS OR IMPLIED BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY OR CONSEQUENTIAL WHETHER IN STRICT OR EVEN IF ADVISED OF THE POSSIBILITY OF SUCH January AND DISTRIBUTION Definitions License shall mean the terms and conditions for and distribution as defined by Sections through of this document Licensor shall mean the copyright owner or entity authorized by the copyright owner that is granting the License Legal Entity shall mean the union of the acting entity and all other entities that control are controlled by or are under common control with that entity For the purposes of this definition control direct or to cause the direction or management of such whether by contract or including but not limited to software source documentation and configuration files Object form shall mean any form resulting from mechanical transformation or translation of a Source including but not limited to compiled object generated and conversions to other media types Work shall mean the work of whether in Source or Object made available under the as indicated by a copyright notice that is included in or attached to the whether in Source or Object that is based or other modifications as a an original work of authorship For the purposes of this Derivative Works shall not include works that remain separable from
Definition ThirdPartyNotices.txt:140
UPB_API_INLINE bool upb_Message_SetExtensionInt32(struct upb_Message *msg, const upb_MiniTableExtension *e, int32_t value, upb_Arena *a)
Definition accessors.h:728
UPB_API_INLINE bool upb_Message_HasBaseField(const upb_Message *msg, const upb_MiniTableField *f)
UPB_API_INLINE bool upb_Message_HasExtension(const upb_Message *msg, const upb_MiniTableExtension *e)
UPB_API_INLINE upb_Map * upb_Message_GetOrCreateMutableMap(upb_Message *msg, const upb_MiniTable *map_entry_mini_table, const upb_MiniTableField *f, upb_Arena *arena)
Definition accessors.h:523
UPB_API_INLINE void upb_Message_SetBaseFieldDouble(struct upb_Message *msg, const upb_MiniTableField *f, double value)
Definition accessors.h:605
UPB_API_INLINE void upb_Message_SetBaseFieldInt32(struct upb_Message *msg, const upb_MiniTableField *f, int32_t value)
Definition accessors.h:623
UPB_API_INLINE bool upb_Message_SetExtensionFloat(struct upb_Message *msg, const upb_MiniTableExtension *e, float value, upb_Arena *a)
Definition accessors.h:719
UPB_API_INLINE void upb_Message_ClearBaseField(upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:873
UPB_API_INLINE const upb_Array * upb_Message_GetArray(const upb_Message *msg, const upb_MiniTableField *f)
UPB_API_INLINE bool upb_Message_SetExtensionInt64(struct upb_Message *msg, const upb_MiniTableExtension *e, int64_t value, upb_Arena *a)
Definition accessors.h:738
UPB_API_INLINE float upb_Message_GetFloat(const upb_Message *msg, const upb_MiniTableField *f, float default_val)
UPB_API_INLINE bool upb_Message_SetExtensionMessage(struct upb_Message *msg, const upb_MiniTableExtension *e, struct upb_Message *value, upb_Arena *a)
Definition accessors.h:691
UPB_API_INLINE int32_t upb_Message_GetExtensionInt32(const upb_Message *msg, const upb_MiniTableExtension *f, int32_t default_val)
UPB_API_INLINE const upb_Message * upb_Message_GetMessage(const upb_Message *msg, const upb_MiniTableField *f)
UPB_API_INLINE void upb_Message_SetClosedEnum(upb_Message *msg, const upb_MiniTable *msg_mini_table, const upb_MiniTableField *f, int32_t value)
Definition accessors.h:678
UPB_API_INLINE float upb_Message_GetExtensionFloat(const upb_Message *msg, const upb_MiniTableExtension *f, float default_val)
UPB_API_INLINE upb_Message * upb_Message_GetOrCreateMutableMessage(upb_Message *msg, const upb_MiniTable *mini_table, const upb_MiniTableField *f, upb_Arena *arena)
Definition accessors.h:537
UPB_API_INLINE void upb_Message_SetBaseFieldBool(struct upb_Message *msg, const upb_MiniTableField *f, bool value)
Definition accessors.h:596
UPB_API_INLINE bool upb_Message_SetUInt32(upb_Message *msg, const upb_MiniTableField *f, uint32_t value, upb_Arena *a)
Definition accessors.h:844
UPB_API_INLINE int32_t upb_Message_GetInt32(const upb_Message *msg, const upb_MiniTableField *f, int32_t default_val)
UPB_API_INLINE bool upb_Message_SetUInt64(upb_Message *msg, const upb_MiniTableField *f, uint64_t value, upb_Arena *a)
Definition accessors.h:853
UPB_API_INLINE uint64_t upb_Message_GetExtensionUInt64(const upb_Message *msg, const upb_MiniTableExtension *f, uint64_t default_val)
UPB_API_INLINE uint64_t upb_Message_GetUInt64(const upb_Message *msg, const upb_MiniTableField *f, uint64_t default_val)
UPB_API_INLINE upb_Array * upb_Message_GetExtensionMutableArray(upb_Message *msg, const upb_MiniTableExtension *f)
Definition accessors.h:1045
UPB_API_INLINE bool upb_Message_SetDouble(upb_Message *msg, const upb_MiniTableField *f, double value, upb_Arena *a)
Definition accessors.h:786
UPB_API_INLINE uint32_t upb_Message_GetUInt32(const upb_Message *msg, const upb_MiniTableField *f, uint32_t default_val)
UPB_API_INLINE uint32_t upb_Message_GetExtensionUInt32(const upb_Message *msg, const upb_MiniTableExtension *f, uint32_t default_val)
UPB_API_INLINE int64_t upb_Message_GetExtensionInt64(const upb_Message *msg, const upb_MiniTableExtension *f, int64_t default_val)
UPB_API_INLINE bool upb_Message_GetBool(const upb_Message *msg, const upb_MiniTableField *f, bool default_val)
UPB_API_INLINE bool upb_Message_SetExtensionBool(struct upb_Message *msg, const upb_MiniTableExtension *e, bool value, upb_Arena *a)
Definition accessors.h:701
UPB_API_INLINE upb_StringView upb_Message_GetString(const upb_Message *msg, const upb_MiniTableField *field, upb_StringView default_val)
UPB_API_INLINE bool upb_Message_SetFloat(upb_Message *msg, const upb_MiniTableField *f, float value, upb_Arena *a)
Definition accessors.h:795
UPB_API_INLINE void upb_Message_ClearExtension(upb_Message *msg, const upb_MiniTableExtension *e)
Definition accessors.h:888
UPB_API_INLINE bool upb_Message_SetExtensionUInt32(struct upb_Message *msg, const upb_MiniTableExtension *e, uint32_t value, upb_Arena *a)
Definition accessors.h:757
UPB_API_INLINE upb_Array * upb_Message_GetOrCreateMutableArray(upb_Message *msg, const upb_MiniTableField *f, upb_Arena *arena)
Definition accessors.h:489
UPB_API_INLINE bool upb_Message_SetInt32(upb_Message *msg, const upb_MiniTableField *f, int32_t value, upb_Arena *a)
Definition accessors.h:804
UPB_API_INLINE upb_Map * upb_Message_GetMutableMap(upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:479
UPB_API_INLINE upb_Message * upb_Message_GetMutableMessage(upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:484
UPB_API_INLINE void upb_Message_Clear(upb_Message *msg, const upb_MiniTable *m)
Definition accessors.h:862
UPB_API_INLINE const upb_Map * upb_Message_GetMap(const upb_Message *msg, const upb_MiniTableField *f)
UPB_API_INLINE upb_TaggedMessagePtr upb_Message_GetTaggedMessagePtr(const upb_Message *msg, const upb_MiniTableField *field, upb_Message *default_val)
UPB_API_INLINE void upb_Message_SetBaseFieldUInt64(struct upb_Message *msg, const upb_MiniTableField *f, uint64_t value)
Definition accessors.h:669
UPB_API_INLINE const upb_MiniTableField * upb_Message_WhichOneof(const upb_Message *msg, const upb_MiniTable *m, const upb_MiniTableField *f)
UPB_API_INLINE bool upb_Message_SetExtensionUInt64(struct upb_Message *msg, const upb_MiniTableExtension *e, uint64_t value, upb_Arena *a)
Definition accessors.h:766
UPB_API_INLINE upb_StringView upb_Message_GetExtensionString(const upb_Message *msg, const upb_MiniTableExtension *f, upb_StringView default_val)
UPB_API_INLINE bool upb_Message_SetString(upb_Message *msg, const upb_MiniTableField *f, upb_StringView value, upb_Arena *a)
Definition accessors.h:835
UPB_API_INLINE void upb_Message_ClearOneof(upb_Message *msg, const upb_MiniTable *m, const upb_MiniTableField *f)
Definition accessors.h:905
UPB_API_INLINE void upb_Message_SetBaseFieldString(struct upb_Message *msg, const upb_MiniTableField *f, upb_StringView value)
Definition accessors.h:649
UPB_API_INLINE bool upb_Message_SetExtension(upb_Message *msg, const upb_MiniTableExtension *e, const void *value, upb_Arena *a)
Definition accessors.h:322
UPB_API_INLINE bool upb_Message_SetBool(upb_Message *msg, const upb_MiniTableField *f, bool value, upb_Arena *a)
Definition accessors.h:777
UPB_API_INLINE upb_MessageValue upb_Message_GetField(const upb_Message *msg, const upb_MiniTableField *f, upb_MessageValue default_val)
UPB_API_INLINE bool upb_Message_SetExtensionString(struct upb_Message *msg, const upb_MiniTableExtension *e, upb_StringView value, upb_Arena *a)
Definition accessors.h:747
UPB_API_INLINE void * upb_Message_ResizeArrayUninitialized(upb_Message *msg, const upb_MiniTableField *f, size_t size, upb_Arena *arena)
Definition accessors.h:920
UPB_API_INLINE double upb_Message_GetDouble(const upb_Message *msg, const upb_MiniTableField *field, double default_val)
UPB_API_INLINE upb_Array * upb_Message_GetMutableArray(upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:473
UPB_API_INLINE const upb_Array * upb_Message_GetExtensionArray(const upb_Message *msg, const upb_MiniTableExtension *f)
UPB_API_INLINE void upb_Message_SetBaseField(upb_Message *msg, const upb_MiniTableField *f, const void *val)
Definition accessors.h:312
UPB_API_INLINE uint32_t upb_Message_WhichOneofFieldNumber(const upb_Message *message, const upb_MiniTableField *oneof_field)
UPB_API_INLINE void upb_Message_SetMessage(upb_Message *msg, const upb_MiniTableField *f, upb_Message *value)
Definition accessors.h:824
UPB_API_INLINE bool upb_Message_GetExtensionBool(const upb_Message *msg, const upb_MiniTableExtension *f, bool default_val)
UPB_API_INLINE void upb_Message_SetBaseFieldMessage(struct upb_Message *msg, const upb_MiniTableField *f, upb_Message *value)
Definition accessors.h:642
UPB_API_INLINE bool upb_Message_SetInt64(upb_Message *msg, const upb_MiniTableField *f, int64_t value, upb_Arena *a)
Definition accessors.h:813
UPB_API_INLINE void upb_Message_SetBaseFieldInt64(struct upb_Message *msg, const upb_MiniTableField *f, int64_t value)
Definition accessors.h:633
UPB_API_INLINE double upb_Message_GetExtensionDouble(const upb_Message *msg, const upb_MiniTableExtension *f, double default_val)
UPB_API_INLINE void upb_Message_SetBaseFieldUInt32(struct upb_Message *msg, const upb_MiniTableField *f, uint32_t value)
Definition accessors.h:660
UPB_API_INLINE upb_Message * upb_Message_GetExtensionMessage(const upb_Message *msg, const upb_MiniTableExtension *f, struct upb_Message *default_val)
UPB_API_INLINE int64_t upb_Message_GetInt64(const upb_Message *msg, const upb_MiniTableField *f, int64_t default_val)
UPB_API_INLINE bool upb_Message_SetExtensionDouble(struct upb_Message *msg, const upb_MiniTableExtension *e, double value, upb_Arena *a)
Definition accessors.h:710
UPB_API_INLINE void upb_Message_SetBaseFieldFloat(struct upb_Message *msg, const upb_MiniTableField *f, float value)
Definition accessors.h:614
#define UPB_UNUSED(var)
Definition def.inc:303
#define UPB_UNREACHABLE()
Definition def.inc:345
#define UPB_API_INLINE
Definition def.inc:163
#define UPB_SIZE(size32, size64)
Definition def.inc:112
#define UPB_PTR_AT(msg, ofs, type)
Definition def.inc:118
#define UPB_ASSUME(expr)
Definition def.inc:319
#define UPB_ASSERT(expr)
Definition def.inc:329
#define UPB_PRIVATE(x)
Definition def.inc:393
#define UPB_FORCEINLINE
Definition def.inc:288
#define UPB_INLINE
Definition def.inc:144
#define UPB_INLINE_IF_NOT_GCC
Definition def.inc:155
@ kUpb_CType_UInt64
Definition descriptor_constants.h:27
@ kUpb_CType_UInt32
Definition descriptor_constants.h:22
@ kUpb_CType_Float
Definition descriptor_constants.h:20
@ kUpb_CType_Double
Definition descriptor_constants.h:25
@ kUpb_CType_Enum
Definition descriptor_constants.h:23
@ kUpb_CType_Bool
Definition descriptor_constants.h:19
@ kUpb_CType_Message
Definition descriptor_constants.h:24
@ kUpb_CType_Int32
Definition descriptor_constants.h:21
@ kUpb_CType_Bytes
Definition descriptor_constants.h:29
@ kUpb_CType_Int64
Definition descriptor_constants.h:26
@ kUpb_CType_String
Definition descriptor_constants.h:28
UPB_API_INLINE uint32_t upb_MiniTableField_Number(const upb_MiniTableField *f)
UPB_API_INLINE bool upb_MiniTableField_IsScalar(const upb_MiniTableField *f)
UPB_API_INLINE bool upb_MiniTableField_IsInOneof(const upb_MiniTableField *f)
UPB_API_INLINE bool upb_MiniTableField_HasPresence(const upb_MiniTableField *f)
UPB_API_INLINE upb_CType upb_MiniTableField_CType(const upb_MiniTableField *f)
UPB_API_INLINE bool upb_MiniTableField_IsClosedEnum(const upb_MiniTableField *f)
UPB_API_INLINE bool upb_MiniTableField_IsExtension(const upb_MiniTableField *f)
UPB_API_INLINE bool upb_MiniTableField_IsArray(const upb_MiniTableField *f)
auto ptr(T p) -> const void *
Converts p to const void* for pointer formatting.
Definition format.h:3963
UPB_INLINE void UPB_PRIVATE _upb_Message_SetOneofCase(struct upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:101
UPB_INLINE bool UPB_PRIVATE _upb_MiniTableField_DataIsZero(const upb_MiniTableField *f, const void *val)
Definition accessors.h:210
UPB_INLINE bool UPB_PRIVATE _upb_Message_IsInitializedShallow(const struct upb_Message *msg, const upb_MiniTable *m)
Definition accessors.h:139
UPB_INLINE void UPB_PRIVATE _upb_Message_SetPresence(struct upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:157
UPB_INLINE void UPB_PRIVATE _upb_Message_SetHasbit(const struct upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:69
UPB_INLINE bool UPB_PRIVATE _upb_Message_SetField(struct upb_Message *msg, const upb_MiniTableField *f, upb_MessageValue val, upb_Arena *a)
Definition accessors.h:338
UPB_INLINE void UPB_PRIVATE _upb_MiniTableField_DataClear(const upb_MiniTableField *f, void *val)
Definition accessors.h:204
UPB_INLINE void *UPB_PRIVATE _upb_Message_MutableDataPtr(struct upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:147
UPB_INLINE_IF_NOT_GCC void UPB_PRIVATE _upb_MiniTableField_DataCopy(const upb_MiniTableField *f, void *to, const void *from)
Definition accessors.h:166
UPB_INLINE bool UPB_PRIVATE _upb_Message_GetHasbit(const struct upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:61
UPB_INLINE const void *UPB_PRIVATE _upb_Message_DataPtr(const struct upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:152
UPB_INLINE struct upb_Map * _upb_Message_GetOrCreateMutableMap(struct upb_Message *msg, const upb_MiniTableField *field, size_t key_size, size_t val_size, upb_Arena *arena)
Definition accessors.h:506
UPB_INLINE_IF_NOT_GCC bool UPB_PRIVATE _upb_MiniTableField_DataEquals(const upb_MiniTableField *f, const void *a, const void *b)
Definition accessors.h:186
UPB_FORCEINLINE void _upb_Message_GetNonExtensionField(const struct upb_Message *msg, const upb_MiniTableField *field, const void *default_val, void *val)
Definition accessors.h:266
UPB_INLINE uint32_t *UPB_PRIVATE _upb_Message_OneofCasePtr(struct upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:87
UPB_INLINE void UPB_PRIVATE _upb_Message_ClearHasbit(const struct upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:77
UPB_INLINE void UPB_PRIVATE _upb_Message_SetTaggedMessagePtr(struct upb_Message *msg, const upb_MiniTableField *f, uintptr_t sub_message)
Definition accessors.h:457
UPB_INLINE void _upb_Message_GetExtensionField(const struct upb_Message *msg, const upb_MiniTableExtension *mt_ext, const void *default_val, void *val)
Definition accessors.h:280
UPB_INLINE uint32_t UPB_PRIVATE _upb_Message_GetOneofCase(const struct upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:93
UPB_INLINE bool UPB_PRIVATE _upb_Message_ClearOneofCase(struct upb_Message *msg, const upb_MiniTableField *f)
Definition accessors.h:110
UPB_INLINE void UPB_PRIVATE _upb_Message_AssertMapIsUntagged(const struct upb_Message *msg, const upb_MiniTableField *field)
Definition accessors.h:420
UPB_API_INLINE bool upb_MiniTableEnum_CheckValue(const struct upb_MiniTableEnum *e, uint32_t val)
Definition enum.h:26
UPB_INLINE bool UPB_PRIVATE _upb_MiniTableField_HasHasbit(const struct upb_MiniTableField *f)
Definition field.h:133
UPB_INLINE char UPB_PRIVATE _upb_MiniTableField_HasbitMask(const struct upb_MiniTableField *f)
Definition field.h:138
UPB_INLINE size_t UPB_PRIVATE _upb_MiniTableField_ElemSizeLg2(const struct upb_MiniTableField *f)
Definition field.h:209
UPB_INLINE size_t UPB_PRIVATE _upb_MiniTableField_OneofOffset(const struct upb_MiniTableField *f)
Definition field.h:187
UPB_INLINE void UPB_PRIVATE _upb_MiniTableField_CheckIsArray(const struct upb_MiniTableField *f)
Definition field.h:193
UPB_INLINE upb_FieldRep UPB_PRIVATE _upb_MiniTableField_GetRep(const struct upb_MiniTableField *f)
Definition field.h:83
UPB_INLINE uint16_t UPB_PRIVATE _upb_MiniTableField_HasbitOffset(const struct upb_MiniTableField *f)
Definition field.h:145
@ kUpb_FieldRep_1Byte
Definition field.h:61
@ kUpb_FieldRep_NativePointer
Definition field.h:66
@ kUpb_FieldRep_StringView
Definition field.h:63
@ kUpb_FieldRep_8Byte
Definition field.h:64
@ kUpb_FieldRep_4Byte
Definition field.h:62
UPB_INLINE void UPB_PRIVATE _upb_MiniTableField_CheckIsMap(const struct upb_MiniTableField *f)
Definition field.h:201
UPB_INLINE size_t _upb_Map_CTypeSize(upb_CType ctype)
Definition map.h:216
struct upb_Map * _upb_Map_New(upb_Arena *a, size_t key_size, size_t value_size)
UPB_INLINE uintptr_t UPB_PRIVATE _upb_TaggedMessagePtr_Pack(struct upb_Message *ptr, bool empty)
Definition tagged_ptr.h:24
const upb_Extension *UPB_PRIVATE _upb_Message_Getext(const struct upb_Message *msg, const upb_MiniTableExtension *ext)
upb_Extension *UPB_PRIVATE _upb_Message_GetOrCreateExtension(struct upb_Message *msg, const upb_MiniTableExtension *ext, upb_Arena *arena)
UPB_INLINE bool upb_TaggedAuxPtr_IsExtension(upb_TaggedAuxPtr ptr)
Definition message.h:56
UPB_INLINE upb_TaggedAuxPtr upb_TaggedAuxPtr_Null(void)
Definition message.h:78
UPB_INLINE upb_Extension * upb_TaggedAuxPtr_Extension(upb_TaggedAuxPtr ptr)
Definition message.h:68
UPB_INLINE struct upb_Message * _upb_Message_New(const upb_MiniTable *m, upb_Arena *a)
Definition message.h:126
UPB_API_INLINE upb_CType upb_MiniTableExtension_CType(const struct upb_MiniTableExtension *e)
Definition extension.h:34
UPB_INLINE upb_FieldRep UPB_PRIVATE _upb_MiniTableExtension_GetRep(const struct upb_MiniTableExtension *e)
Definition extension.h:84
UPB_INLINE uint64_t UPB_PRIVATE _upb_MiniTable_RequiredMask(const struct upb_MiniTable *m)
Definition message.h:237
UPB_API_INLINE const upb_MiniTableEnum * upb_MiniTable_GetSubEnumTable(const upb_MiniTable *m, const upb_MiniTableField *f)
UPB_API_INLINE const upb_MiniTableField * upb_MiniTable_FindFieldByNumber(const upb_MiniTable *m, uint32_t number)
UPB_API_INLINE const upb_MiniTable * upb_MiniTable_SubMessage(const upb_MiniTable *m, const upb_MiniTableField *f)
UPB_INLINE bool upb_StringView_IsEqual(upb_StringView a, upb_StringView b)
Definition string_view.h:44
Definition arena.h:29
Definition array.h:30
Definition extension.h:32
const upb_MiniTableExtension * ext
Definition extension.h:33
upb_MessageValue data
Definition extension.h:34
Definition map.h:38
char val_size
Definition map.h:42
char key_size
Definition map.h:41
Definition message.h:110
Definition types.h:18
Definition extension.h:21
struct upb_MiniTableField UPB_PRIVATE(field)
Definition field.h:21
uint32_t UPB_ONLYBITS(number)
int16_t presence
Definition field.h:24
Definition message.h:54
const struct upb_MiniTableField * UPB_ONLYBITS(fields)
const upb_MiniTableSubInternal * UPB_PRIVATE(subs)
Definition string_view.h:23
Definition message.h:44
UPB_API_INLINE bool upb_TaggedMessagePtr_IsEmpty(upb_TaggedMessagePtr ptr)
Definition tagged_ptr.h:29
UPB_API_INLINE upb_Message * upb_TaggedMessagePtr_GetNonEmptyMessage(upb_TaggedMessagePtr ptr)
Definition tagged_ptr.h:38
UPB_INLINE struct upb_Array *UPB_PRIVATE _upb_Array_New(upb_Arena *arena, size_t init_capacity, int elem_size_lg2)
Definition array.h:95
UPB_API_INLINE void * upb_Array_MutableDataPtr(struct upb_Array *array)
Definition array.h:72
UPB_INLINE bool UPB_PRIVATE _upb_Array_ResizeUninitialized(struct upb_Array *array, size_t size, upb_Arena *arena)
Definition array.h:133
Definition value.h:27
float float_val
Definition value.h:29
const struct upb_Array * array_val
Definition value.h:35
bool bool_val
Definition value.h:28
int64_t int64_val
Definition value.h:32
uint64_t uint64_val
Definition value.h:34
int32_t int32_val
Definition value.h:31
double double_val
Definition value.h:30
uint32_t uint32_val
Definition value.h:33
upb_StringView str_val
Definition value.h:38
UPB_INLINE uint64_t upb_BigEndian64(uint64_t val)
Definition endian.h:32
UPB_API_INLINE bool upb_Message_IsFrozen(const struct upb_Message *msg)
Definition types.h:34
UPB_INLINE struct upb_Message_Internal *UPB_PRIVATE _upb_Message_GetInternal(const struct upb_Message *msg)
Definition types.h:38