-package org.simantics.scl.runtime.generation;\r
-\r
-import java.io.File;\r
-import java.io.FileOutputStream;\r
-import java.io.PrintStream;\r
-import java.net.URL;\r
-\r
-public class GenerateTuples {\r
- public static final String PACKAGE = "org.simantics.scl.runtime.tuple";\r
- public static final int MAX_ARITY = 32;\r
- \r
- public static final String HEADER =\r
- "/**\n"\r
- + " * This code is generated in " + GenerateTuples.class.getName() + ".\n"\r
- + " * Do not edit manually!\n"\r
- + " */" \r
- ;\r
- \r
- private static void generateTupleN(PrintStream p, int n) {\r
- p.println(HEADER);\r
- p.println("package " + PACKAGE + ";");\r
- p.println();\r
- p.println("public class Tuple" + n + " implements Tuple {");\r
- for(int i=0;i<n;++i)\r
- p.println(" public final Object c" + i + ";");\r
- p.println();\r
- p.print(" public Tuple" + n + "(");\r
- for(int i=0;i<n;++i) {\r
- if(i>0)\r
- p.print(", ");\r
- p.print("Object c" + i);\r
- }\r
- p.println(") {");\r
- for(int i=0;i<n;++i)\r
- p.println(" this.c" + i + " = c" + i + ";");\r
- p.println(" }");\r
- p.println();\r
- p.println(" public int length() {");\r
- p.println(" return " + n + ";");\r
- p.println(" }");\r
- p.println();\r
- p.println(" public Object get(int id) {");\r
- p.println(" switch(id) {");\r
- for(int i=0;i<n;++i)\r
- p.println(" case " + i + ": return c" + i + ";");\r
- p.println(" default: throw new IndexOutOfBoundsException();");\r
- p.println(" }");\r
- p.println(" }");\r
- p.println(); \r
- p.println(" public Object[] toArray() {");\r
- p.print(" return new Object[] { ");\r
- for(int i=0;i<n;++i) {\r
- if(i > 0)\r
- p.print(", ");\r
- p.print("c" + i);\r
- }\r
- p.println(" };");\r
- p.println(" }");\r
- p.println();\r
- p.println(" @Override");\r
- p.println(" public boolean equals(Object obj) {");\r
- p.println(" if(obj == this)");\r
- p.println(" return true;");\r
- p.println(" if(obj == null || obj.getClass() != getClass())");\r
- p.println(" return false;");\r
- p.println(" Tuple"+n+" tuple = (Tuple"+n+")obj;");\r
- for(int i=0;i<n;++i) {\r
- p.println(" if(c"+i+" == null) {");\r
- p.println(" if(tuple.c"+i+" != null)");\r
- p.println(" return false;");\r
- p.println(" }");\r
- p.println(" else if(!c"+i+".equals(tuple.c"+i+"))");\r
- p.println(" return false;");\r
- }\r
- p.println(" return true;");\r
- p.println(" }");\r
- p.println();\r
- p.println(" @Override");\r
- p.println(" public int hashCode() {");\r
- p.println(" int result = c0 == null ? 0 : c0.hashCode();");\r
- for(int i=1;i<n;++i) {\r
- p.println(" result *= 31;");\r
- p.println(" if(c"+i+" != null)");\r
- p.println(" result += c"+i+".hashCode();");\r
- }\r
- p.println(" return result;");\r
- p.println(" }");\r
- p.println();\r
- p.println(" @Override");\r
- p.println(" public String toString() {");\r
- p.println(" StringBuilder b = new StringBuilder();");\r
- p.println(" b.append('(');");\r
- for(int i=0;i<n;++i) {\r
- if(i > 0)\r
- p.println(" b.append(',');");\r
- p.println(" b.append(c" + i + ");");\r
- }\r
- p.println(" b.append(')');");\r
- p.println(" return b.toString();");\r
- p.println(" }");\r
- p.println("}");\r
- }\r
- \r
- public static void main(String[] args) throws Exception {\r
- URL url = GenerateFunctions.class.getResource(".");\r
- File dir = new File(url.getPath());\r
- while(!new File(dir, "src").exists())\r
- dir = dir.getParentFile(); \r
- dir = new File(dir, "src");\r
- dir = new File(dir, PACKAGE.replace('.', '/'));\r
- dir.mkdirs();\r
- \r
- for(int n=2;n<=MAX_ARITY;++n) {\r
- PrintStream ps = \r
- new PrintStream(new FileOutputStream(new File(dir, "Tuple"+n+".java")));\r
- generateTupleN(ps, n);\r
- }\r
- }\r
-}\r
+package org.simantics.scl.runtime.generation;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.net.URL;
+
+public class GenerateTuples {
+ public static final String PACKAGE = "org.simantics.scl.runtime.tuple";
+ public static final int MAX_ARITY = 32;
+
+ public static final String HEADER =
+ "/**\n"
+ + " * This code is generated in " + GenerateTuples.class.getName() + ".\n"
+ + " * Do not edit manually!\n"
+ + " */"
+ ;
+
+ private static void generateTupleN(PrintStream p, int n) {
+ p.println(HEADER);
+ p.println("package " + PACKAGE + ";");
+ p.println();
+ p.println("public class Tuple" + n + " implements Tuple {");
+ for(int i=0;i<n;++i)
+ p.println(" public final Object c" + i + ";");
+ p.println();
+ p.print(" public Tuple" + n + "(");
+ for(int i=0;i<n;++i) {
+ if(i>0)
+ p.print(", ");
+ p.print("Object c" + i);
+ }
+ p.println(") {");
+ for(int i=0;i<n;++i)
+ p.println(" this.c" + i + " = c" + i + ";");
+ p.println(" }");
+ p.println();
+ p.println(" public int length() {");
+ p.println(" return " + n + ";");
+ p.println(" }");
+ p.println();
+ p.println(" public Object get(int id) {");
+ p.println(" switch(id) {");
+ for(int i=0;i<n;++i)
+ p.println(" case " + i + ": return c" + i + ";");
+ p.println(" default: throw new IndexOutOfBoundsException();");
+ p.println(" }");
+ p.println(" }");
+ p.println();
+ p.println(" public Object[] toArray() {");
+ p.print(" return new Object[] { ");
+ for(int i=0;i<n;++i) {
+ if(i > 0)
+ p.print(", ");
+ p.print("c" + i);
+ }
+ p.println(" };");
+ p.println(" }");
+ p.println();
+ p.println(" @Override");
+ p.println(" public boolean equals(Object obj) {");
+ p.println(" if(obj == this)");
+ p.println(" return true;");
+ p.println(" if(obj == null || obj.getClass() != getClass())");
+ p.println(" return false;");
+ p.println(" Tuple"+n+" tuple = (Tuple"+n+")obj;");
+ for(int i=0;i<n;++i) {
+ p.println(" if(c"+i+" == null) {");
+ p.println(" if(tuple.c"+i+" != null)");
+ p.println(" return false;");
+ p.println(" }");
+ p.println(" else if(!c"+i+".equals(tuple.c"+i+"))");
+ p.println(" return false;");
+ }
+ p.println(" return true;");
+ p.println(" }");
+ p.println();
+ p.println(" @Override");
+ p.println(" public int hashCode() {");
+ p.println(" int result = c0 == null ? 0 : c0.hashCode();");
+ for(int i=1;i<n;++i) {
+ p.println(" result *= 31;");
+ p.println(" if(c"+i+" != null)");
+ p.println(" result += c"+i+".hashCode();");
+ }
+ p.println(" return result;");
+ p.println(" }");
+ p.println();
+ p.println(" @Override");
+ p.println(" public String toString() {");
+ p.println(" StringBuilder b = new StringBuilder();");
+ p.println(" b.append('(');");
+ for(int i=0;i<n;++i) {
+ if(i > 0)
+ p.println(" b.append(',');");
+ p.println(" b.append(c" + i + ");");
+ }
+ p.println(" b.append(')');");
+ p.println(" return b.toString();");
+ p.println(" }");
+ p.println("}");
+ }
+
+ public static void main(String[] args) throws Exception {
+ URL url = GenerateFunctions.class.getResource(".");
+ File dir = new File(url.getPath());
+ while(!new File(dir, "src").exists())
+ dir = dir.getParentFile();
+ dir = new File(dir, "src");
+ dir = new File(dir, PACKAGE.replace('.', '/'));
+ dir.mkdirs();
+
+ for(int n=2;n<=MAX_ARITY;++n) {
+ PrintStream ps =
+ new PrintStream(new FileOutputStream(new File(dir, "Tuple"+n+".java")));
+ generateTupleN(ps, n);
+ }
+ }
+}