Author: bryanduxbury
Date: Thu Jan 29 05:47:21 2009
New Revision: 738765
URL: http://svn.apache.org/viewvc?rev=738765&view=rev
Log:
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.
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=738765&r1=738764&r2=738765&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 Thu
Jan 29 05:47:21 2009
@@ -2467,10 +2467,11 @@
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 @@
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, "");
}