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 }