From c7ee14f8ef38a8bc90c0f1db1ad47b2e06612fa3 Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Wed, 8 Jul 2009 11:44:54 -0700 Subject: Moved bounds check to the end of the loop to increase performance. --- upb_parse.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'upb_parse.c') diff --git a/upb_parse.c b/upb_parse.c index 3818929..3a011a6 100644 --- a/upb_parse.c +++ b/upb_parse.c @@ -359,11 +359,6 @@ upb_status_t upb_parse(struct upb_parse_state *restrict s, void *buf, size_t len void *end = (char*)buf + len; *read = 0; while(buf < end) { - while(s->offset >= s->top->end_offset) { - if(s->offset != s->top->end_offset) return UPB_ERROR_BAD_SUBMESSAGE_END; - pop_stack_frame(s); - } - struct upb_tag tag; void *bufstart = buf; UPB_CHECK(parse_tag(&buf, end, &tag)); @@ -379,6 +374,10 @@ upb_status_t upb_parse(struct upb_parse_state *restrict s, void *buf, size_t len size_t bytes_read = ((char*)buf - (char*)bufstart); *read += bytes_read; s->offset += bytes_read; + while(s->offset >= s->top->end_offset) { + if(s->offset != s->top->end_offset) return UPB_ERROR_BAD_SUBMESSAGE_END; + pop_stack_frame(s); + } } return UPB_STATUS_OK; } -- cgit v1.2.3