]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.runtime/generation/org/simantics/scl/runtime/generation/GenerateTuples.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.scl.runtime / generation / org / simantics / scl / runtime / generation / GenerateTuples.java
1 package org.simantics.scl.runtime.generation;
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.PrintStream;
6 import java.net.URL;
7
8 public class GenerateTuples {
9     public static final String PACKAGE = "org.simantics.scl.runtime.tuple";
10     public static final int MAX_ARITY = 32;
11     
12     public static final String HEADER =
13             "/**\n"
14           + " * This code is generated in " + GenerateTuples.class.getName() + ".\n"
15           + " * Do not edit manually!\n"
16           + " */" 
17             ;
18     
19     private static void generateTupleN(PrintStream p, int n) {
20         p.println(HEADER);
21         p.println("package " + PACKAGE + ";");
22         p.println();
23         p.println("public class Tuple" + n + " implements Tuple {");
24         for(int i=0;i<n;++i)
25             p.println("    public final Object c" + i + ";");
26         p.println();
27         p.print("    public Tuple" + n + "(");
28         for(int i=0;i<n;++i) {
29             if(i>0)
30                 p.print(", ");
31             p.print("Object c" + i);
32         }
33         p.println(") {");
34         for(int i=0;i<n;++i)
35             p.println("        this.c" + i + " = c" + i + ";");
36         p.println("    }");
37         p.println();
38         p.println("    public int length() {");
39         p.println("        return " + n + ";");
40         p.println("    }");
41         p.println();
42         p.println("    public Object get(int id) {");
43         p.println("        switch(id) {");
44         for(int i=0;i<n;++i)
45             p.println("        case " + i + ": return c" + i + ";");
46         p.println("        default: throw new IndexOutOfBoundsException();");
47         p.println("        }");
48         p.println("    }");
49         p.println();        
50         p.println("    public Object[] toArray() {");
51         p.print("        return new Object[] { ");
52         for(int i=0;i<n;++i) {
53             if(i > 0)
54                 p.print(", ");
55             p.print("c" + i);
56         }
57         p.println(" };");
58         p.println("    }");
59         p.println();
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;");
71             p.println("        }");
72             p.println("        else if(!c"+i+".equals(tuple.c"+i+"))");
73             p.println("            return false;");
74         }
75         p.println("        return true;");
76         p.println("    }");
77         p.println();
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();");
85         }
86         p.println("        return result;");
87         p.println("    }");
88         p.println();
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) {
94             if(i > 0)
95                 p.println("        b.append(',');");
96             p.println("        b.append(c" + i + ");");
97         }
98         p.println("        b.append(')');");
99         p.println("        return b.toString();");
100         p.println("    }");
101         p.println("}");
102     }
103     
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('.', '/'));
111         dir.mkdirs();
112         
113         for(int n=2;n<=MAX_ARITY;++n) {
114             PrintStream ps = 
115                 new PrintStream(new FileOutputStream(new File(dir, "Tuple"+n+".java")));
116             generateTupleN(ps, n);
117         }
118     }
119 }