summaryrefslogtreecommitdiff
path: root/cpp/src/slice2java/Gen.cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2003-03-17 22:22:36 +0000
committerMark Spruiell <mes@zeroc.com>2003-03-17 22:22:36 +0000
commitcd5ee8b44011ea32c30ada694fd64a83d7d5928b (patch)
tree3cae6b23d0ec9459e57b895681a6a36737fd91dd /cpp/src/slice2java/Gen.cpp
parentfixed fd leak in glacier (diff)
downloadice-cd5ee8b44011ea32c30ada694fd64a83d7d5928b.tar.bz2
ice-cd5ee8b44011ea32c30ada694fd64a83d7d5928b.tar.xz
ice-cd5ee8b44011ea32c30ada694fd64a83d7d5928b.zip
deep comparison of sequences
Diffstat (limited to 'cpp/src/slice2java/Gen.cpp')
-rw-r--r--cpp/src/slice2java/Gen.cpp26
1 files changed, 22 insertions, 4 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp
index 8f8fd12a662..56735833de5 100644
--- a/cpp/src/slice2java/Gen.cpp
+++ b/cpp/src/slice2java/Gen.cpp
@@ -1568,10 +1568,28 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p)
}
else
{
- out << nl << "if(!" << memberName << ".equals(_r." << memberName << "))";
- out << sb;
- out << nl << "return false;";
- out << eb;
+ //
+ // We treat sequences differently because the native equals() method for
+ // a Java array not perform a deep comparison, therefore we use the helper
+ // method java.util.Arrays.equals() instead.
+ //
+ // For all other types, we can use the native equals() method.
+ //
+ SequencePtr seq = SequencePtr::dynamicCast((*d)->type());
+ if(seq)
+ {
+ out << nl << "if(!java.util.Arrays.equals(" << memberName << ", _r." << memberName << "))";
+ out << sb;
+ out << nl << "return false;";
+ out << eb;
+ }
+ else
+ {
+ out << nl << "if(!" << memberName << ".equals(_r." << memberName << "))";
+ out << sb;
+ out << nl << "return false;";
+ out << eb;
+ }
}
}
out << sp << nl << "return true;";