Return-Path: X-Original-To: apmail-flink-commits-archive@minotaur.apache.org Delivered-To: apmail-flink-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id DA5BE119B0 for ; Wed, 25 Jun 2014 09:57:02 +0000 (UTC) Received: (qmail 98977 invoked by uid 500); 25 Jun 2014 09:57:02 -0000 Delivered-To: apmail-flink-commits-archive@flink.apache.org Received: (qmail 98960 invoked by uid 500); 25 Jun 2014 09:57:02 -0000 Mailing-List: contact commits-help@flink.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@flink.incubator.apache.org Delivered-To: mailing list commits@flink.incubator.apache.org Received: (qmail 98951 invoked by uid 99); 25 Jun 2014 09:57:02 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 25 Jun 2014 09:57:02 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,T_RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO mail.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with SMTP; Wed, 25 Jun 2014 09:57:01 +0000 Received: (qmail 98281 invoked by uid 99); 25 Jun 2014 09:56:41 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 25 Jun 2014 09:56:41 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id E6C2B93A1CA; Wed, 25 Jun 2014 09:56:40 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: uce@apache.org To: commits@flink.incubator.apache.org Date: Wed, 25 Jun 2014 09:56:40 -0000 Message-Id: <6c1e0ceaff9f468fa52e8c94ba8cc76f@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [1/2] [FLINK-926] Add shallow copy, deep equality, and hashCode to Tuple classes X-Virus-Checked: Checked by ClamAV on apache.org Repository: incubator-flink Updated Branches: refs/heads/master 28863ee08 -> 96e76a584 http://git-wip-us.apache.org/repos/asf/incubator-flink/blob/96e76a58/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/TupleGenerator.java ---------------------------------------------------------------------- diff --git a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/TupleGenerator.java b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/TupleGenerator.java index fa11812..08e5cd3 100644 --- a/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/TupleGenerator.java +++ b/stratosphere-java/src/main/java/eu/stratosphere/api/java/tuple/TupleGenerator.java @@ -28,6 +28,7 @@ import com.google.common.io.Files; class TupleGenerator { // Parameters for tuple classes + private static final String ROOT_DIRECTORY = "./src/main/java"; private static final String PACKAGE = "eu.stratosphere.api.java.tuple"; @@ -498,7 +499,7 @@ class TupleGenerator { for (int i = FIRST; i <= LAST; i++) { File tupleFile = new File(dir, "Tuple" + i + ".java"); - PrintWriter writer = new PrintWriter(tupleFile); + PrintWriter writer = new PrintWriter(tupleFile); writeTupleClass(writer, i); writer.flush(); writer.close(); @@ -579,6 +580,7 @@ class TupleGenerator { w.println("\t}"); w.println(); + // arity accessor w.println("\t@Override"); w.println("\tpublic int getArity() { return " + numFields + "; }"); @@ -634,7 +636,7 @@ class TupleGenerator { w.println("\t}"); w.println(); - // standard utilities (toString, equals, hashCode) + // standard utilities (toString, equals, hashCode, copy) w.println(); w.println("\t// -------------------------------------------------------------------------------------------------"); w.println("\t// standard utilities"); @@ -659,6 +661,72 @@ class TupleGenerator { w.println("\t\t\t+ \")\";"); w.println("\t}"); + + + + w.println(); + w.println("\t/**"); + w.println("\t * Deep equality for tuples by calling equals() on the tuple members"); + w.println("\t * @param o the object checked for equality"); + w.println("\t * @return true if this is equal to o."); + w.println("\t */"); + w.println("\t@Override"); + w.println("\tpublic boolean equals(Object o) {"); + w.println("\t\tif(this == o) { return true; }"); + w.println("\t\tif (!(o instanceof " + className + ")) { return false; }"); + w.println("\t\t" + className + " tuple = (" + className + ") o;"); + for (int i = 0; i < numFields; i++) { + String field = "f" + i; + w.println("\t\tif (" + field + " != null ? !" + field +".equals(tuple." + + field + ") : tuple." + field + " != null) { return false; }"); + } + w.println("\t\treturn true;"); + w.println("\t}"); + + w.println(); + w.println("\t@Override"); + w.println("\tpublic int hashCode() {"); + w.println("\t\tint result = f0 != null ? f0.hashCode() : 0;"); + for (int i = 1; i < numFields; i++) { + String field = "f" + i; + w.println("\t\tresult = 31 * result + (" + field + " != null ? " + field + ".hashCode() : 0);"); + } + w.println("\t\treturn result;"); + w.println("\t}"); + + + String tupleTypes = "<"; + for (int i = 0; i < numFields; i++) { + tupleTypes += "T" + i; + if (i < numFields - 1) { + tupleTypes += ","; + } + } + tupleTypes += ">"; + + w.println("\t/**"); + w.println("\t* Shallow tuple copy."); + w.println("\t* @returns A new Tuple with the same fields as this."); + w.println("\t */"); + w.println("\tpublic " + className + tupleTypes + " copy(){ "); + + w.print("\t\treturn new " + className + tupleTypes + "(this.f0"); + if (numFields > 1) { + w.println(","); + } + for (int i = 1; i < numFields; i++) { + String field = "f" + i; + w.print("\t\t\tthis." + field); + if (i < numFields - 1) { + w.println(","); + } + } + w.println(");"); + w.println("\t}"); + + w.println(); + + // foot w.println("}"); }