package edu.berkeley.nlp.util;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.List;
/**
* List which returns special boundary symbols hwen get() is called outside the
* range of the list.
*
* @author Dan Klein
*/
public class BoundedList <E> extends AbstractList<E> {
private E leftBoundary;
private E rightBoundary;
private List<E> list;
/**
* Returns the object at the given index, provided the index is between 0
* (inclusive) and size() (exclusive). If the index is < 0, then a left
* boundary object is returned. If the index is >= size(), a right boundary
* object is returned. The default boundary objects are both null, unless
* other objects are specified on construction.
*/
@Override
public E get(int index) {
if (index < 0) return leftBoundary;
if (index >= list.size()) return rightBoundary;
return list.get(index);
}
@Override
public int size() {
return list.size();
}
public BoundedList(List<E> list, E leftBoundary, E rightBoundary) {
this.list = list;
this.leftBoundary = leftBoundary;
this.rightBoundary = rightBoundary;
}
public BoundedList(List<E> list, E boundary) {
this(list, boundary, boundary);
}
public BoundedList(List<E> list) {
this(list, null);
}
@Override
public List<E> subList(int fromIndex, int toIndex)
{
List<E> retVal = new ArrayList<E>(toIndex - fromIndex);
for (int i = fromIndex; i < toIndex; ++i)
{
retVal.add(get(i));
}
return retVal;
}
}