1 salcianu 1.1 // ReverseViewList.java, created Thu Mar 4 11:38:44 2004 by salcianu 2 salcianu 1.1 // Copyright (C) 2003 Alexandru Salcianu <salcianu@MIT.EDU> 3 salcianu 1.1 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 salcianu 1.1 package harpoon.Util.DataStructs; 5 salcianu 1.1 6 salcianu 1.1 import java.util.List; 7 salcianu 1.1 import java.util.AbstractList; 8 salcianu 1.1 import java.util.Iterator; 9 salcianu 1.1 import java.util.ListIterator; 10 salcianu 1.1 11 salcianu 1.1 import java.io.Serializable; 12 salcianu 1.1 13 salcianu 1.1 import net.cscott.jutil.ReverseListIterator; 14 salcianu 1.1 15 salcianu 1.1 /** 16 salcianu 1.1 * <code>ReverseViewList</code> is an immutable, reverse view of a 17 salcianu 1.1 * <code>List</code>. The main thing you can do with it is iterate, 18 salcianu 1.1 * eg, <code>for(Element e : new ReverseListView(list))</code>. In 19 salcianu 1.1 * addition, you can call <code>get</code> and <code>size</code>. 20 salcianu 1.1 * 21 salcianu 1.1 * @author Alexandru Salcianu <salcianu@MIT.EDU> 22 salcianu 1.1 * @version $Id: ReverseListView.java,v 1.1 2004/03/04 22:32:26 salcianu Exp $ */ 23 salcianu 1.1 public class ReverseListView<E> 24 salcianu 1.1 extends AbstractList<E> implements Serializable { 25 salcianu 1.1 /** Creates a reverse view of <code>origList</code>. */ 26 salcianu 1.1 public ReverseListView(List<E> origList) { this.origList = origList; } 27 salcianu 1.1 private final List<E> origList; 28 salcianu 1.1 29 salcianu 1.1 // as described in the JavaDoc for AbstractList, to implement an 30 salcianu 1.1 // unmodifiable list, we only need to override get and size. 31 salcianu 1.1 /** Returns the <code>i</code>th element from the end of the 32 salcianu 1.1 original list. */ 33 salcianu 1.1 public E get(int index) { 34 salcianu 1.1 return origList.get(size() - index); 35 salcianu 1.1 } 36 salcianu 1.1 /** Returns the size of the original list. */ 37 salcianu 1.1 public int size() { return origList.size(); } 38 salcianu 1.1 39 salcianu 1.1 public Iterator<E> iterator() { return listIterator(); } 40 salcianu 1.1 public ListIterator<E> listIterator() { 41 salcianu 1.1 return new ReverseListIterator<E>(origList); 42 salcianu 1.1 } 43 salcianu 1.1 }