Return-Path: Delivered-To: apmail-jakarta-commons-dev-archive@apache.org Received: (qmail 93774 invoked from network); 15 Jan 2003 21:55:50 -0000 Received: from exchange.sun.com (192.18.33.10) by daedalus.apache.org with SMTP; 15 Jan 2003 21:55:50 -0000 Received: (qmail 24466 invoked by uid 97); 15 Jan 2003 21:57:12 -0000 Delivered-To: qmlist-jakarta-archive-commons-dev@jakarta.apache.org Received: (qmail 24415 invoked by uid 97); 15 Jan 2003 21:57:12 -0000 Mailing-List: contact commons-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Jakarta Commons Developers List" Reply-To: "Jakarta Commons Developers List" Delivered-To: mailing list commons-dev@jakarta.apache.org Received: (qmail 24404 invoked by uid 97); 15 Jan 2003 21:57:11 -0000 X-Antivirus: nagoya (v4218 created Aug 14 2002) Date: 15 Jan 2003 21:55:43 -0000 Message-ID: <20030115215543.10980.qmail@icarus.apache.org> From: scolebourne@apache.org To: jakarta-commons-cvs@apache.org Subject: cvs commit: jakarta-commons/collections/src/java/org/apache/commons/collections IteratorUtils.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N scolebourne 2003/01/15 13:55:43 Modified: collections/src/java/org/apache/commons/collections IteratorUtils.java Log: Make Empty Iterators implement Resetable Handle Unmodifiable/Resetable combination iterators Expose Resetable Iterators as return types from methods Revision Changes Path 1.9 +97 -29 jakarta-commons/collections/src/java/org/apache/commons/collections/IteratorUtils.java Index: IteratorUtils.java =================================================================== RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/IteratorUtils.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- IteratorUtils.java 10 Jan 2003 20:21:23 -0000 1.8 +++ IteratorUtils.java 15 Jan 2003 21:55:43 -0000 1.9 @@ -83,6 +83,8 @@ import org.apache.commons.collections.iterators.LoopingIterator; import org.apache.commons.collections.iterators.ObjectArrayIterator; import org.apache.commons.collections.iterators.ObjectArrayListIterator; +import org.apache.commons.collections.iterators.ResetableIterator; +import org.apache.commons.collections.iterators.ResetableListIterator; import org.apache.commons.collections.iterators.SingletonIterator; import org.apache.commons.collections.iterators.SingletonListIterator; import org.apache.commons.collections.iterators.TransformIterator; @@ -91,9 +93,10 @@ * instances. The implementations are provided in the * {@link org.apache.commons.collections.iterators} subpackage. * - * @author Stephen Colebourne - * @version $Revision$ $Date$ * @since Commons Collections 2.1 + * @version $Revision$ $Date$ + * + * @author Stephen Colebourne */ public class IteratorUtils { // validation is done in this class in certain cases because the @@ -125,8 +128,8 @@ * * @return an iterator over nothing */ - public static Iterator emptyIterator() { - return EMPTY_ITERATOR; + public static ResetableIterator emptyIterator() { + return (ResetableIterator) EMPTY_ITERATOR; } /** @@ -137,8 +140,8 @@ * * @return a list iterator over nothing */ - public static ListIterator emptyListIterator() { - return EMPTY_LIST_ITERATOR; + public static ResetableListIterator emptyListIterator() { + return (ResetableListIterator) EMPTY_LIST_ITERATOR; } /** @@ -150,7 +153,7 @@ * @param object the single object over which to iterate * @return a singleton iterator over the object */ - public static Iterator singletonIterator(Object object) { + public static ResetableIterator singletonIterator(Object object) { return new SingletonIterator(object); } @@ -163,7 +166,7 @@ * @param object the single object over which to iterate * @return a singleton list iterator over the object */ - public static ListIterator singletonListIterator(Object object) { + public static ResetableListIterator singletonListIterator(Object object) { return new SingletonListIterator(object); } @@ -177,7 +180,7 @@ * @return an iterator over the array * @throws NullPointerException if array is null */ - public static Iterator arrayIterator(Object[] array) { + public static ResetableIterator arrayIterator(Object[] array) { return new ObjectArrayIterator(array); } @@ -192,7 +195,7 @@ * @throws IllegalArgumentException if the array is not an array * @throws NullPointerException if array is null */ - public static Iterator arrayIterator(Object array) { + public static ResetableIterator arrayIterator(Object array) { return new ArrayIterator(array); } @@ -205,7 +208,7 @@ * @throws IndexOutOfBoundsException if start is less than zero * @throws NullPointerException if array is null */ - public static Iterator arrayIterator(Object[] array, int start) { + public static ResetableIterator arrayIterator(Object[] array, int start) { return new ObjectArrayIterator(array, start); } @@ -222,7 +225,7 @@ * @throws IndexOutOfBoundsException if start is less than zero * @throws NullPointerException if array is null */ - public static Iterator arrayIterator(Object array, int start) { + public static ResetableIterator arrayIterator(Object array, int start) { return new ArrayIterator(array, start); } @@ -237,7 +240,7 @@ * @throws IllegalArgumentException if end is before start * @throws NullPointerException if array is null */ - public static Iterator arrayIterator(Object[] array, int start, int end) { + public static ResetableIterator arrayIterator(Object[] array, int start, int end) { return new ObjectArrayIterator(array, start, end); } @@ -256,7 +259,7 @@ * @throws IllegalArgumentException if end is before start * @throws NullPointerException if array is null */ - public static Iterator arrayIterator(Object array, int start, int end) { + public static ResetableIterator arrayIterator(Object array, int start, int end) { return new ArrayIterator(array, start, end); } @@ -267,7 +270,7 @@ * @return a list iterator over the array * @throws NullPointerException if array is null */ - public static ListIterator arrayListIterator(Object[] array) { + public static ResetableListIterator arrayListIterator(Object[] array) { return new ObjectArrayListIterator(array); } @@ -282,7 +285,7 @@ * @throws IllegalArgumentException if the array is not an array * @throws NullPointerException if array is null */ - public static ListIterator arrayListIterator(Object array) { + public static ResetableListIterator arrayListIterator(Object array) { return new ArrayListIterator(array); } @@ -295,7 +298,7 @@ * @throws IndexOutOfBoundsException if start is less than zero * @throws NullPointerException if array is null */ - public static ListIterator arrayListIterator(Object[] array, int start) { + public static ResetableListIterator arrayListIterator(Object[] array, int start) { return new ObjectArrayListIterator(array, start); } @@ -312,7 +315,7 @@ * @throws IndexOutOfBoundsException if start is less than zero * @throws NullPointerException if array is null */ - public static ListIterator arrayListIterator(Object array, int start) { + public static ResetableListIterator arrayListIterator(Object array, int start) { return new ArrayListIterator(array, start); } @@ -327,7 +330,7 @@ * @throws IllegalArgumentException if end is before start * @throws NullPointerException if array is null */ - public static ListIterator arrayListIterator(Object[] array, int start, int end) { + public static ResetableListIterator arrayListIterator(Object[] array, int start, int end) { return new ObjectArrayListIterator(array, start, end); } @@ -346,7 +349,7 @@ * @throws IllegalArgumentException if end is before start * @throws NullPointerException if array is null */ - public static ListIterator arrayListIterator(Object array, int start, int end) { + public static ResetableListIterator arrayListIterator(Object array, int start, int end) { return new ArrayListIterator(array, start, end); } @@ -358,10 +361,13 @@ * will always throw an {@link UnsupportedOperationException} for * the {@link Iterator#remove} method. * - * @param iterator The iterator to make immutable. - * @return An immutable version of the iterator. + * @param iterator the iterator to make immutable + * @return an immutable version of the iterator */ public static Iterator unmodifiableIterator(Iterator iterator) { + if (iterator instanceof ResetableIterator) { + return new ResetableUnmodifiableIterator((ResetableIterator) iterator); + } return new UnmodifiableIterator(iterator); } @@ -371,10 +377,13 @@ * the {@link Iterator#remove}, {@link ListIterator#add} and * {@link ListIterator#set} methods. * - * @param listIterator The iterator to make immutable. - * @return An immutable version of the iterator. + * @param listIterator the iterator to make immutable + * @return an immutable version of the iterator */ public static ListIterator unmodifiableListIterator(ListIterator listIterator) { + if (listIterator instanceof ResetableListIterator) { + return new ResetableUnmodifiableListIterator((ResetableListIterator) listIterator); + } return new UnmodifiableListIterator(listIterator); } @@ -545,7 +554,7 @@ * @param coll the collection to iterate over, not null * @throws NullPointerException if the collection is null */ - public static Iterator loopingIterator(Collection coll) { + public static ResetableIterator loopingIterator(Collection coll) { if (coll == null) { throw new NullPointerException("Collection must not be null"); } @@ -751,7 +760,7 @@ /** * EmptyIterator class */ - static class EmptyIterator implements Iterator { + static class EmptyIterator implements ResetableIterator { /** * @see java.util.Iterator#hasNext() @@ -773,13 +782,20 @@ public void remove() { throw new UnsupportedOperationException("remove() not supported for empty Iterator"); } + + /** + * Reset the iterator + */ + public void reset() { + // do nothing + } } /** * EmptyListIterator class */ - static class EmptyListIterator extends EmptyIterator implements ListIterator { + static class EmptyListIterator extends EmptyIterator implements ResetableListIterator { /** * @see java.util.ListIterator#hasPrevious() @@ -831,6 +847,7 @@ * always throws an {@link java.lang.UnsupportedOperationException}. * * @author Rich Dougherty + * @author Stephen Colebourne */ static class UnmodifiableIterator implements Iterator, Serializable { @@ -842,7 +859,7 @@ /** * Create an UnmodifiableIterator. * - * @param delegate The delegate to pass all calls to. + * @param delegate the delegate to pass all calls to */ public UnmodifiableIterator(Iterator delegate) { this.delegate = delegate; @@ -863,6 +880,31 @@ } /** + * An unmodifiable resetable iterator. + * + * @author Stephen Colebourne + */ + static class ResetableUnmodifiableIterator extends UnmodifiableIterator implements ResetableIterator { + + /** + * Create a ResetableUnmodifiableIterator. + * + * @param delegate the delegate to pass all calls to + */ + public ResetableUnmodifiableIterator(ResetableIterator delegate) { + super(delegate); + } + + /** + * Reset the iterator + */ + public void reset() { + ((ResetableIterator) delegate).reset(); + } + + } + + /** * A wrapper for an {@link java.util.ListIterator} which makes it immutable. * All calls are passed through to the delegate. The {@link #remove()}, * {@link #add(Object)} and (@link #set(Object)} methods always throw an @@ -923,4 +965,30 @@ throw new UnsupportedOperationException("This iterator is immutable"); } } + + /** + * An unmodifiable resetable list iterator. + * + * @author Stephen Colebourne + */ + static class ResetableUnmodifiableListIterator extends UnmodifiableListIterator implements ResetableListIterator { + + /** + * Create a ResetableUnmodifiableListIterator. + * + * @param delegate the delegate to pass all calls to + */ + public ResetableUnmodifiableListIterator(ResetableListIterator delegate) { + super(delegate); + } + + /** + * Reset the iterator + */ + public void reset() { + ((ResetableListIterator) delegate).reset(); + } + + } + } -- To unsubscribe, e-mail: For additional commands, e-mail: