/* * This file is part of JGAP. * * JGAP offers a dual license model containing the LGPL as well as the MPL. * * For licensing information please see the file license.txt included with JGAP * or have a look at the top of class org.jgap.Chromosome which representatively * includes the JGAP license policy applicable for any file delivered with JGAP. */ package org.jgap.gp.impl; import org.jgap.*; import org.jgap.gp.function.*; import org.jgap.gp.*; /** * Easily creates single and batched consistent command objects. * * @author Klaus Meffert * @since 3.0 */ public class CommandFactory { /** String containing the CVS revision. Read out via reflection!*/ private final static String CVS_REVISION = "$Revision: 1.2 $"; public static CommandGene[] createStoreCommands(CommandGene[] a_target, GPConfiguration a_conf, Class a_type, String a_prefix, int a_count) throws InvalidConfigurationException { CommandGene[] result = new CommandGene[a_count * 2 + a_target.length]; for (int i = 0; i < a_target.length; i++) { result[i] = a_target[i]; } for (int i = 0; i < a_count; i++) { result[i * 2 + a_target.length] = new StoreTerminal(a_conf, a_prefix + i, a_type); result[i * 2 + 1 + a_target.length] = new ReadTerminal(a_conf, a_type, a_prefix + i); } return result; } public static CommandGene[] createWriteOnlyCommands(CommandGene[] a_target, GPConfiguration a_conf, Class a_type, String a_prefix, int a_count, boolean a_noValidation) throws InvalidConfigurationException { CommandGene[] result = new CommandGene[a_count + a_target.length]; for (int i = 0; i < a_target.length; i++) { result[i] = a_target[i]; } for (int i = 0; i < a_count; i++) { CommandGene writeCommand = new StoreTerminal(a_conf, a_prefix + i, a_type); writeCommand.setNoValidation(a_noValidation); result[i + a_target.length] = writeCommand; } return result; } public static CommandGene[] createReadOnlyCommands(CommandGene[] a_target, GPConfiguration a_conf, Class a_type, String a_prefix, int a_count, int a_startIndex, boolean a_noValidation) throws InvalidConfigurationException { CommandGene[] result = new CommandGene[a_count + a_target.length]; for (int i = 0; i < a_target.length; i++) { result[i] = a_target[i]; } for (int i = 0; i < a_count; i++) { CommandGene readCommand = new ReadTerminal(a_conf, a_type, a_prefix + (i + a_startIndex)); readCommand.setNoValidation(a_noValidation); result[i + a_target.length] = readCommand; } return result; } public static CommandGene[] createStackCommands(CommandGene[] a_target, GPConfiguration a_conf, Class a_type) throws InvalidConfigurationException { CommandGene[] result = new CommandGene[a_target.length + 2]; for (int i = 0; i < a_target.length; i++) { result[i] = a_target[i]; } result[a_target.length] = new Push(a_conf, a_type); result[a_target.length + 1] = new Pop(a_conf, a_type); return result; } }