001: /*
002: * Primitive Collections for Java.
003: * Copyright (C) 2002, 2003 Søren Bak
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018: */
019: package bak.pcj.adapter;
020:
021: import bak.pcj.list.ByteListIterator;
022: import bak.pcj.util.Exceptions;
023: import java.util.ListIterator;
024:
025: /**
026: * This class represents adaptions of primitive list iterators over
027: * byte values to Java Collections Framework list iterators.
028: *
029: * @author Søren Bak
030: * @version 1.2 21-08-2003 18:59
031: * @since 1.0
032: */
033: public class ByteListIteratorToListIteratorAdapter implements
034: ListIterator {
035:
036: /** The underlying primitive iterator. */
037: protected ByteListIterator iterator;
038:
039: /**
040: * Creates a new adaption of a primitive list iterator over
041: * byte values to a Java Collections Framework list iterator.
042: *
043: * @param iterator
044: * the primitive iterator to adapt.
045: *
046: * @throws NullPointerException
047: * if <tt>iterator</tt> is <tt>null</tt>.
048: */
049: public ByteListIteratorToListIteratorAdapter(
050: ByteListIterator iterator) {
051: if (iterator == null)
052: Exceptions.nullArgument("iterator");
053: this .iterator = iterator;
054: }
055:
056: /**
057: * Adds a specified element to the list at this iterator's
058: * current position.
059: *
060: * @param o
061: * the element to add.
062: *
063: * @throws UnsupportedOperationException
064: * if addition is not supported by this
065: * iterator.
066: *
067: * @throws ClassCastException
068: * if <tt>o</tt> is not of class
069: * {@link Byte Byte}.
070: *
071: * @throws NullPointerException
072: * if <tt>o</tt> is <tt>null</tt>.
073: */
074: public void add(Object o) {
075: iterator.add(((Byte) o).byteValue());
076: }
077:
078: /**
079: * Indicates whether more values can be returned by this
080: * iterator.
081: *
082: * @return <tt>true</tt> if more values can be returned
083: * by this iterator; returns <tt>false</tt>
084: * otherwise.
085: *
086: * @see #next()
087: */
088: public boolean hasNext() {
089: return iterator.hasNext();
090: }
091:
092: /**
093: * Indicates whether more values can be returned by this
094: * iterator by calling <tt>previous()</tt>.
095: *
096: * @return <tt>true</tt> if more values can be returned
097: * by this iterator in backwards direction; returns
098: * <tt>false</tt> otherwise.
099: *
100: * @see #previous()
101: */
102: public boolean hasPrevious() {
103: return iterator.hasPrevious();
104: }
105:
106: /**
107: * Returns the next value of this iterator.
108: *
109: * @return the next value of this iterator.
110: *
111: * @throws NoSuchElementException
112: * if no more elements are available from this
113: * iterator.
114: *
115: * @see #hasNext()
116: */
117: public Object next() {
118: return new Byte(iterator.next());
119: }
120:
121: /**
122: * Returns the index of the element that would be returned by
123: * a call to <tt>next()</tt>.
124: *
125: * @return the index of the element that would be returned by
126: * a call to <tt>next()</tt>.
127: *
128: * @see #next()
129: */
130: public int nextIndex() {
131: return iterator.nextIndex();
132: }
133:
134: /**
135: * Returns the previous value of this iterator.
136: *
137: * @return the previous value of this iterator.
138: *
139: * @throws NoSuchElementException
140: * if no more elements are available from this
141: * iterator in backwards direction.
142: *
143: * @see #hasPrevious()
144: */
145: public Object previous() {
146: return new Byte(iterator.previous());
147: }
148:
149: /**
150: * Returns the index of the element that would be returned by
151: * a call to <tt>previous()</tt>.
152: *
153: * @return the index of the element that would be returned by
154: * a call to <tt>previous()</tt>; if no more elements
155: * are available in backwards direction, <tt>-1</tt>
156: * is returned.
157: *
158: * @see #previous()
159: */
160: public int previousIndex() {
161: return iterator.previousIndex();
162: }
163:
164: /**
165: * Removes the last value returned from the underlying
166: * collection.
167: *
168: * @throws UnsupportedOperationException
169: * if removal is not supported by this iterator.
170: *
171: * @throws IllegalStateException
172: * if no element has been returned by this iterator
173: * yet.
174: */
175: public void remove() {
176: iterator.remove();
177: }
178:
179: /**
180: * Sets the last element returned to a specified value.
181: *
182: * @param o
183: * the new value of the element.
184: *
185: * @throws UnsupportedOperationException
186: * if replacement is not supported by this iterator.
187: *
188: * @throws IllegalStateException
189: * if no element has been returned by this iterator
190: * yet.
191: *
192: * @throws ClassCastException
193: * if <tt>o</tt> is not of class
194: * {@link Byte Byte}.
195: *
196: * @throws NullPointerException
197: * if <tt>o</tt> is <tt>null</tt>.
198: */
199: public void set(Object o) {
200: iterator.set(((Byte) o).byteValue());
201: }
202:
203: }
|