/* * Encog(tm) Core v3.4 - Java Version * http://www.heatonresearch.com/encog/ * https://github.com/encog/encog-java-core * Copyright 2008-2016 Heaton Research, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * For more information on Heaton Research copyrights, licenses * and trademarks visit: * http://www.heatonresearch.com/copyright */ package org.encog.app.generate.program; import java.io.File; import java.util.ArrayList; import java.util.List; /** * A node that holds a program. * */ public class EncogProgramNode extends EncogTreeNode { /** * The argements to the program. */ private final List<EncogProgramArg> args = new ArrayList<EncogProgramArg>(); /** * The type of node that this is. */ private final NodeType type; /** * The name od this node. */ private final String name; /** * Construct the program node. * * @param theProgram * THe program. * @param theParent * The parent. * @param theNodeType * The node type. * @param theName * The name of the node. */ public EncogProgramNode(final EncogGenProgram theProgram, final EncogTreeNode theParent, final NodeType theNodeType, final String theName) { super(theProgram, theParent); this.type = theNodeType; this.name = theName; } /** * Add a double argument. * * @param argValue * The argument value. */ public void addArg(final double argValue) { final EncogProgramArg arg = new EncogProgramArg(argValue); this.args.add(arg); } /** * Add an int argument. * * @param argValue * The argument value. */ public void addArg(final int argValue) { final EncogProgramArg arg = new EncogProgramArg(argValue); this.args.add(arg); } /** * Add an object argument. * * @param argValue * The argument value. */ public void addArg(final Object argValue) { final EncogProgramArg arg = new EncogProgramArg(argValue); this.args.add(arg); } /** * Add a string argument. * * @param argValue * The argument value. */ public void addArg(final String argValue) { final EncogProgramArg arg = new EncogProgramArg(argValue); this.args.add(arg); } /** * Create an array. * * @param name * THe name of the array. * @param a * The value to init the array to. * @return The newly creatred array. */ public EncogProgramNode createArray(final String name, final double[] a) { final EncogProgramNode node = new EncogProgramNode(getProgram(), this, NodeType.InitArray, name); node.addArg(a); getChildren().add(node); return node; } /** * Create a function. * * @param theName * The name of the function. * @return The newly created function. */ public EncogProgramNode createFunction(final String theName) { final EncogProgramNode node = new EncogProgramNode(getProgram(), this, NodeType.StaticFunction, theName); getChildren().add(node); return node; } /** * Create a function call. * * @param funct * The function to call. * @param returnType * The type returned. * @param returnVariable * The value to assigne the function call to. * @return The newly created function call. */ public EncogProgramNode createFunctionCall(final EncogProgramNode funct, final String returnType, final String returnVariable) { final EncogProgramNode node = new EncogProgramNode(getProgram(), this, NodeType.FunctionCall, funct.getName()); node.addArg(returnType); node.addArg(returnVariable); getChildren().add(node); return node; } /** * Create a function call. * * @param name * The name of the function to call. * @param returnType * The return type. * @param returnVariable * The variable to assign the function to. * @return The newly created function call. */ public EncogProgramNode createFunctionCall(final String name, final String returnType, final String returnVariable) { final EncogProgramNode node = new EncogProgramNode(getProgram(), this, NodeType.FunctionCall, name); node.addArg(returnType); node.addArg(returnVariable); getChildren().add(node); return node; } /** * Create a new main function. * * @return The newly created main function. */ public EncogProgramNode createMainFunction() { final EncogProgramNode node = new EncogProgramNode(getProgram(), this, NodeType.MainFunction, null); getChildren().add(node); return node; } /** * Create a new network function. * * @param name * The name of the network function. * @param method * The method to call. * @return The newly created network function. */ public EncogProgramNode createNetworkFunction(final String name, final File method) { final EncogProgramNode node = new EncogProgramNode(getProgram(), this, NodeType.CreateNetwork, name); node.addArg(method); getChildren().add(node); return node; } /** * Define a const. * * @param type * The type of const. * @param name * The name of the const. * @param value * The value of the const. */ public void defineConst(final EncogArgType type, final String name, final String value) { final EncogProgramNode node = new EncogProgramNode(getProgram(), this, NodeType.Const, name); node.addArg(value); node.addArg(type.toString()); getChildren().add(node); } /** * Embed training data. * * @param data * The training data to embed. * @return The newly created embeded training data. */ public EncogProgramNode embedTraining(final File data) { final EncogProgramNode node = new EncogProgramNode(getProgram(), this, NodeType.EmbedTraining, ""); node.addArg(data); getChildren().add(node); return node; } /** * Load the training data. * * @param data * The data. * @return The newly created data load. */ public EncogProgramNode generateLoadTraining(final File data) { final EncogProgramNode node = new EncogProgramNode(getProgram(), this, NodeType.LoadTraining, ""); node.addArg(data); getChildren().add(node); return node; } /** * @return The args. */ public List<EncogProgramArg> getArgs() { return this.args; } /** * @return The name. */ public String getName() { return this.name; } /** * @return The type. */ public NodeType getType() { return this.type; } }