package games.strategy.engine.data;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
/**
* A collection of unit types.
*/
public class UnitTypeList extends GameDataComponent implements Iterable<UnitType> {
private static final long serialVersionUID = 9002927658524651749L;
private final Map<String, UnitType> m_unitTypes = new HashMap<>();
/**
* Creates new UnitTypeCollection.
*
* @param data
* game data
*/
public UnitTypeList(final GameData data) {
super(data);
}
protected void addUnitType(final UnitType type) {
m_unitTypes.put(type.getName(), type);
}
public UnitType getUnitType(final String name) {
return m_unitTypes.get(name);
}
/**
* Will return null if even a single name is not on the unit list.
*/
public Set<UnitType> getUnitTypes(final String[] names) {
final Set<UnitType> types = new HashSet<>();
for (final String name : names) {
final UnitType type = m_unitTypes.get(name);
if (type == null) {
return null;
}
types.add(type);
}
return types;
}
public int size() {
return m_unitTypes.size();
}
@Override
public Iterator<UnitType> iterator() {
return m_unitTypes.values().iterator();
}
public Set<UnitType> getAllUnitTypes() {
return new LinkedHashSet<>(m_unitTypes.values());
}
}