All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.javagimmicks.collections.ReverseList Maven / Gradle / Ivy

package net.sf.javagimmicks.collections;

import java.util.AbstractList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class ReverseList extends AbstractList
{  
   public static  ReverseList decorate(List list)
   {
      return new ReverseList(list);
   }
   
   protected final List _internalList;

   protected ReverseList(List decorated)
   {
      _internalList = decorated;
   }
   
   public List getInternalList()
   {
      return _internalList;
   }

   @Override
   public boolean add(E e)
   {
      _internalList.add(0, e);
      return true;
   }

   @Override
   public void add(int index, E element)
   {
      _internalList.add(getRevertedIndex(index) + 1, element);
   }

   @Override
   public void clear()
   {
      _internalList.clear();
   }

   @Override
   public boolean contains(Object o)
   {
      return _internalList.contains(o);
   }

   @Override
   public boolean containsAll(Collection c)
   {
      return _internalList.containsAll(c);
   }

   @Override
   public E get(int index)
   {
      return _internalList.get(getRevertedIndex(index));
   }

   @Override
   public int indexOf(Object o)
   {
      return _internalList.lastIndexOf(o);
   }

   @Override
   public boolean isEmpty()
   {
      return _internalList.isEmpty();
   }

   @Override
   public Iterator iterator()
   {
      return listIterator();
   }

   @Override
   public int lastIndexOf(Object o)
   {
      return _internalList.indexOf(o);
   }

   @Override
   public ListIterator listIterator()
   {
      return listIterator(0);
   }

   @Override
   public ListIterator listIterator(int index)
   {
      return new RevertingListIteratorDecorator(_internalList.listIterator(getRevertedIndex(index) + 1));
   }

   @Override
   public E remove(int index)
   {
      return _internalList.remove(getRevertedIndex(index));
   }

   @Override
   public boolean remove(Object o)
   {
      return _internalList.remove(o);
   }

   @Override
   public boolean removeAll(Collection c)
   {
      return _internalList.removeAll(c);
   }

   public boolean retainAll(Collection c)
   {
      return _internalList.retainAll(c);
   }

   @Override
   public E set(int index, E element)
   {
      return _internalList.set(getRevertedIndex(index), element);
   }

   @Override
   public int size()
   {
      return _internalList.size();
   }

   @Override
   public List subList(int fromIndex, int toIndex)
   {
      return new ReverseList(_internalList.subList(getRevertedIndex(toIndex) + 1, getRevertedIndex(fromIndex) + 1));
   }

   protected int getRevertedIndex(int index)
   {
      return size() - index - 1;
   }
   
   protected class RevertingListIteratorDecorator implements ListIterator
   {  
      protected final ListIterator _internalIterator;

      public RevertingListIteratorDecorator(ListIterator decorated)
      {
         _internalIterator = decorated;
      }

      public void add(E e)
      {
         _internalIterator.add(e);
         _internalIterator.previous();
      }

      public boolean hasNext()
      {
         return _internalIterator.hasPrevious();
      }

      public boolean hasPrevious()
      {
         return _internalIterator.hasNext();
      }

      public E next()
      {
         return _internalIterator.previous();
      }

      public int nextIndex()
      {
         return getRevertedIndex(_internalIterator.previousIndex());
      }

      public E previous()
      {
         return _internalIterator.next();
      }

      public int previousIndex()
      {
         return getRevertedIndex(_internalIterator.nextIndex());
      }

      public void remove()
      {
         _internalIterator.remove();
      }

      public void set(E e)
      {
         _internalIterator.set(e);
      }
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy