bool UserTypeFieldIterator::next() { if (next_ == end_) { return false; } current_ = next_++; position_ = decode_field(position_); return true; }
/* Default handler for extension fields. Expects a pb_field_t structure * in extension->type->arg. */ static bool checkreturn default_extension_decoder(pb_istream_t *stream, pb_extension_t *extension, uint32_t tag, pb_wire_type_t wire_type) { const pb_field_t *field = (const pb_field_t*)extension->type->arg; pb_field_iterator_t iter; bool dummy; if (field->tag != tag) return true; iter.start = field; iter.pos = field; iter.field_index = 0; iter.required_field_index = 0; iter.dest_struct = extension->dest; iter.pData = extension->dest; iter.pSize = &dummy; return decode_field(stream, wire_type, &iter); }
bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) { uint8_t fields_seen[(PB_MAX_REQUIRED_FIELDS + 7) / 8] = {0}; /* Used to check for required fields */ pb_field_iterator_t iter; pb_field_init(&iter, fields, dest_struct); while (stream->bytes_left) { uint32_t tag; pb_wire_type_t wire_type; bool eof; if (!pb_decode_tag(stream, &wire_type, &tag, &eof)) { if (eof) break; else return false; } if (!pb_field_find(&iter, tag)) { /* No match found, skip data */ if (!pb_skip_field(stream, wire_type)) return false; continue; } if (PB_HTYPE(iter.current->type) == PB_HTYPE_REQUIRED && iter.required_field_index < PB_MAX_REQUIRED_FIELDS) { fields_seen[iter.required_field_index >> 3] |= (uint8_t)(1 << (iter.required_field_index & 7)); } if (!decode_field(stream, wire_type, &iter)) return false; }
bool perf_object_t::decode(const xml_element_t& xml_val) { do { if (!decode_field(xml_val, "bool_val", bool_val, __xml_has_bool_val)) break; if (!decode_field(xml_val, "int8_val", int8_val, __xml_has_int8_val)) break; if (!decode_field(xml_val, "uint8_val", uint8_val, __xml_has_uint8_val)) break; if (!decode_field(xml_val, "int16_val", int16_val, __xml_has_int16_val)) break; if (!decode_field(xml_val, "uint16_val", uint16_val, __xml_has_uint16_val)) break; if (!decode_field(xml_val, "int32_val", int32_val, __xml_has_int32_val)) break; if (!decode_field(xml_val, "uint32_val", uint32_val, __xml_has_uint32_val)) break; if (!decode_field(xml_val, "int64_val", int64_val, __xml_has_int64_val)) break; if (!decode_field(xml_val, "uint64_val", uint64_val, __xml_has_uint64_val)) break; if (!decode_field(xml_val, "float_val", float_val, __xml_has_float_val)) break; if (!decode_field(xml_val, "double_val", double_val, __xml_has_double_val)) break; if (!decode_field(xml_val, "str_val", str_val, __xml_has_str_val)) break; if (!decode_field(xml_val, "vec_val", vec_val, __xml_has_vec_val)) break; if (!decode_field(xml_val, "dict_val", dict_val, __xml_has_dict_val)) break; return true; } while (0); return false; }
bool sample_struct_t::decode(const xml_element_t& xml_val) { do { if (!decode_field(xml_val, "bool_val", bool_val, __xml_has_bool_val)) break; if (!decode_field(xml_val, "str_val", str_val, __xml_has_str_val)) break; if (!decode_field(xml_val, "int_val", int_val, __xml_has_int_val)) break; if (!decode_field(xml_val, "uint_val", uint_val, __xml_has_uint_val)) break; if (!decode_field(xml_val, "double_val", double_val, __xml_has_double_val)) break; if (!decode_field(xml_val, "char_val", char_val, __xml_has_char_val)) break; if (!decode_field(xml_val, "uchar_val", uchar_val, __xml_has_uchar_val)) break; if (!decode_field(xml_val, "short_val", short_val, __xml_has_short_val)) break; if (!decode_field(xml_val, "ushort_val", ushort_val, __xml_has_ushort_val)) break; if (!decode_field(xml_val, "int64_val", int64_val, __xml_has_int64_val)) break; if (!decode_field(xml_val, "uint64_val", uint64_val, __xml_has_uint64_val)) break; if (!decode_field(xml_val, "float_val", float_val, __xml_has_float_val)) break; if (!decode_field(xml_val, "vec_val", vec_val, __xml_has_vec_val)) break; if (!decode_field(xml_val, "str_map_val", str_map_val, __xml_has_str_map_val)) break; return true; } while (0); return false; }
bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) { uint8_t fields_seen[(PB_MAX_REQUIRED_FIELDS + 7) / 8] = {0}; /* Used to check for required fields */ uint32_t extension_range_start = 0; pb_field_iterator_t iter; pb_field_init(&iter, fields, dest_struct); while (stream->bytes_left) { uint32_t tag; pb_wire_type_t wire_type; bool eof; if (!pb_decode_tag(stream, &wire_type, &tag, &eof)) { if (eof) break; else return false; } if (!pb_field_find(&iter, tag)) { /* No match found, check if it matches an extension. */ if (tag >= extension_range_start) { if (!find_extension_field(&iter)) extension_range_start = (uint32_t)-1; else extension_range_start = iter.pos->tag; if (tag >= extension_range_start) { size_t pos = stream->bytes_left; if (!decode_extension(stream, tag, wire_type, &iter)) return false; if (pos != stream->bytes_left) { /* The field was handled */ continue; } } } /* No match found, skip data */ if (!pb_skip_field(stream, wire_type)) return false; continue; } if (PB_HTYPE(iter.pos->type) == PB_HTYPE_REQUIRED && iter.required_field_index < PB_MAX_REQUIRED_FIELDS) { fields_seen[iter.required_field_index >> 3] |= (uint8_t)(1 << (iter.required_field_index & 7)); } if (!decode_field(stream, wire_type, &iter)) return false; }