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