]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/function/FunctionImplN.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.scl.runtime / src / org / simantics / scl / runtime / function / FunctionImplN.java
1 /**
2  * This code is generated in org.simantics.scl.runtime.generation.GenerateFunctions.
3  * Do not edit manually!
4  */
5 package org.simantics.scl.runtime.function;
6
7 import java.util.Arrays;
8
9 @SuppressWarnings("all")
10 public abstract class FunctionImplN implements Function {
11     int arity;
12
13     public FunctionImplN(int arity) {
14         if(arity < 1)
15             throw new IllegalArgumentException();
16         this.arity = arity;
17     }
18
19     @Override
20     public Object apply(Object p0) {
21         try {
22             switch(arity) {
23             case 1: return doApply(p0);
24             default: return new UnsaturatedFunction1(this, p0);
25             }
26         } catch(ClassCastException e) {
27             throw new CalledWithTooManyParameters();
28         }
29     }
30
31     @Override
32     public Object apply(Object p0, Object p1) {
33         try {
34             switch(arity) {
35             case 1: return ((Function)doApply(p0)).apply(p1);
36             case 2: return doApply(p0, p1);
37             default: return new UnsaturatedFunction2(this, p0, p1);
38             }
39         } catch(ClassCastException e) {
40             throw new CalledWithTooManyParameters();
41         }
42     }
43
44     @Override
45     public Object apply(Object p0, Object p1, Object p2) {
46         try {
47             switch(arity) {
48             case 1: return ((Function)doApply(p0)).apply(p1, p2);
49             case 2: return ((Function)doApply(p0, p1)).apply(p2);
50             case 3: return doApply(p0, p1, p2);
51             default: return new UnsaturatedFunction3(this, p0, p1, p2);
52             }
53         } catch(ClassCastException e) {
54             throw new CalledWithTooManyParameters();
55         }
56     }
57
58     @Override
59     public Object apply(Object p0, Object p1, Object p2, Object p3) {
60         try {
61             switch(arity) {
62             case 1: return ((Function)doApply(p0)).apply(p1, p2, p3);
63             case 2: return ((Function)doApply(p0, p1)).apply(p2, p3);
64             case 3: return ((Function)doApply(p0, p1, p2)).apply(p3);
65             case 4: return doApply(p0, p1, p2, p3);
66             default: return new UnsaturatedFunction4(this, p0, p1, p2, p3);
67             }
68         } catch(ClassCastException e) {
69             throw new CalledWithTooManyParameters();
70         }
71     }
72
73     @Override
74     public Object apply(Object p0, Object p1, Object p2, Object p3, Object p4) {
75         try {
76             switch(arity) {
77             case 1: return ((Function)doApply(p0)).apply(p1, p2, p3, p4);
78             case 2: return ((Function)doApply(p0, p1)).apply(p2, p3, p4);
79             case 3: return ((Function)doApply(p0, p1, p2)).apply(p3, p4);
80             case 4: return ((Function)doApply(p0, p1, p2, p3)).apply(p4);
81             case 5: return doApply(p0, p1, p2, p3, p4);
82             default: return new UnsaturatedFunction5(this, p0, p1, p2, p3, p4);
83             }
84         } catch(ClassCastException e) {
85             throw new CalledWithTooManyParameters();
86         }
87     }
88
89     @Override
90     public Object apply(Object p0, Object p1, Object p2, Object p3, Object p4, Object p5) {
91         try {
92             switch(arity) {
93             case 1: return ((Function)doApply(p0)).apply(p1, p2, p3, p4, p5);
94             case 2: return ((Function)doApply(p0, p1)).apply(p2, p3, p4, p5);
95             case 3: return ((Function)doApply(p0, p1, p2)).apply(p3, p4, p5);
96             case 4: return ((Function)doApply(p0, p1, p2, p3)).apply(p4, p5);
97             case 5: return ((Function)doApply(p0, p1, p2, p3, p4)).apply(p5);
98             case 6: return doApply(p0, p1, p2, p3, p4, p5);
99             default: return new UnsaturatedFunction6(this, p0, p1, p2, p3, p4, p5);
100             }
101         } catch(ClassCastException e) {
102             throw new CalledWithTooManyParameters();
103         }
104     }
105
106     @Override
107     public Object apply(Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6) {
108         try {
109             switch(arity) {
110             case 1: return ((Function)doApply(p0)).apply(p1, p2, p3, p4, p5, p6);
111             case 2: return ((Function)doApply(p0, p1)).apply(p2, p3, p4, p5, p6);
112             case 3: return ((Function)doApply(p0, p1, p2)).apply(p3, p4, p5, p6);
113             case 4: return ((Function)doApply(p0, p1, p2, p3)).apply(p4, p5, p6);
114             case 5: return ((Function)doApply(p0, p1, p2, p3, p4)).apply(p5, p6);
115             case 6: return ((Function)doApply(p0, p1, p2, p3, p4, p5)).apply(p6);
116             case 7: return doApply(p0, p1, p2, p3, p4, p5, p6);
117             default: return new UnsaturatedFunction7(this, p0, p1, p2, p3, p4, p5, p6);
118             }
119         } catch(ClassCastException e) {
120             throw new CalledWithTooManyParameters();
121         }
122     }
123
124     @Override
125     public Object apply(Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7) {
126         try {
127             switch(arity) {
128             case 1: return ((Function)doApply(p0)).apply(p1, p2, p3, p4, p5, p6, p7);
129             case 2: return ((Function)doApply(p0, p1)).apply(p2, p3, p4, p5, p6, p7);
130             case 3: return ((Function)doApply(p0, p1, p2)).apply(p3, p4, p5, p6, p7);
131             case 4: return ((Function)doApply(p0, p1, p2, p3)).apply(p4, p5, p6, p7);
132             case 5: return ((Function)doApply(p0, p1, p2, p3, p4)).apply(p5, p6, p7);
133             case 6: return ((Function)doApply(p0, p1, p2, p3, p4, p5)).apply(p6, p7);
134             case 7: return ((Function)doApply(p0, p1, p2, p3, p4, p5, p6)).apply(p7);
135             case 8: return doApply(p0, p1, p2, p3, p4, p5, p6, p7);
136             default: return new UnsaturatedFunction8(this, p0, p1, p2, p3, p4, p5, p6, p7);
137             }
138         } catch(ClassCastException e) {
139             throw new CalledWithTooManyParameters();
140         }
141     }
142
143     public abstract Object doApply(Object ... ps);
144
145     @Override
146     public Object applyArray(Object ... ps) {
147         if(ps.length == arity)
148             return doApply(ps);
149         else if(ps.length < arity)
150             return new UnsaturatedFunctionN(this, ps);
151         else /* ps.length > arity */ {
152             try {
153                 return ((Function)doApply(Arrays.copyOf(ps, arity))).applyArray(Arrays.copyOfRange(ps, arity, ps.length));
154             } catch(ClassCastException e) {
155                 throw new CalledWithTooManyParameters();
156             }
157         }
158     }
159 }