mini_table.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2009-2022, Google LLC
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of Google LLC nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY DIRECT,
20  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #ifndef UPB_MINI_TABLE_H_
29 #define UPB_MINI_TABLE_H_
30 
31 #include "upb/msg_internal.h"
32 
33 // Must be last.
34 #include "upb/port_def.inc"
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
42 
43 typedef enum {
48 
49 typedef enum {
56 
59 // Functions to encode a string in a format that can be loaded by
60 // upb_MiniTable_Build().
61 
62 typedef struct {
63  char* end; // Limit of the buffer passed as a parameter.
64  // Aliased to internal-only members in .cc.
65  char internal[32];
67 
68 // If the input buffer has at least this many bytes available, the encoder call
69 // is guaranteed to succeed (as long as field number order is maintained).
70 #define kUpb_MtDataEncoder_MinSize 16
71 
72 // Encodes field/oneof information for a given message. The sequence of calls
73 // should look like:
74 //
75 // upb_MtDataEncoder e;
76 // char buf[256];
77 // char* ptr = buf;
78 // e.end = ptr + sizeof(buf);
79 // ptr = upb_MtDataEncoder_StartMessage(&e, ptr);
80 // // Fields *must* be in field number order.
81 // ptr = upb_MtDataEncoder_PutField(&e, ptr, ...);
82 // ptr = upb_MtDataEncoder_PutField(&e, ptr, ...);
83 // ptr = upb_MtDataEncoder_PutField(&e, ptr, ...);
84 //
85 // // If oneofs are present. Oneofs must be encoded after regular fields.
86 // ptr = upb_MiniTable_StartOneof(&e, ptr)
87 // ptr = upb_MiniTable_PutOneofField(&e, ptr, ...);
88 // ptr = upb_MiniTable_PutOneofField(&e, ptr, ...);
89 //
90 // ptr = upb_MiniTable_StartOneof(&e, ptr);
91 // ptr = upb_MiniTable_PutOneofField(&e, ptr, ...);
92 // ptr = upb_MiniTable_PutOneofField(&e, ptr, ...);
93 //
94 // Oneofs must be encoded after all regular fields.
96  uint64_t msg_mod);
98  upb_FieldType type, uint32_t field_num,
99  uint64_t field_mod);
102  uint32_t field_num);
103 
104 // Encodes the set of values for a given enum. The values must be given in
105 // order (after casting to uint32_t), and repeats are not allowed.
108  uint32_t val);
110 
113 typedef enum {
119 
120 // Builds a mini table from the data encoded in the buffer [data, len]. If any
121 // errors occur, returns NULL and sets a status message. In the success case,
122 // the caller must call upb_MiniTable_SetSub*() for all message or proto2 enum
123 // fields to link the table to the appropriate sub-tables.
124 upb_MiniTable* upb_MiniTable_Build(const char* data, size_t len,
129  const upb_MiniTable* sub);
131  const upb_MiniTable_Enum* sub);
132 
133 bool upb_MiniTable_BuildExtension(const char* data, size_t len,
136 
137 // Special-case functions for MessageSet layout and map entries.
139  upb_Arena* arena);
142  bool value_is_proto3_enum,
144  upb_Arena* arena);
145 
147  upb_Arena* arena,
148  upb_Status* status);
149 
150 // Like upb_MiniTable_Build(), but the user provides a buffer of layout data so
151 // it can be reused from call to call, avoiding repeated realloc()/free().
152 //
153 // The caller owns `*buf` both before and after the call, and must free() it
154 // when it is no longer in use. The function will realloc() `*buf` as
155 // necessary, updating `*size` accordingly.
156 upb_MiniTable* upb_MiniTable_BuildWithBuf(const char* data, size_t len,
158  upb_Arena* arena, void** buf,
159  size_t* buf_size, upb_Status* status);
160 
161 // For testing only.
162 char upb_ToBase92(int8_t ch);
165 
166 #ifdef __cplusplus
167 } /* extern "C" */
168 #endif
169 
170 #include "upb/port_undef.inc"
171 
172 #endif /* UPB_MINI_TABLE_H_ */
upb_MtDataEncoder_StartEnum
char * upb_MtDataEncoder_StartEnum(upb_MtDataEncoder *e, char *ptr)
ptr
char * ptr
Definition: abseil-cpp/absl/base/internal/low_level_alloc_test.cc:45
upb_FieldType
upb_FieldType
Definition: upb/upb/upb.h:308
upb_MiniTable_Sub
Definition: msg_internal.h:154
upb_MiniTable_BuildEnum
upb_MiniTable_Enum * upb_MiniTable_BuildEnum(const char *data, size_t len, upb_Arena *arena, upb_Status *status)
Definition: mini_table.c:971
upb_MiniTable_Enum
Definition: msg_internal.h:136
upb_MiniTable_Field
Definition: msg_internal.h:71
upb_MtDataEncoder_FinishEnum
char * upb_MtDataEncoder_FinishEnum(upb_MtDataEncoder *e, char *ptr)
kUpb_FieldModifier_IsPacked
@ kUpb_FieldModifier_IsPacked
Definition: mini_table.h:51
ext
void * ext
Definition: x509v3.h:87
upb_FromBase92
char upb_FromBase92(uint8_t ch)
Definition: mini_table.c:99
kUpb_MiniTablePlatform_64Bit
@ kUpb_MiniTablePlatform_64Bit
Definition: mini_table.h:115
buf
voidpf void * buf
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
upb_MiniTable_Extension
Definition: msg_internal.h:202
upb_MiniTable_BuildWithBuf
upb_MiniTable * upb_MiniTable_BuildWithBuf(const char *data, size_t len, upb_MiniTablePlatform platform, upb_Arena *arena, void **buf, size_t *buf_size, upb_Status *status)
Definition: mini_table.c:871
upb_MtDataEncoder_StartOneof
char * upb_MtDataEncoder_StartOneof(upb_MtDataEncoder *e, char *ptr)
Definition: mini_table.c:256
upb_IsTypePackable
bool upb_IsTypePackable(upb_FieldType type)
Definition: mini_table.c:113
upb_MiniTable_Build
upb_MiniTable * upb_MiniTable_Build(const char *data, size_t len, upb_MiniTablePlatform platform, upb_Arena *arena, upb_Status *status)
Definition: mini_table.c:1038
status
absl::Status status
Definition: rls.cc:251
upb_MiniTable
Definition: msg_internal.h:185
uint8_t
unsigned char uint8_t
Definition: stdint-msvc2008.h:78
upb_MiniTable_BuildMessageSet
upb_MiniTable * upb_MiniTable_BuildMessageSet(upb_MiniTablePlatform platform, upb_Arena *arena)
Definition: mini_table.c:914
kUpb_FieldModifier_IsRepeated
@ kUpb_FieldModifier_IsRepeated
Definition: mini_table.h:50
arena
grpc_core::ScopedArenaPtr arena
Definition: binder_transport_test.cc:237
uint32_t
unsigned int uint32_t
Definition: stdint-msvc2008.h:80
upb_MtDataEncoder_StartMessage
char * upb_MtDataEncoder_StartMessage(upb_MtDataEncoder *e, char *ptr, uint64_t msg_mod)
Definition: mini_table.c:176
upb_MtDataEncoder::end
char * end
Definition: mini_table.h:63
upb_MtDataEncoder_PutField
char * upb_MtDataEncoder_PutField(upb_MtDataEncoder *e, char *ptr, upb_FieldType type, uint32_t field_num, uint64_t field_mod)
Definition: mini_table.c:185
kUpb_MessageModifier
kUpb_MessageModifier
Definition: mini_table.h:43
upb_MtDataEncoder
Definition: mini_table.h:62
kUpb_MiniTablePlatform_Native
@ kUpb_MiniTablePlatform_Native
Definition: mini_table.h:116
UPB_SIZE
#define UPB_SIZE(size32, size64)
Definition: bloaty/third_party/protobuf/php/ext/google/protobuf/upb.c:32
kUpb_MessageModifier_DefaultIsPacked
@ kUpb_MessageModifier_DefaultIsPacked
Definition: mini_table.h:45
uint64_t
unsigned __int64 uint64_t
Definition: stdint-msvc2008.h:90
absl::compare_internal::value_type
int8_t value_type
Definition: abseil-cpp/absl/types/compare.h:45
number
int32_t number
Definition: bloaty/third_party/protobuf/php/ext/google/protobuf/protobuf.h:850
upb_MiniTable_SetSubMessage
void upb_MiniTable_SetSubMessage(upb_MiniTable *table, upb_MiniTable_Field *field, const upb_MiniTable *sub)
Definition: mini_table.c:1049
upb_Status
Definition: upb/upb/upb.h:52
data
char data[kBufferLength]
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:1006
kUpb_FieldModifier_IsRequired
@ kUpb_FieldModifier_IsRequired
Definition: mini_table.h:54
upb_MiniTable_FindFieldByNumber
const upb_MiniTable_Field * upb_MiniTable_FindFieldByNumber(const upb_MiniTable *table, uint32_t number)
Definition: mini_table.c:282
kUpb_MiniTablePlatform_32Bit
@ kUpb_MiniTablePlatform_32Bit
Definition: mini_table.h:114
field
const FieldDescriptor * field
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/parser_unittest.cc:2692
upb_MiniTablePlatform
upb_MiniTablePlatform
Definition: mini_table.h:113
kUpb_FieldModifier_IsProto3Singular
@ kUpb_FieldModifier_IsProto3Singular
Definition: mini_table.h:53
upb_ToBase92
char upb_ToBase92(int8_t ch)
Definition: mini_table.c:84
upb_MtDataEncoder_PutEnumValue
char * upb_MtDataEncoder_PutEnumValue(upb_MtDataEncoder *e, char *ptr, uint32_t val)
kUpb_MessageModifier_IsExtendable
@ kUpb_MessageModifier_IsExtendable
Definition: mini_table.h:46
kUpb_FieldModifier
kUpb_FieldModifier
Definition: mini_table.h:49
kUpb_FieldModifier_IsClosedEnum
@ kUpb_FieldModifier_IsClosedEnum
Definition: mini_table.h:52
upb_MtDataEncoder_PutOneofField
char * upb_MtDataEncoder_PutOneofField(upb_MtDataEncoder *e, char *ptr, uint32_t field_num)
Definition: mini_table.c:268
upb_MiniTable_BuildExtension
bool upb_MiniTable_BuildExtension(const char *data, size_t len, upb_MiniTable_Extension *ext, upb_MiniTable_Sub sub, upb_Status *status)
Definition: mini_table.c:1018
upb_MiniTable_BuildMapEntry
upb_MiniTable * upb_MiniTable_BuildMapEntry(upb_FieldType key_type, upb_FieldType value_type, bool value_is_proto3_enum, upb_MiniTablePlatform platform, upb_Arena *arena)
Definition: mini_table.c:928
table
uint8_t table[256]
Definition: hpack_parser.cc:456
int8_t
signed char int8_t
Definition: stdint-msvc2008.h:75
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
ch
char ch
Definition: bloaty/third_party/googletest/googlemock/test/gmock-matchers_test.cc:3621
len
int len
Definition: abseil-cpp/absl/base/internal/low_level_alloc_test.cc:46
kUpb_MessageModifier_ValidateUtf8
@ kUpb_MessageModifier_ValidateUtf8
Definition: mini_table.h:44
key_type
upb_fieldtype_t key_type
Definition: bloaty/third_party/protobuf/php/ext/google/protobuf/protobuf.h:1071
upb_MiniTable_SetSubEnum
void upb_MiniTable_SetSubEnum(upb_MiniTable *table, upb_MiniTable_Field *field, const upb_MiniTable_Enum *sub)
Definition: mini_table.c:1063
platform
Definition: test_arm_regression.c:18
msg_internal.h
upb_Arena
Definition: upb_internal.h:36


grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:29