package xyz.marsavic.gfxlab.elements; import xyz.marsavic.functions.interfaces.F0; import xyz.marsavic.functions.interfaces.F1; import xyz.marsavic.functions.interfaces.F2; import xyz.marsavic.functions.interfaces.F3; public abstract class ElementF extends Element implements HasOutput { public abstract R object(); public final Output out = new Output<>(this::object); @Override public Output out() { return out; } public static ElementF0 e(R result) { return e(() -> result); } public static ElementF0 e(F0 f ) { return new ElementF0.Lazy<>(f ); } public static ElementF1 e(F1 f, HasOutput p0 ) { return new ElementF1.Lazy<>(f, p0 ); } public static ElementF2 e(F2 f, HasOutput p0, HasOutput p1 ) { return new ElementF2.Lazy<>(f, p0, p1 ); } public static ElementF3 e(F3 f, HasOutput p0, HasOutput p1, HasOutput p2) { return new ElementF3.Lazy<>(f, p0, p1, p2); } }