/** * This code is generated in org.simantics.scl.runtime.generation.GenerateFunctions. * Do not edit manually! */ package org.simantics.scl.runtime.function; import java.util.Arrays; @SuppressWarnings("all") public abstract class FunctionImplN implements Function { int arity; public FunctionImplN(int arity) { if(arity < 1) throw new IllegalArgumentException(); this.arity = arity; } @Override public Object apply(Object p0) { try { switch(arity) { case 1: return doApply(p0); default: return new UnsaturatedFunction1(this, p0); } } catch(ClassCastException e) { throw new CalledWithTooManyParameters(); } } @Override public Object apply(Object p0, Object p1) { try { switch(arity) { case 1: return ((Function)doApply(p0)).apply(p1); case 2: return doApply(p0, p1); default: return new UnsaturatedFunction2(this, p0, p1); } } catch(ClassCastException e) { throw new CalledWithTooManyParameters(); } } @Override public Object apply(Object p0, Object p1, Object p2) { try { switch(arity) { case 1: return ((Function)doApply(p0)).apply(p1, p2); case 2: return ((Function)doApply(p0, p1)).apply(p2); case 3: return doApply(p0, p1, p2); default: return new UnsaturatedFunction3(this, p0, p1, p2); } } catch(ClassCastException e) { throw new CalledWithTooManyParameters(); } } @Override public Object apply(Object p0, Object p1, Object p2, Object p3) { try { switch(arity) { case 1: return ((Function)doApply(p0)).apply(p1, p2, p3); case 2: return ((Function)doApply(p0, p1)).apply(p2, p3); case 3: return ((Function)doApply(p0, p1, p2)).apply(p3); case 4: return doApply(p0, p1, p2, p3); default: return new UnsaturatedFunction4(this, p0, p1, p2, p3); } } catch(ClassCastException e) { throw new CalledWithTooManyParameters(); } } @Override public Object apply(Object p0, Object p1, Object p2, Object p3, Object p4) { try { switch(arity) { case 1: return ((Function)doApply(p0)).apply(p1, p2, p3, p4); case 2: return ((Function)doApply(p0, p1)).apply(p2, p3, p4); case 3: return ((Function)doApply(p0, p1, p2)).apply(p3, p4); case 4: return ((Function)doApply(p0, p1, p2, p3)).apply(p4); case 5: return doApply(p0, p1, p2, p3, p4); default: return new UnsaturatedFunction5(this, p0, p1, p2, p3, p4); } } catch(ClassCastException e) { throw new CalledWithTooManyParameters(); } } @Override public Object apply(Object p0, Object p1, Object p2, Object p3, Object p4, Object p5) { try { switch(arity) { case 1: return ((Function)doApply(p0)).apply(p1, p2, p3, p4, p5); case 2: return ((Function)doApply(p0, p1)).apply(p2, p3, p4, p5); case 3: return ((Function)doApply(p0, p1, p2)).apply(p3, p4, p5); case 4: return ((Function)doApply(p0, p1, p2, p3)).apply(p4, p5); case 5: return ((Function)doApply(p0, p1, p2, p3, p4)).apply(p5); case 6: return doApply(p0, p1, p2, p3, p4, p5); default: return new UnsaturatedFunction6(this, p0, p1, p2, p3, p4, p5); } } catch(ClassCastException e) { throw new CalledWithTooManyParameters(); } } @Override public Object apply(Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6) { try { switch(arity) { case 1: return ((Function)doApply(p0)).apply(p1, p2, p3, p4, p5, p6); case 2: return ((Function)doApply(p0, p1)).apply(p2, p3, p4, p5, p6); case 3: return ((Function)doApply(p0, p1, p2)).apply(p3, p4, p5, p6); case 4: return ((Function)doApply(p0, p1, p2, p3)).apply(p4, p5, p6); case 5: return ((Function)doApply(p0, p1, p2, p3, p4)).apply(p5, p6); case 6: return ((Function)doApply(p0, p1, p2, p3, p4, p5)).apply(p6); case 7: return doApply(p0, p1, p2, p3, p4, p5, p6); default: return new UnsaturatedFunction7(this, p0, p1, p2, p3, p4, p5, p6); } } catch(ClassCastException e) { throw new CalledWithTooManyParameters(); } } @Override public Object apply(Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7) { try { switch(arity) { case 1: return ((Function)doApply(p0)).apply(p1, p2, p3, p4, p5, p6, p7); case 2: return ((Function)doApply(p0, p1)).apply(p2, p3, p4, p5, p6, p7); case 3: return ((Function)doApply(p0, p1, p2)).apply(p3, p4, p5, p6, p7); case 4: return ((Function)doApply(p0, p1, p2, p3)).apply(p4, p5, p6, p7); case 5: return ((Function)doApply(p0, p1, p2, p3, p4)).apply(p5, p6, p7); case 6: return ((Function)doApply(p0, p1, p2, p3, p4, p5)).apply(p6, p7); case 7: return ((Function)doApply(p0, p1, p2, p3, p4, p5, p6)).apply(p7); case 8: return doApply(p0, p1, p2, p3, p4, p5, p6, p7); default: return new UnsaturatedFunction8(this, p0, p1, p2, p3, p4, p5, p6, p7); } } catch(ClassCastException e) { throw new CalledWithTooManyParameters(); } } public abstract Object doApply(Object ... ps); @Override public Object applyArray(Object ... ps) { if(ps.length == arity) return doApply(ps); else if(ps.length < arity) return new UnsaturatedFunctionN(this, ps); else /* ps.length > arity */ { try { return ((Function)doApply(Arrays.copyOf(ps, arity))).applyArray(Arrays.copyOfRange(ps, arity, ps.length)); } catch(ClassCastException e) { throw new CalledWithTooManyParameters(); } } } }