package jcgp.backend.function; import java.util.ArrayList; import java.util.Collections; 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 functionList[allowedFunctions.get(index)]; } public Function getFunction(int index) { return functionList[index]; } public int getMaxArity(){ int arity = 0; for (Function function : functionList) { 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();) { int function = iterator.next(); if (function == 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(index)) { allowedFunctions.add(index); Collections.sort(allowedFunctions); } } @Override public String toString() { return name; } public boolean isEnabled(Function f) { for (int i = 0; i < allowedFunctions.size(); i++) { if (functionList[allowedFunctions.get(i)] == f) { return true; } } return false; } protected void enableAll() { allowedFunctions = new ArrayList(); for (int i = 0; i < functionList.length; i++) { allowedFunctions.add(i); } } }