package jcgp.function; import java.util.ArrayList; import java.util.Iterator; /** * * @author Eduardo Pedroni * */ public abstract class FunctionSet { protected Function[] functionList; protected ArrayList allowedFunctions; protected String name; public int getAllowedFunctionCount() { return allowedFunctions.size(); } public int getTotalFunctionCount() { return functionList.length; } public Function getAllowedFunction(int index) { return allowedFunctions.get(index); } public Function getFunction(int index) { return functionList[index]; } public int getMaxArity(){ int arity = 0; for (Function function : allowedFunctions) { if (function.getArity() > arity) { arity = function.getArity(); } } return arity; } public String getName() { return name; } public void disableFunction(int index) { if (index < functionList.length) { for (Iterator iterator = allowedFunctions.iterator(); iterator.hasNext();) { Function function = (Function) iterator.next(); if (function == functionList[index]) { iterator.remove(); } } } else { throw new IndexOutOfBoundsException("Function " + index + " does not exist, the set only has " + functionList.length + " functions."); } } public void enableFunction(int index) { if (!allowedFunctions.contains(functionList[index])) { allowedFunctions.add(functionList[index]); } } @Override public String toString() { return name; } public boolean isEnabled(Function f) { return allowedFunctions.contains(f); } }