diff options
author | Joshua Haberman <joshua@reverberate.org> | 2009-07-21 10:41:40 -0700 |
---|---|---|
committer | Joshua Haberman <joshua@reverberate.org> | 2009-07-21 10:41:40 -0700 |
commit | d7632d271cfda0d001d4373dd9884d21720d2f36 (patch) | |
tree | 5e6cdc015a25fa03947fa5f713b42f571433de41 | |
parent | cbc05553c974af3774222c92844bd62c88e7f8ae (diff) |
Pass pointer to tag instead of by value.
-rw-r--r-- | src/upb_msg.c | 6 | ||||
-rw-r--r-- | src/upb_parse.h | 10 |
2 files changed, 6 insertions, 10 deletions
diff --git a/src/upb_msg.c b/src/upb_msg.c index a923bb8..5d36c01 100644 --- a/src/upb_msg.c +++ b/src/upb_msg.c @@ -247,12 +247,12 @@ void upb_msg_reuse_submsg(void **msg, struct upb_msg *m) /* Serialization/Deserialization. ********************************************/ -static upb_field_type_t tag_cb(void *udata, struct upb_tag tag, +static upb_field_type_t tag_cb(void *udata, struct upb_tag *tag, void **user_field_desc) { struct upb_msg_parse_state *s = udata; - struct upb_msg_field *f = upb_msg_fieldbynum(s->top->m, tag.field_number); - if(!f || !upb_check_type(tag.wire_type, f->type)) + struct upb_msg_field *f = upb_msg_fieldbynum(s->top->m, tag->field_number); + if(!f || !upb_check_type(tag->wire_type, f->type)) return 0; /* Skip unknown or fields of the wrong type. */ *user_field_desc = f; return f->type; diff --git a/src/upb_parse.h b/src/upb_parse.h index 8975052..0a290a4 100644 --- a/src/upb_parse.h +++ b/src/upb_parse.h @@ -87,7 +87,7 @@ void upb_parse_free(struct upb_parse_state *state); * skipping all submessages, in the case of a submessage), the callback should * return zero. */ typedef upb_field_type_t (*upb_tag_cb)(void *udata, - struct upb_tag tag, + struct upb_tag *tag, void **user_field_desc); /* The callback that is called when a regular value (ie. not a string or @@ -133,13 +133,9 @@ upb_status_t upb_parse(struct upb_parse_state *s, void *buf, size_t len, extern upb_wire_type_t upb_expected_wire_types[]; /* Returns true if wt is the correct on-the-wire type for ft. */ INLINE bool upb_check_type(upb_wire_type_t wt, upb_field_type_t ft) { - if(ft == 10) { // GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_GROUP) - return wt == UPB_WIRE_TYPE_START_GROUP; - } else { /* With packed arrays, anything can be delimited (except groups). */ - return wt == UPB_WIRE_TYPE_DELIMITED || - upb_type_info[ft].expected_wire_type == wt; - } + return (wt == UPB_WIRE_TYPE_DELIMITED) || upb_type_info[ft].expected_wire_type == wt; + ; // && ft != GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_GROUP ); } /* Data-consuming functions (to be called from value cb). *********************/ |