From 1b9b6bd1ad2d862a7df86096e96991135f0fb92c Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Thu, 22 Dec 2011 12:15:45 -0800 Subject: Fixed the open-source build. --- benchmarks/parsetoproto2.upb.cc | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) (limited to 'benchmarks/parsetoproto2.upb.cc') diff --git a/benchmarks/parsetoproto2.upb.cc b/benchmarks/parsetoproto2.upb.cc index 75cd10c..988faad 100644 --- a/benchmarks/parsetoproto2.upb.cc +++ b/benchmarks/parsetoproto2.upb.cc @@ -30,6 +30,8 @@ MESSAGE_CIDENT msg2; static upb_stringsrc strsrc; static upb_decoder d; static const upb_msgdef *def; +static upb_decoderplan *p; +char *str; #define PROTO2_APPEND(type, ctype) \ upb_flow_t proto2_append_ ## type(void *_r, upb_value fval, upb_value val) { \ @@ -53,9 +55,13 @@ upb_flow_t proto2_setstr(void *m, upb_value fval, upb_value val) { const upb_fielddef *f = upb_value_getfielddef(fval); std::string **str = (std::string**)UPB_INDEX(m, f->offset, 1); if (*str == f->default_ptr) *str = new std::string; - const upb_strref *ref = upb_value_getstrref(val); + const upb_byteregion *reg = upb_value_getbyteregion(val); + size_t len; + (*str)->assign( + upb_byteregion_getptr(reg, upb_byteregion_startofs(reg), &len), + upb_byteregion_len(reg)); // XXX: only supports contiguous strings atm. - (*str)->assign(ref->ptr, ref->len); + assert(len == upb_byteregion_len(reg)); return UPB_CONTINUE; } @@ -64,9 +70,13 @@ upb_flow_t proto2_append_str(void *_r, upb_value fval, upb_value val) { typedef google::protobuf::RepeatedPtrField R; (void)fval; R *r = (R*)_r; - const upb_strref *ref = upb_value_getstrref(val); + const upb_byteregion *reg = upb_value_getbyteregion(val); + size_t len; + r->Add()->assign( + upb_byteregion_getptr(reg, upb_byteregion_startofs(reg), &len), + upb_byteregion_len(reg)); // XXX: only supports contiguous strings atm. - r->Add()->assign(ref->ptr, ref->len); + assert(len == upb_byteregion_len(reg)); return UPB_CONTINUE; } @@ -265,7 +275,7 @@ static bool initialize() upb_symtab_unref(s); // Read the message data itself. - char *str = upb_readfile(MESSAGE_FILE, &len); + str = upb_readfile(MESSAGE_FILE, &len); if(str == NULL) { fprintf(stderr, "Error reading " MESSAGE_FILE "\n"); return false; @@ -275,11 +285,11 @@ static bool initialize() msg2.ParseFromArray(str, len); upb_stringsrc_init(&strsrc); - upb_stringsrc_reset(&strsrc, str, len); upb_handlers *h = upb_handlers_new(); upb_accessors_reghandlers(h, def); - if (!JIT) h->should_jit = false; - upb_decoder_init(&d, h); + p = upb_decoderplan_new(h, JIT); + upb_decoder_init(&d); + upb_decoder_resetplan(&d, p, 0); upb_handlers_unref(h); return true; @@ -289,6 +299,8 @@ static void cleanup() { upb_stringsrc_uninit(&strsrc); upb_decoder_uninit(&d); upb_def_unref(UPB_UPCAST(def)); + upb_decoderplan_unref(p); + free(str); } static size_t run(int i) @@ -296,10 +308,10 @@ static size_t run(int i) (void)i; upb_status status = UPB_STATUS_INIT; msg[i % NUM_MESSAGES].Clear(); - upb_decoder_reset(&d, upb_stringsrc_bytesrc(&strsrc), - 0, UPB_NONDELIMITED, &msg[i % NUM_MESSAGES]); - upb_decoder_decode(&d, &status); - if(!upb_ok(&status)) goto err; + upb_stringsrc_reset(&strsrc, str, len); + upb_decoder_resetinput( + &d, upb_stringsrc_allbytes(&strsrc), &msg[i % NUM_MESSAGES]); + if (upb_decoder_decode(&d) != UPB_OK) goto err; return len; err: -- cgit v1.2.3