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