From: Bryan Duxbury Date: Thu, 29 Jan 2009 05:47:21 +0000 (+0000) Subject: THRIFT-288. java: Generated code iterates maps during write inefficiently X-Git-Tag: 0.2.0~358 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=9f427ee0e14fbc3a1e3c91a9f423bcbd8648e407;p=common%2Fthrift.git THRIFT-288. java: Generated code iterates maps during write inefficiently Newly generated code will now use entrySet instead of keySet when serializing maps. Existing generated classes does not need to be regenerated, though they won't reap the performance improvements unless they do. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@738765 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc index e99583a0..81fb5906 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -2467,10 +2467,11 @@ void t_java_generator::generate_serialize_container(ofstream& out, string iter = tmp("_iter"); if (ttype->is_map()) { indent(out) << - "for (" << - type_name(((t_map*)ttype)->get_key_type()) << " " << iter << + "for (Map.Entry<" << + type_name(((t_map*)ttype)->get_key_type(), true, false) << ", " << + type_name(((t_map*)ttype)->get_val_type(), true, false) << "> " << iter << " : " << - prefix << ".keySet())"; + prefix << ".entrySet())"; } else if (ttype->is_set()) { indent(out) << "for (" << @@ -2518,9 +2519,9 @@ void t_java_generator::generate_serialize_map_element(ofstream& out, t_map* tmap, string iter, string map) { - t_field kfield(tmap->get_key_type(), iter); + t_field kfield(tmap->get_key_type(), iter + ".getKey()"); generate_serialize_field(out, &kfield, ""); - t_field vfield(tmap->get_val_type(), map + ".get(" + iter + ")"); + t_field vfield(tmap->get_val_type(), iter + ".getValue()"); generate_serialize_field(out, &vfield, ""); }