/* * This file is part or JMathLib * * Check it out at http://www.jmathlib.de * * Author: * (c) 2005-2009 */ package jmathlib.core.interpreter; import jmathlib.core.tokens.*; import java.util.*; import java.io.*; /**Class used to store all the declared variables within a context*/ public class VariableList implements Cloneable, java.io.Serializable { /**The actual list of variables*/ private HashMap variables; /**Sets up the ArrayList of variables*/ public VariableList() { variables = new HashMap(); } /**Create a duplicate of a VariableList @param parent = the previous variable context*/ public VariableList(VariableList _variables) { variables = new HashMap(); Iterator list = _variables.getIterator(); while(list.hasNext()) { Map.Entry next = ((Map.Entry)list.next()); String name = ((String)next.getKey()); Variable var = ((Variable)next.getValue()); variables.put(name, var.clone()); } } /**@return an iterator for the key/value pairs of the list*/ public Iterator getIterator() { return variables.entrySet().iterator(); } /**@return the number of variables*/ public int getSize() { return variables.size(); } /**Remove a variable from the list @param variable-string = the variable to remove*/ public void remove(String name) { variables.remove(name); } /**remove all variables from the list*/ public void clear() { variables = new HashMap(); } /**@param name = the name of the variable @param value = the value to set it to*/ public void setVariable(String name, OperandToken value) { ((Variable)variables.get(name)).assign(value); } /**@param name = the name of the variable @return the variable represented with the name name*/ public Variable getVariable(String name) { return ((Variable)variables.get(name)); } /**Check wether or not a variable with the given name exists. @param name = the name of a variable */ public boolean isVariable(String name) { return variables.containsKey(name); } /**Lists all the currently declared variables to the console and a log file*/ public void listVariables() { ErrorLogger.debugLine("listing variables"); Iterator iter = getIterator(); Variable var; while(iter.hasNext()) { Map.Entry next = ((Map.Entry)iter.next()); var = ((Variable)next.getValue()); ErrorLogger.debugLine(var.getName()); //toString()); } ErrorLogger.debugLine("------------------------------"); } /**creates a variable, if it doesn't already exist. it returns the created variable @param name = the name of the variable to create @return the variable with that name*/ public Variable createVariable(String name) { Variable newVariable = null; if(!variables.containsKey(name)) { newVariable = new Variable(name); variables.put(name, newVariable); } else { newVariable = ((Variable)variables.get(name)); } return newVariable; } /**saves the list of variables @param fileName = the name of the file to save to*/ public void saveVariables(String fileName) { try { //create streams FileOutputStream output = new FileOutputStream(fileName); //create object stream ObjectOutputStream objectOutput = new ObjectOutputStream(output); objectOutput.writeObject(variables); //close output objects objectOutput.close(); output.close(); } catch(java.io.IOException except) { Errors.throwMathLibException("VariableList: IO exception"); ErrorLogger.debugLine(except.getMessage()); //except.printStackTrace(); } } /**loads the list of variables @param fileName = the name of the file to load from*/ public void loadVariables(String fileName) { try { FileInputStream input = new FileInputStream(fileName); ObjectInputStream objectInput = new ObjectInputStream(input); try { variables = ((HashMap)objectInput.readObject()); } catch(java.lang.ClassNotFoundException except) { Errors.throwMathLibException("VariableList: Class not found exception"); //close input objects objectInput.close(); input.close(); } catch(java.lang.ClassCastException except) { Errors.throwMathLibException("VariableList: Class cast exception"); //close input objects objectInput.close(); input.close(); } //close input objects objectInput.close(); input.close(); } catch(java.io.IOException except) { Errors.throwMathLibException("VariableList: IO exception"); ErrorLogger.debugLine(except.getMessage()); } } /**Create a duplicate of this Variable List*/ public Object clone() { return new VariableList(this); } }