From 55b38bc3af3bca57d3def1e7863bb0f327a72dbc Mon Sep 17 00:00:00 2001 From: Bryan Duxbury Date: Fri, 15 Jan 2010 17:20:04 +0000 Subject: [PATCH] THRIFT-674. java: Generated read() should just switch directly on field.id This patch gets rid of an unnecessary map lookup and null check in generated structs' read method, amounting a noticeable performance improvement. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@899721 13f79535-47bb-0310-9956-ffa450edef68 --- compiler/cpp/src/generate/t_java_generator.cc | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc index 28406d97..e2da8771 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -1418,20 +1418,14 @@ void t_java_generator::generate_java_struct_reader(ofstream& out, "}" << endl; // Switch statement on the field we are reading - indent(out) << "_Fields fieldId = _Fields.findByThriftId(field.id);" << endl; - indent(out) << "if (fieldId == null) {" << endl; - indent(out) << " TProtocolUtil.skip(iprot, field.type);" << endl; - indent(out) << "} else {" << endl; - indent_up(); - - indent(out) << "switch (fieldId) {" << endl; + indent(out) << "switch (field.id) {" << endl; indent_up(); // Generate deserialization code for known cases for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) { indent(out) << - "case " << constant_name((*f_iter)->get_name()) << ":" << endl; + "case " << (*f_iter)->get_key() << ": // " << constant_name((*f_iter)->get_name()) << endl; indent_up(); indent(out) << "if (field.type == " << type_to_enum((*f_iter)->get_type()) << ") {" << endl; @@ -1448,6 +1442,9 @@ void t_java_generator::generate_java_struct_reader(ofstream& out, indent_down(); } + indent(out) << "default:" << endl; + indent(out) << " TProtocolUtil.skip(iprot, field.type);" << endl; + indent_down(); indent(out) << "}" << endl; @@ -1455,8 +1452,6 @@ void t_java_generator::generate_java_struct_reader(ofstream& out, indent(out) << "iprot.readFieldEnd();" << endl; - scope_down(out); - indent_down(); indent(out) << "}" << endl; -- 2.17.1