Author: j16sdiz
Date: 2009-02-22 11:20:57 +0000 (Sun, 22 Feb 2009)
New Revision: 25759

Modified:
   trunk/freenet/src/freenet/support/DoublyLinkedListImpl.java
Log:
Fix Build: New Generic for DoublyLinkedListImpl (bug 2512)

Modified: trunk/freenet/src/freenet/support/DoublyLinkedListImpl.java
===================================================================
--- trunk/freenet/src/freenet/support/DoublyLinkedListImpl.java 2009-02-22 
11:20:23 UTC (rev 25758)
+++ trunk/freenet/src/freenet/support/DoublyLinkedListImpl.java 2009-02-22 
11:20:57 UTC (rev 25759)
@@ -11,15 +11,15 @@
  * TODO: there are still some unimplemented methods
  *       -- it remains to be seen if they are needed at all
  */
-public class DoublyLinkedListImpl<T> implements DoublyLinkedList<T>{
+public class DoublyLinkedListImpl<T extends DoublyLinkedList.Item<? extends 
T>> implements DoublyLinkedList<T> {
 
     protected int size;
-       protected DoublyLinkedList.Item<T> _firstItem, _lastItem;
+       protected T _firstItem, _lastItem;
 
-       @Override
-    public final DoublyLinkedListImpl<T> clone() {
-        return new DoublyLinkedListImpl<T>(this);
-    }
+       //@Override
+       //public final DoublyLinkedListImpl<T> clone() {
+       //    return new DoublyLinkedListImpl<T>(this);
+       //}
     
     /**
      * A new list with no items.
@@ -28,41 +28,43 @@
         clear();
     }
 
-       protected DoublyLinkedListImpl(DoublyLinkedList.Item<T> _h, 
DoublyLinkedList.Item<T> _t, int size) {
+       protected DoublyLinkedListImpl(T _h, T _t, int size) {
                _firstItem = _h;
                _lastItem = _t;
         
-        DoublyLinkedList.Item i = _firstItem;
+        T i = _firstItem;
         while (i != null ) {
                i.setParent(this);
-               i = i.getNext();
+                       i = i.getNext();
         }
         
         this.size = size;
     }
 
+       //      /**
+       //       * 
+       //       * XXX: FIXME this doesn't really work. it use .clone() method
+       //       * 
+       //       * @param impl
+       //       */
+       //    protected DoublyLinkedListImpl(DoublyLinkedListImpl<T> impl) {
+       //        this();
+       //        Enumeration<T> e = impl.forwardElements();
+       //        boolean checked = false;
+       //        for(;e.hasMoreElements();) {
+       //                      DoublyLinkedListImpl.Item oi = 
(DoublyLinkedListImpl.Item) e.nextElement();
+       //                      T i = (T) oi.clone();
+       //            if(!checked) {
+       //                checked = true;
+       //                
if(!i.getClass().getName().equals(oi.getClass().getName())) {
+       //                    System.err.println("Clone constructor failed for 
"+oi+": "+i);
+       //                    new Exception("error").printStackTrace();
+       //                }
+       //            }
+       //            this.push(i);
+       //        }
+       //    }
 
-    /**
-     * @param impl
-     */
-    protected DoublyLinkedListImpl(DoublyLinkedListImpl impl) {
-        this();
-        Enumeration<DoublyLinkedListImpl.Item<T>> e = impl.forwardElements();
-        boolean checked = false;
-        for(;e.hasMoreElements();) {
-            DoublyLinkedListImpl.Item<T> oi = e.nextElement();
-            DoublyLinkedList.Item<T> i = oi.clone();
-            if(!checked) {
-                checked = true;
-                if(!i.getClass().getName().equals(oi.getClass().getName())) {
-                    System.err.println("Clone constructor failed for "+oi+": 
"+i);
-                    new Exception("error").printStackTrace();
-                }
-            }
-            this.push(i);
-        }
-    }
-
     //=== DoublyLinkedList implementation 
======================================
 
     /**
@@ -75,15 +77,15 @@
                if (_firstItem == null)
                        return;
 
-               DoublyLinkedList.Item<T> pos = _firstItem;
-               DoublyLinkedList.Item<T> opos;
+               T pos = _firstItem;
+               T opos;
 
        while(true) {
                if(pos == null) break;
                pos.setParent(null);
                pos.setPrev(null);
                opos = pos;
-               pos = pos.getNext();
+                       pos = pos.getNext();
                opos.setNext(null);
        }
 
@@ -115,7 +117,7 @@
         return forwardElements();
     }
 
-    public boolean contains(DoublyLinkedList.Item<T> item) {
+       public boolean contains(T item) {
        for(T i : this) {
                if(i == item)
                        return true;
@@ -126,14 +128,14 @@
     /**
      * {...@inheritdoc}
      */
-    public final DoublyLinkedList.Item<T> head() {
+       public final T head() {
                return size == 0 ? null : _firstItem;
     }
 
     /**
      * {...@inheritdoc}
      */
-    public final DoublyLinkedList.Item<T> tail() {
+       public final T tail() {
                return size == 0 ? null : _lastItem;
     }
 
@@ -142,14 +144,14 @@
     /**
      * {...@inheritdoc}
      */
-    public final void unshift(DoublyLinkedList.Item<T> i) {
+       public final void unshift(T i) {
                insertNext(null, i);
     }
     
     /**
      * {...@inheritdoc}
      */
-    public final DoublyLinkedList.Item<T> shift() {
+       public final T shift() {
                return size == 0 ? null : remove(_firstItem);
     }
     /**
@@ -159,12 +161,12 @@
         if (n > size) n = size;
         if (n < 1) return new DoublyLinkedListImpl<T>();
 
-               DoublyLinkedList.Item<T> i = _firstItem;
+               T i = _firstItem;
                for (int m = 0; m < n - 1; ++m)
-            i = i.getNext();
+                       i = i.getNext();
 
-               DoublyLinkedList.Item<T> newTailItem = i;
-               DoublyLinkedList.Item<T> newFirstItem = newTailItem.getNext();
+               T newTailItem = i;
+               T newFirstItem = newTailItem.getNext();
                newTailItem.setNext(null);
 
                DoublyLinkedList<T> newlist = new 
DoublyLinkedListImpl<T>(_firstItem, newTailItem, n);
@@ -185,14 +187,14 @@
     /**
      * {...@inheritdoc}
      */
-    public final void push(DoublyLinkedList.Item<T> i) {
+       public final void push(T i) {
                insertPrev(null, i);
     }
     
     /**
      * {...@inheritdoc}
      */
-    public final DoublyLinkedList.Item<T> pop() {
+       public final T pop() {
                return size == 0 ? null : remove(_lastItem);
     }
 
@@ -203,12 +205,12 @@
         if (n > size) n = size;
         if (n < 1) return new DoublyLinkedListImpl<T>();
 
-               DoublyLinkedList.Item<T> i = _lastItem;
+               T i = _lastItem;
                for (int m = 0; m < n - 1; ++m)
-            i = i.getPrev();
+                       i = i.getPrev();
 
-               DoublyLinkedList.Item<T> newFirstItem = i;
-               DoublyLinkedList.Item<T> newLastItem = newFirstItem.getPrev();
+               T newFirstItem = i;
+               T newLastItem = newFirstItem.getPrev();
                newFirstItem.setPrev(null);
 
                DoublyLinkedList<T> newlist = new 
DoublyLinkedListImpl<T>(newFirstItem, _lastItem, n);
@@ -228,29 +230,29 @@
     /**
      * {...@inheritdoc}
      */
-    public final boolean hasNext(DoublyLinkedList.Item<T> i) {
-        DoublyLinkedList.Item<T> next = i.getNext();
+       public final boolean hasNext(T i) {
+               T next = i.getNext();
                return next != null;
     }
     /**
      * {...@inheritdoc}
      */
-    public final boolean hasPrev(DoublyLinkedList.Item<T> i) {
-        DoublyLinkedList.Item<T> prev = i.getPrev();
+       public final boolean hasPrev(T i) {
+               T prev = i.getPrev();
                return prev != null;
     }
     /**
      * {...@inheritdoc}
      */
-    public final DoublyLinkedList.Item<T> next(DoublyLinkedList.Item<T> i) {
-        DoublyLinkedList.Item<T> next = i.getNext();
+       public final T next(T i) {
+               T next = i.getNext();
                return next;
     }
     /**
      * {...@inheritdoc}
      */
-    public final DoublyLinkedList.Item<T> prev(DoublyLinkedList.Item<T> i) {
-        DoublyLinkedList.Item<T> prev = i.getPrev();
+       public final T prev(T i) {
+               T prev = i.getPrev();
                return prev;
     }
 
@@ -260,14 +262,14 @@
     /**
      * {...@inheritdoc}
      */
-    public DoublyLinkedList.Item<T> remove(DoublyLinkedList.Item<T> i) {
+       public T remove(T i) {
        if (i.getParent() == null || isEmpty())
                        return null; // not in list
        if (i.getParent() != this)
                throw new PromiscuousItemException(i, i.getParent());
 
-               DoublyLinkedList.Item<T> next = i.getNext();
-               DoublyLinkedList.Item<T> prev = i.getPrev();
+               T next = i.getNext();
+               T prev = i.getPrev();
 
                if ((next == null) && (prev == null)) // only item in list
                        assert size == 1;
@@ -298,7 +300,7 @@
     /**
      * {...@inheritdoc}
      */
-    public void insertPrev(DoublyLinkedList.Item<T> i, 
DoublyLinkedList.Item<T> j) {
+       public void insertPrev(T i, T j) {
        if (j.getParent() != null)
                throw new PromiscuousItemException(j, j.getParent());
         if ((j.getNext() != null) || (j.getPrev() != null))
@@ -323,7 +325,7 @@
                                throw new PromiscuousItemException(i, 
i.getParent()); // different trace to make easier debugging
                        if (i.getParent() != this)
                                throw new PromiscuousItemException(i, 
i.getParent());
-                       DoublyLinkedList.Item<T> prev = i.getPrev();
+                       T prev = i.getPrev();
                        if (prev == null) {
                                if (i != _firstItem)
                                        throw new VirginItemException(i);
@@ -342,7 +344,7 @@
     /**
      * {...@inheritdoc}
      */
-    public void insertNext(DoublyLinkedList.Item<T> i, 
DoublyLinkedList.Item<T> j) {
+       public void insertNext(T i, T j) {
        if (j.getParent() != null)
                throw new PromiscuousItemException(j, i.getParent());
         if ((j.getNext() != null) || (j.getPrev() != null))
@@ -365,7 +367,7 @@
                } else {
                        if (i.getParent() != this)
                                throw new PromiscuousItemException(i, 
i.getParent());
-                       DoublyLinkedList.Item next = i.getNext();
+                       T next = i.getNext();
                        if (next == null) {
                                if (i != _lastItem)
                                        throw new VirginItemException(i);
@@ -398,14 +400,10 @@
     }
 
        private class ForwardWalker implements Enumeration<T> {
-        protected DoublyLinkedList.Item<T> next;
+               protected T next;
         protected ForwardWalker() {
                        next = _firstItem;
         }
-        protected ForwardWalker(DoublyLinkedList.Item<T> startAt,
-                                boolean inclusive) {
-            next = (inclusive ? startAt : startAt.getNext());
-        }
         public final boolean hasMoreElements() {
                        return next != null;
         }
@@ -413,21 +411,17 @@
                public T nextElement() {
                        if (next == null)
                 throw new NoSuchElementException();
-            DoublyLinkedList.Item<T> result = next;
+                       T result = next;
             next = next.getNext();
-                       return (T) result;
+                       return result;
         }
     }
 
        private class ReverseWalker implements Enumeration<T> {
-        protected DoublyLinkedList.Item<T> next;
+               protected T next;
         protected ReverseWalker() {
                        next = _lastItem;
         }
-        protected ReverseWalker(DoublyLinkedList.Item<T> startAt,
-                                boolean inclusive) {
-            next = (inclusive ? startAt : startAt.getPrev());
-        }
         public final boolean hasMoreElements() {
                        return next != null;
         }
@@ -435,47 +429,54 @@
                public T nextElement() {
                        if (next == null)
                 throw new NoSuchElementException();
-            DoublyLinkedList.Item<T> result = next;
+                       T result = next;
            if(next == null) throw new IllegalStateException("next==null");
             next = next.getPrev();
-                       return (T) result;
+                       return result;
         }
     }
 
 
     //=== list element ====================================================
 
-    public static class Item<T> implements DoublyLinkedList.Item<T> {
-        private DoublyLinkedList.Item<T> prev;
-        private DoublyLinkedList.Item<T> next;
-        private DoublyLinkedList list;
-               @Override
-        public DoublyLinkedList.Item<T> clone() {
-            if(getClass() != Item.class)
-                throw new RuntimeException("Must implement clone() for 
"+getClass());
-            return new Item<T>();
-        }
-        public final DoublyLinkedList.Item getNext() {
+       public static class Item<T extends DoublyLinkedListImpl.Item<?>> 
implements DoublyLinkedList.Item<T> {
+               private T prev;
+               private T next;
+               private DoublyLinkedList<? super T> list;
+
+               //              @Override
+               //              public T clone() {
+               //            if(getClass() != Item.class)
+               //                throw new RuntimeException("Must implement 
clone() for "+getClass());
+               //                      return (T) new Item<T>();
+               //        }
+
+               public final T getNext() {
             return next;
         }
-        public final DoublyLinkedList.Item setNext(DoublyLinkedList.Item<T> i) 
{
-            DoublyLinkedList.Item<T> old = next;
-            next = i;
+
+               public final T setNext(DoublyLinkedList.Item<?> i) {
+                       T old = next;
+                       next = (T) i;
             return old;
         }
-        public final DoublyLinkedList.Item getPrev() {
+
+               public final T getPrev() {
             return prev;
         }
-        public final DoublyLinkedList.Item setPrev(DoublyLinkedList.Item<T> i) 
{
-            DoublyLinkedList.Item<T> old = prev;
-            prev = i;
+
+               public final T setPrev(DoublyLinkedList.Item<?> i) {
+                       T old = prev;
+                       prev = (T) i;
             return old;
         }
-               public DoublyLinkedList getParent() {
+
+               public DoublyLinkedList<? super T> getParent() {
                        return list;
                }
-               public DoublyLinkedList setParent(DoublyLinkedList<T> l) {
-                       DoublyLinkedList old = list;
+
+               public DoublyLinkedList<? super T> setParent(DoublyLinkedList<? 
super T> l) {
+                       DoublyLinkedList<? super T> old = list;
                        list = l;
                        return old;
                }

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to