Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-28 09:31:57

0001 // Protocol Buffers - Google's data interchange format
0002 // Copyright 2023 Google LLC.  All rights reserved.
0003 //
0004 // Use of this source code is governed by a BSD-style
0005 // license that can be found in the LICENSE file or at
0006 // https://developers.google.com/open-source/licenses/bsd
0007 
0008 #ifndef UPB_MINI_TABLE_DECODE_H_
0009 #define UPB_MINI_TABLE_DECODE_H_
0010 
0011 #include <stddef.h>
0012 
0013 #include "upb/base/status.h"
0014 #include "upb/mem/arena.h"
0015 #include "upb/mini_table/enum.h"
0016 #include "upb/mini_table/extension.h"
0017 #include "upb/mini_table/message.h"
0018 #include "upb/mini_table/sub.h"
0019 
0020 // Export the newer headers, for legacy users.  New users should include the
0021 // more specific headers directly.
0022 // IWYU pragma: begin_exports
0023 #include "upb/mini_descriptor/build_enum.h"
0024 #include "upb/mini_descriptor/link.h"
0025 // IWYU pragma: end_exports
0026 
0027 // Must be last.
0028 #include "upb/port/def.inc"
0029 
0030 typedef enum {
0031   kUpb_MiniTablePlatform_32Bit,
0032   kUpb_MiniTablePlatform_64Bit,
0033   kUpb_MiniTablePlatform_Native =
0034       UPB_SIZE(kUpb_MiniTablePlatform_32Bit, kUpb_MiniTablePlatform_64Bit),
0035 } upb_MiniTablePlatform;
0036 
0037 #ifdef __cplusplus
0038 extern "C" {
0039 #endif
0040 
0041 // Builds a mini table from the data encoded in the buffer [data, len]. If any
0042 // errors occur, returns NULL and sets a status message. In the success case,
0043 // the caller must call upb_MiniTable_SetSub*() for all message or proto2 enum
0044 // fields to link the table to the appropriate sub-tables.
0045 upb_MiniTable* _upb_MiniTable_Build(const char* data, size_t len,
0046                                     upb_MiniTablePlatform platform,
0047                                     upb_Arena* arena, upb_Status* status);
0048 
0049 UPB_API_INLINE upb_MiniTable* upb_MiniTable_Build(const char* data, size_t len,
0050                                                   upb_Arena* arena,
0051                                                   upb_Status* status) {
0052   return _upb_MiniTable_Build(data, len, kUpb_MiniTablePlatform_Native, arena,
0053                               status);
0054 }
0055 
0056 // Initializes a MiniTableExtension buffer that has already been allocated.
0057 // This is needed by upb_FileDef and upb_MessageDef, which allocate all of the
0058 // extensions together in a single contiguous array.
0059 const char* _upb_MiniTableExtension_Init(const char* data, size_t len,
0060                                          upb_MiniTableExtension* ext,
0061                                          const upb_MiniTable* extendee,
0062                                          upb_MiniTableSub sub,
0063                                          upb_MiniTablePlatform platform,
0064                                          upb_Status* status);
0065 
0066 UPB_API_INLINE const char* upb_MiniTableExtension_Init(
0067     const char* data, size_t len, upb_MiniTableExtension* ext,
0068     const upb_MiniTable* extendee, upb_MiniTableSub sub, upb_Status* status) {
0069   return _upb_MiniTableExtension_Init(data, len, ext, extendee, sub,
0070                                       kUpb_MiniTablePlatform_Native, status);
0071 }
0072 
0073 UPB_API upb_MiniTableExtension* _upb_MiniTableExtension_Build(
0074     const char* data, size_t len, const upb_MiniTable* extendee,
0075     upb_MiniTableSub sub, upb_MiniTablePlatform platform, upb_Arena* arena,
0076     upb_Status* status);
0077 
0078 UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_Build(
0079     const char* data, size_t len, const upb_MiniTable* extendee,
0080     upb_Arena* arena, upb_Status* status) {
0081   upb_MiniTableSub sub = upb_MiniTableSub_FromMessage(NULL);
0082   return _upb_MiniTableExtension_Build(
0083       data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
0084 }
0085 
0086 UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_BuildMessage(
0087     const char* data, size_t len, const upb_MiniTable* extendee,
0088     const upb_MiniTable* submsg, upb_Arena* arena, upb_Status* status) {
0089   upb_MiniTableSub sub = upb_MiniTableSub_FromMessage(submsg);
0090   return _upb_MiniTableExtension_Build(
0091       data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
0092 }
0093 
0094 UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_BuildEnum(
0095     const char* data, size_t len, const upb_MiniTable* extendee,
0096     const upb_MiniTableEnum* subenum, upb_Arena* arena, upb_Status* status) {
0097   upb_MiniTableSub sub = upb_MiniTableSub_FromEnum(subenum);
0098   return _upb_MiniTableExtension_Build(
0099       data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
0100 }
0101 
0102 // Like upb_MiniTable_Build(), but the user provides a buffer of layout data so
0103 // it can be reused from call to call, avoiding repeated
0104 // upb_grealloc()/upb_gfree().
0105 //
0106 // The caller owns `*buf` both before and after the call, and must upb_gfree()
0107 // it when it is no longer in use.  The function will upb_grealloc() `*buf` as
0108 // necessary, updating `*size` accordingly.
0109 upb_MiniTable* upb_MiniTable_BuildWithBuf(const char* data, size_t len,
0110                                           upb_MiniTablePlatform platform,
0111                                           upb_Arena* arena, void** buf,
0112                                           size_t* buf_size, upb_Status* status);
0113 
0114 #ifdef __cplusplus
0115 } /* extern "C" */
0116 #endif
0117 
0118 #include "upb/port/undef.inc"
0119 
0120 #endif /* UPB_MINI_TABLE_DECODE_H_ */