xref: /aosp_15_r20/external/nanopb-c/pb_common.h (revision c8d645cafcee3f91213d30caa0fe303887010b9b)
1*c8d645caSAndroid Build Coastguard Worker /* pb_common.h: Common support functions for pb_encode.c and pb_decode.c.
2*c8d645caSAndroid Build Coastguard Worker  * These functions are rarely needed by applications directly.
3*c8d645caSAndroid Build Coastguard Worker  */
4*c8d645caSAndroid Build Coastguard Worker 
5*c8d645caSAndroid Build Coastguard Worker #ifndef PB_COMMON_H_INCLUDED
6*c8d645caSAndroid Build Coastguard Worker #define PB_COMMON_H_INCLUDED
7*c8d645caSAndroid Build Coastguard Worker 
8*c8d645caSAndroid Build Coastguard Worker #include "pb.h"
9*c8d645caSAndroid Build Coastguard Worker 
10*c8d645caSAndroid Build Coastguard Worker #ifdef __cplusplus
11*c8d645caSAndroid Build Coastguard Worker extern "C" {
12*c8d645caSAndroid Build Coastguard Worker #endif
13*c8d645caSAndroid Build Coastguard Worker 
14*c8d645caSAndroid Build Coastguard Worker /* Iterator for pb_field_t list */
15*c8d645caSAndroid Build Coastguard Worker struct pb_field_iter_s {
16*c8d645caSAndroid Build Coastguard Worker     const pb_field_t *start;       /* Start of the pb_field_t array */
17*c8d645caSAndroid Build Coastguard Worker     const pb_field_t *pos;         /* Current position of the iterator */
18*c8d645caSAndroid Build Coastguard Worker     unsigned required_field_index; /* Zero-based index that counts only the required fields */
19*c8d645caSAndroid Build Coastguard Worker     void *dest_struct;             /* Pointer to start of the structure */
20*c8d645caSAndroid Build Coastguard Worker     void *pData;                   /* Pointer to current field value */
21*c8d645caSAndroid Build Coastguard Worker     void *pSize;                   /* Pointer to count/has field */
22*c8d645caSAndroid Build Coastguard Worker };
23*c8d645caSAndroid Build Coastguard Worker typedef struct pb_field_iter_s pb_field_iter_t;
24*c8d645caSAndroid Build Coastguard Worker 
25*c8d645caSAndroid Build Coastguard Worker /* Initialize the field iterator structure to beginning.
26*c8d645caSAndroid Build Coastguard Worker  * Returns false if the message type is empty. */
27*c8d645caSAndroid Build Coastguard Worker bool pb_field_iter_begin(pb_field_iter_t *iter, const pb_field_t *fields, void *dest_struct);
28*c8d645caSAndroid Build Coastguard Worker 
29*c8d645caSAndroid Build Coastguard Worker /* Advance the iterator to the next field.
30*c8d645caSAndroid Build Coastguard Worker  * Returns false when the iterator wraps back to the first field. */
31*c8d645caSAndroid Build Coastguard Worker bool pb_field_iter_next(pb_field_iter_t *iter);
32*c8d645caSAndroid Build Coastguard Worker 
33*c8d645caSAndroid Build Coastguard Worker /* Advance the iterator until it points at a field with the given tag.
34*c8d645caSAndroid Build Coastguard Worker  * Returns false if no such field exists. */
35*c8d645caSAndroid Build Coastguard Worker bool pb_field_iter_find(pb_field_iter_t *iter, uint32_t tag);
36*c8d645caSAndroid Build Coastguard Worker 
37*c8d645caSAndroid Build Coastguard Worker #ifdef __cplusplus
38*c8d645caSAndroid Build Coastguard Worker } /* extern "C" */
39*c8d645caSAndroid Build Coastguard Worker #endif
40*c8d645caSAndroid Build Coastguard Worker 
41*c8d645caSAndroid Build Coastguard Worker #endif
42*c8d645caSAndroid Build Coastguard Worker 
43