Author: bryanduxbury
Date: Fri Jan 15 17:20:04 2010
New Revision: 899721
URL: http://svn.apache.org/viewvc?rev=899721&view=rev
Log:
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.
Modified:
incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
Modified: incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc?rev=899721&r1=899720&r2=899721&view=diff
==============================================================================
--- incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
(original)
+++ incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc Fri
Jan 15 17:20:04 2010
@@ -1418,20 +1418,14 @@
"}" << 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 @@
indent_down();
}
+ indent(out) << "default:" << endl;
+ indent(out) << " TProtocolUtil.skip(iprot, field.type);" << endl;
+
indent_down();
indent(out) << "}" << endl;
@@ -1455,8 +1452,6 @@
indent(out) <<
"iprot.readFieldEnd();" << endl;
- scope_down(out);
-
indent_down();
indent(out) << "}" << endl;