From cd5ee8b44011ea32c30ada694fd64a83d7d5928b Mon Sep 17 00:00:00 2001 From: Mark Spruiell Date: Mon, 17 Mar 2003 22:22:36 +0000 Subject: deep comparison of sequences --- cpp/src/slice2java/Gen.cpp | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'cpp/src/slice2java/Gen.cpp') 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;"; -- cgit v1.2.3