From 9f427ee0e14fbc3a1e3c91a9f423bcbd8648e407 Mon Sep 17 00:00:00 2001 From: Bryan Duxbury Date: Thu, 29 Jan 2009 05:47:21 +0000 Subject: [PATCH] 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 --- compiler/cpp/src/generate/t_java_generator.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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, ""); } -- 2.17.1