Library.java

package edu.udel.cis.vsl.tass.front.minimp.lib;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;

import edu.udel.cis.vsl.tass.front.minimp.ast.declaration.ASTFunctionDeclaration;
import edu.udel.cis.vsl.tass.front.minimp.ast.declaration.ASTVariableDeclaration;
import edu.udel.cis.vsl.tass.front.minimp.ast.expression.ASTExpressionIF;
import edu.udel.cis.vsl.tass.front.minimp.ast.type.ASTTypeIF;

public class Library implements LibraryIF {

	private Collection<ASTVariableDeclaration> inputs = new LinkedList<ASTVariableDeclaration>();

	private HashMap<String, ASTFunctionDeclaration> functions = new HashMap<String, ASTFunctionDeclaration>();

	private Collection<String> functionNames = new LinkedList<String>();

	private HashMap<String, ASTTypeIF> types = new HashMap<String, ASTTypeIF>();

	private Map<String, ASTExpressionIF> constants = new HashMap<String, ASTExpressionIF>();

	/**
	 * The libraries that this library uses.
	 */
	private Collection<String> librariesUsed = new HashSet<String>();

	private String name;

	public Library(String name) {
		this.name = name;
	}

	@Override
	public Collection<ASTVariableDeclaration> getInputs() {
		return inputs;
	}

	@Override
	public Collection<String> getFunctionNames() {
		return functionNames;
	}

	@Override
	public ASTFunctionDeclaration getFunction(String name) {
		if (functions.containsKey(name))
			return functions.get(name);
		return null;
	}

	@Override
	public Map<String, ASTTypeIF> getTypes() {
		return types;
	}

	public void addFunctions(Collection<ASTFunctionDeclaration> newFunctions) {
		for (ASTFunctionDeclaration f : newFunctions) {
			functionNames.add(f.getName().toString());
			functions.put(f.getName().toString(), f);
		}
	}

	public void addInputs(Collection<ASTVariableDeclaration> newInputs) {
		inputs.addAll(newInputs);
	}

	public void addTypes(Map<String, ASTTypeIF> newTypes) {
		types.putAll(newTypes);
	}

	@Override
	public String name() {
		return name;
	}

	@Override
	public void addConstants(Map<String, ASTExpressionIF> newConstants) {
		constants.putAll(newConstants);
	}

	@Override
	public Map<String, ASTExpressionIF> getConstants() {
		return constants;
	}

	@Override
	public void addLibrariesUsed(Collection<String> names) {
		librariesUsed.addAll(names);
	}

	@Override
	public Collection<String> getLibrariesUsed() {
		return librariesUsed;
	}

}