Search in sources :

Example 1 with INodeFuncObject

use of buildcraft.lib.expression.api.INodeFunc.INodeFuncObject in project BuildCraft by BuildCraft.

the class InternalCompiler method addParentFunctions.

private static String addParentFunctions(FunctionContext context) {
    String vars = "";
    List<String> allFunctions = new ArrayList<>();
    allFunctions.addAll(context.getAllFunctions().keySet());
    allFunctions.sort(Comparator.naturalOrder());
    if (!allFunctions.isEmpty()) {
        if (!context.name.isEmpty()) {
            vars += "\n" + context.name + ":";
        }
        for (String fnName : allFunctions) {
            Map<List<Class<?>>, INodeFunc> functions = context.getFunctions(fnName);
            for (Map.Entry<List<Class<?>>, INodeFunc> entry : functions.entrySet()) {
                String args = "";
                for (Class<?> arg : entry.getKey()) {
                    if (args.length() > 0) {
                        args += ", ";
                    }
                    args += NodeTypes.getName(arg);
                }
                INodeFunc function = entry.getValue();
                String ret;
                if (function instanceof INodeFuncBoolean) {
                    ret = NodeTypes.getName(boolean.class);
                } else if (function instanceof INodeFuncDouble) {
                    ret = NodeTypes.getName(double.class);
                } else if (function instanceof INodeFuncLong) {
                    ret = NodeTypes.getName(long.class);
                } else {
                    ret = NodeTypes.getName(((INodeFuncObject<?>) function).getType());
                }
                vars += "\n  " + fnName + "(" + args + ") -> " + ret;
            }
        }
    }
    for (FunctionContext parent : context.getParents()) {
        vars += addParentFunctions(parent);
    }
    return vars;
}
Also used : INodeFuncLong(buildcraft.lib.expression.api.INodeFunc.INodeFuncLong) INodeFunc(buildcraft.lib.expression.api.INodeFunc) ArrayList(java.util.ArrayList) INodeFuncObject(buildcraft.lib.expression.api.INodeFunc.INodeFuncObject) INodeFuncBoolean(buildcraft.lib.expression.api.INodeFunc.INodeFuncBoolean) INodeFuncDouble(buildcraft.lib.expression.api.INodeFunc.INodeFuncDouble) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map)

Example 2 with INodeFuncObject

use of buildcraft.lib.expression.api.INodeFunc.INodeFuncObject in project BuildCraft by BuildCraft.

the class NodeCasting method castToObject.

public static <T> INodeFuncObject<T> castToObject(INodeFunc func, Class<T> to) throws InvalidExpressionException {
    Class<?> from = NodeTypes.getType(func);
    if (from == to) {
        return (INodeFuncObject<T>) func;
    }
    FunctionContext castingContext = new FunctionContext(NodeTypes.getContext(from), NodeTypes.getContext(to));
    INodeFunc caster = castingContext.getFunction("(" + NodeTypes.getName(to) + ")", Collections.singletonList(from));
    if (caster == null) {
        if (to == String.class) {
            return (INodeFuncObject<T>) castToString(func);
        }
        throw new InvalidExpressionException("Cannot cast from " + NodeTypes.getName(from) + " to " + NodeTypes.getName(to));
    }
    return new INodeFuncObject<T>() {

        @Override
        public INodeObject<T> getNode(INodeStack stack) throws InvalidExpressionException {
            return (INodeObject<T>) caster.getNode(new NodeStack(func.getNode(stack)));
        }

        @Override
        public Class<T> getType() {
            return to;
        }
    };
}
Also used : INodeStack(buildcraft.lib.expression.api.INodeStack) INodeFuncObject(buildcraft.lib.expression.api.INodeFunc.INodeFuncObject) InvalidExpressionException(buildcraft.lib.expression.api.InvalidExpressionException) INodeFunc(buildcraft.lib.expression.api.INodeFunc) INodeStack(buildcraft.lib.expression.api.INodeStack) NodeStack(buildcraft.lib.expression.NodeStack) FunctionContext(buildcraft.lib.expression.FunctionContext) INodeObject(buildcraft.lib.expression.api.IExpressionNode.INodeObject)

Aggregations

INodeFunc (buildcraft.lib.expression.api.INodeFunc)2 INodeFuncObject (buildcraft.lib.expression.api.INodeFunc.INodeFuncObject)2 FunctionContext (buildcraft.lib.expression.FunctionContext)1 NodeStack (buildcraft.lib.expression.NodeStack)1 INodeObject (buildcraft.lib.expression.api.IExpressionNode.INodeObject)1 INodeFuncBoolean (buildcraft.lib.expression.api.INodeFunc.INodeFuncBoolean)1 INodeFuncDouble (buildcraft.lib.expression.api.INodeFunc.INodeFuncDouble)1 INodeFuncLong (buildcraft.lib.expression.api.INodeFunc.INodeFuncLong)1 INodeStack (buildcraft.lib.expression.api.INodeStack)1 InvalidExpressionException (buildcraft.lib.expression.api.InvalidExpressionException)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1