java/ch/wlkl/wsm/JFun.java

package ch.wlkl.wsm;

import java.lang.reflect.Array;

import static ch.wlkl.env.Env.*;

public abstract class JFun<T> implements Cloneable {
    final Class<T> cla;
    public T[] a = null;
    public String name = null;
    public JFun(Class<T> cl) {
        cla = cl;
    }
    public void newA(int sz) {
        a = (T[]) Array.newInstance(cla, sz);
    }

    public JFun<T> clone(int sz) {
        JFun<T> c = null;
        try {
            c = (JFun<T>) super.clone();
        } catch (Throwable t) {
            err("FunJava<" + cla + "> clone", t);
        }
        c.a = (T[]) Array.newInstance(cla, sz);
        return c;
    }

    public T put(int ix, Object o) {
        try {
            return a[ix] = (T) o;
        } catch (Throwable t) {
            err("FunJava<" + cla.getSimpleName() + "> put(" + ix + ", " + o + ") caught", t);
            return null; // never happens, err does not return
        }
    }

    public abstract Object eval();
}