summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan Duxbury <bryanduxbury@apache.org>2010-04-04 04:01:07 +0000
committerBryan Duxbury <bryanduxbury@apache.org>2010-04-04 04:01:07 +0000
commit49b38015a672613c83d7c7a2954a9eb331b59a5a (patch)
tree5c6fbba94a265656e4774a8f8fb03dada53c76bf
parentb1f7f7973bed233ec6f21807dfd774f7b600c5ec (diff)
downloadthrift-49b38015a672613c83d7c7a2954a9eb331b59a5a.tar.gz
THRIFT-753. java: Don't look up TFieldIdEnum values with a map
Instead of using a generated map, use a big switch statement. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@930618 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--compiler/cpp/src/generate/t_java_generator.cc19
1 files changed, 16 insertions, 3 deletions
diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc
index 5c38c5da7..cda350374 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -3566,13 +3566,11 @@ void t_java_generator::generate_field_name_constants(ofstream& out, t_struct* ts
out << ";" << endl << endl;
- indent(out) << "private static final Map<Integer, _Fields> byId = new HashMap<Integer, _Fields>();" << endl;
indent(out) << "private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();" << endl;
out << endl;
indent(out) << "static {" << endl;
indent(out) << " for (_Fields field : EnumSet.allOf(_Fields.class)) {" << endl;
- indent(out) << " byId.put((int)field._thriftId, field);" << endl;
indent(out) << " byName.put(field.getFieldName(), field);" << endl;
indent(out) << " }" << endl;
indent(out) << "}" << endl << endl;
@@ -3581,7 +3579,22 @@ void t_java_generator::generate_field_name_constants(ofstream& out, t_struct* ts
indent(out) << " * Find the _Fields constant that matches fieldId, or null if its not found." << endl;
indent(out) << " */" << endl;
indent(out) << "public static _Fields findByThriftId(int fieldId) {" << endl;
- indent(out) << " return byId.get(fieldId);" << endl;
+ indent_up();
+ indent(out) << "switch(fieldId) {" << endl;
+ indent_up();
+
+ for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
+ indent(out) << "case " << (*m_iter)->get_key() << ": // " << constant_name((*m_iter)->get_name()) << endl;
+ indent(out) << " return " << constant_name((*m_iter)->get_name()) << ";" << endl;
+ }
+
+ indent(out) << "default:" << endl;
+ indent(out) << " return null;" << endl;
+
+ indent_down();
+ indent(out) << "}" << endl;
+
+ indent_down();
indent(out) << "}" << endl << endl;
indent(out) << "/**" << endl;