WPILibC++ 2027.0.0-alpha-3
Loading...
Searching...
No Matches
decode.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_MINI_TABLE_DECODE_H_
9#define UPB_MINI_TABLE_DECODE_H_
10
11#include <stddef.h>
12
13#include "upb/base/status.h"
14#include "upb/mem/arena.h"
15#include "upb/mini_table/enum.h"
18#include "upb/mini_table/sub.h"
19
20// Export the newer headers, for legacy users. New users should include the
21// more specific headers directly.
22// IWYU pragma: begin_exports
25// IWYU pragma: end_exports
26
27// Must be last.
28#include "upb/port/def.inc"
29
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41// Builds a mini table from the data encoded in the buffer [data, len]. If any
42// errors occur, returns NULL and sets a status message. In the success case,
43// the caller must call upb_MiniTable_SetSub*() for all message or proto2 enum
44// fields to link the table to the appropriate sub-tables.
45upb_MiniTable* _upb_MiniTable_Build(const char* data, size_t len,
46 upb_MiniTablePlatform platform,
47 upb_Arena* arena, upb_Status* status);
48
49UPB_API_INLINE upb_MiniTable* upb_MiniTable_Build(const char* data, size_t len,
50 upb_Arena* arena,
51 upb_Status* status) {
53 status);
54}
55
56// Initializes a MiniTableExtension buffer that has already been allocated.
57// This is needed by upb_FileDef and upb_MessageDef, which allocate all of the
58// extensions together in a single contiguous array.
59const char* _upb_MiniTableExtension_Init(const char* data, size_t len,
61 const upb_MiniTable* extendee,
63 upb_MiniTablePlatform platform,
64 upb_Status* status);
65
67 const char* data, size_t len, upb_MiniTableExtension* ext,
68 const upb_MiniTable* extendee, upb_MiniTableSub sub, upb_Status* status) {
69 return _upb_MiniTableExtension_Init(data, len, ext, extendee, sub,
71}
72
74 const char* data, size_t len, const upb_MiniTable* extendee,
76 upb_Status* status);
77
79 const char* data, size_t len, const upb_MiniTable* extendee,
80 upb_Arena* arena, upb_Status* status) {
83 data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
84}
85
87 const char* data, size_t len, const upb_MiniTable* extendee,
88 const upb_MiniTable* submsg, upb_Arena* arena, upb_Status* status) {
91 data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
92}
93
95 const char* data, size_t len, const upb_MiniTable* extendee,
96 const upb_MiniTableEnum* subenum, upb_Arena* arena, upb_Status* status) {
99 data, len, extendee, sub, kUpb_MiniTablePlatform_Native, arena, status);
100}
101
102// Like upb_MiniTable_Build(), but the user provides a buffer of layout data so
103// it can be reused from call to call, avoiding repeated
104// upb_grealloc()/upb_gfree().
105//
106// The caller owns `*buf` both before and after the call, and must upb_gfree()
107// it when it is no longer in use. The function will upb_grealloc() `*buf` as
108// necessary, updating `*size` accordingly.
109upb_MiniTable* upb_MiniTable_BuildWithBuf(const char* data, size_t len,
110 upb_MiniTablePlatform platform,
111 upb_Arena* arena, void** buf,
112 size_t* buf_size, upb_Status* status);
113
114#ifdef __cplusplus
115} /* extern "C" */
116#endif
117
118#include "upb/port/undef.inc"
119
120#endif /* UPB_MINI_TABLE_DECODE_H_ */
#define UPB_API_INLINE
Definition def.inc:163
#define UPB_SIZE(size32, size64)
Definition def.inc:112
#define UPB_API
Definition def.inc:162
UPB_API_INLINE upb_MiniTableExtension * upb_MiniTableExtension_BuildEnum(const char *data, size_t len, const upb_MiniTable *extendee, const upb_MiniTableEnum *subenum, upb_Arena *arena, upb_Status *status)
Definition decode.h:94
UPB_API upb_MiniTableExtension * _upb_MiniTableExtension_Build(const char *data, size_t len, const upb_MiniTable *extendee, upb_MiniTableSub sub, upb_MiniTablePlatform platform, upb_Arena *arena, upb_Status *status)
upb_MiniTable * _upb_MiniTable_Build(const char *data, size_t len, upb_MiniTablePlatform platform, upb_Arena *arena, upb_Status *status)
UPB_API_INLINE upb_MiniTable * upb_MiniTable_Build(const char *data, size_t len, upb_Arena *arena, upb_Status *status)
Definition decode.h:49
UPB_API_INLINE upb_MiniTableExtension * upb_MiniTableExtension_Build(const char *data, size_t len, const upb_MiniTable *extendee, upb_Arena *arena, upb_Status *status)
Definition decode.h:78
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)
const char * _upb_MiniTableExtension_Init(const char *data, size_t len, upb_MiniTableExtension *ext, const upb_MiniTable *extendee, upb_MiniTableSub sub, upb_MiniTablePlatform platform, upb_Status *status)
UPB_API_INLINE const char * upb_MiniTableExtension_Init(const char *data, size_t len, upb_MiniTableExtension *ext, const upb_MiniTable *extendee, upb_MiniTableSub sub, upb_Status *status)
Definition decode.h:66
UPB_API_INLINE upb_MiniTableExtension * upb_MiniTableExtension_BuildMessage(const char *data, size_t len, const upb_MiniTable *extendee, const upb_MiniTable *submsg, upb_Arena *arena, upb_Status *status)
Definition decode.h:86
upb_MiniTablePlatform
Definition decode.h:30
@ kUpb_MiniTablePlatform_Native
Definition decode.h:33
@ kUpb_MiniTablePlatform_32Bit
Definition decode.h:31
@ kUpb_MiniTablePlatform_64Bit
Definition decode.h:32
Definition arena.h:29
Definition enum.h:16
Definition extension.h:21
Definition message.h:54
Definition status.h:18
UPB_API_INLINE upb_MiniTableSub upb_MiniTableSub_FromEnum(const upb_MiniTableEnum *subenum)
UPB_API_INLINE upb_MiniTableSub upb_MiniTableSub_FromMessage(const upb_MiniTable *submsg)
Definition sub.h:19