1 package org.simantics.scl.runtime.generation;
4 import java.io.FileOutputStream;
5 import java.io.PrintStream;
8 public class GenerateTuples {
9 public static final String PACKAGE = "org.simantics.scl.runtime.tuple";
10 public static final int MAX_ARITY = 32;
12 public static final String HEADER =
14 + " * This code is generated in " + GenerateTuples.class.getName() + ".\n"
15 + " * Do not edit manually!\n"
19 private static void generateTupleN(PrintStream p, int n) {
21 p.println("package " + PACKAGE + ";");
23 p.println("public class Tuple" + n + " implements Tuple {");
25 p.println(" public final Object c" + i + ";");
27 p.print(" public Tuple" + n + "(");
28 for(int i=0;i<n;++i) {
31 p.print("Object c" + i);
35 p.println(" this.c" + i + " = c" + i + ";");
38 p.println(" public int length() {");
39 p.println(" return " + n + ";");
42 p.println(" public Object get(int id) {");
43 p.println(" switch(id) {");
45 p.println(" case " + i + ": return c" + i + ";");
46 p.println(" default: throw new IndexOutOfBoundsException();");
50 p.println(" public Object[] toArray() {");
51 p.print(" return new Object[] { ");
52 for(int i=0;i<n;++i) {
60 p.println(" @Override");
61 p.println(" public boolean equals(Object obj) {");
62 p.println(" if(obj == this)");
63 p.println(" return true;");
64 p.println(" if(obj == null || obj.getClass() != getClass())");
65 p.println(" return false;");
66 p.println(" Tuple"+n+" tuple = (Tuple"+n+")obj;");
67 for(int i=0;i<n;++i) {
68 p.println(" if(c"+i+" == null) {");
69 p.println(" if(tuple.c"+i+" != null)");
70 p.println(" return false;");
72 p.println(" else if(!c"+i+".equals(tuple.c"+i+"))");
73 p.println(" return false;");
75 p.println(" return true;");
78 p.println(" @Override");
79 p.println(" public int hashCode() {");
80 p.println(" int result = c0 == null ? 0 : c0.hashCode();");
81 for(int i=1;i<n;++i) {
82 p.println(" result *= 31;");
83 p.println(" if(c"+i+" != null)");
84 p.println(" result += c"+i+".hashCode();");
86 p.println(" return result;");
89 p.println(" @Override");
90 p.println(" public String toString() {");
91 p.println(" StringBuilder b = new StringBuilder();");
92 p.println(" b.append('(');");
93 for(int i=0;i<n;++i) {
95 p.println(" b.append(',');");
96 p.println(" b.append(c" + i + ");");
98 p.println(" b.append(')');");
99 p.println(" return b.toString();");
104 public static void main(String[] args) throws Exception {
105 URL url = GenerateFunctions.class.getResource(".");
106 File dir = new File(url.getPath());
107 while(!new File(dir, "src").exists())
108 dir = dir.getParentFile();
109 dir = new File(dir, "src");
110 dir = new File(dir, PACKAGE.replace('.', '/'));
113 for(int n=2;n<=MAX_ARITY;++n) {
115 new PrintStream(new FileOutputStream(new File(dir, "Tuple"+n+".java")));
116 generateTupleN(ps, n);