/*
* xtc - The eXTensible Compiler
* Copyright (C) 2005-2006 Robert Grimm
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*/
package xtc.parser;
import java.util.Iterator;
import java.util.List;
import xtc.tree.Node;
/**
* A list of module names as a node.
*
* @author Robert Grimm
* @version $Revision: 1.12 $
*/
public class ModuleList extends Node {
/** The list of {@link ModuleName module names}. */
public List<ModuleName> names;
/**
* Create a new module list.
*
* @param names The list of names.
*/
public ModuleList(List<ModuleName> names) {
this.names = names;
}
public int hashCode() {
return names.hashCode();
}
public boolean equals(Object o) {
if (this == o) return true;
if (! (o instanceof ModuleList)) return false;
return names.equals(((ModuleList)o).names);
}
/**
* Determine whether this module list is empty.
*
* @return <code>true</code> if this is an empty module list.
*/
public boolean isEmpty() {
return names.isEmpty();
}
/**
* Get the size of this module list.
*
* @return The size.
*/
public int size() {
return names.size();
}
/**
* Get the module name at the specified index.
*
* @param idx The index.
* @return The module name at that position.
* @throws IndexOutOfBoundsException
* Signals that the index is out of range.
*/
public ModuleName get(int idx) {
return names.get(idx);
}
/**
* Rename this module list. This method {@link
* ModuleName#rename(ModuleMap) renames} all module names in this
* module list using the specified module map.
*
* @param renaming The module map.
* @return This list.
*/
public ModuleList rename(ModuleMap renaming) {
final int length = names.size();
for (int i=0; i<length; i++) {
names.set(i, names.get(i).rename(renaming));
}
return this;
}
public String toString() {
StringBuilder buf = new StringBuilder();
Iterator<?> iter = names.iterator();
buf.append('(');
while (iter.hasNext()) {
buf.append(iter.next().toString());
if (iter.hasNext()) {
buf.append(", ");
}
}
buf.append(')');
return buf.toString();
}
}