View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.collections.primitives;
18  
19  /**
20   * A bi-directional iterator over <code>boolean</code> values.
21   *
22   * @see org.apache.commons.collections.primitives.adapters.BooleanListIteratorListIterator
23   * @see org.apache.commons.collections.primitives.adapters.BooleanIteratorBooleanListIterator
24   *
25   * @since Commons Primitives 1.1
26   * @version $Revision: 480460 $ $Date: 2006-11-29 03:14:21 -0500 (Wed, 29 Nov 2006) $
27   */
28  public interface BooleanListIterator extends BooleanIterator {
29      /**
30       * Inserts the specified element into my underlying collection
31       * (optional operation).
32       * The element is inserted immediately before the next element 
33       * that would have been returned by {@link #next}, if any,
34       * and immediately after the next element that would have been 
35       * returned by {@link #previous}, if any.
36       * <p/>
37       * The new element is inserted immediately before the implied
38       * cursor. A subsequent call to {@link #previous} will return
39       * the added element, a subsequent call to {@link #next} will
40       * be unaffected.  This call increases by one the value that
41       * would be returned by a call to {@link #nextIndex} or 
42       * {@link #previousIndex}.
43       * 
44       * @param element the value to be inserted
45       * 
46       * @throws UnsupportedOperationException when this operation is not 
47       *         supported
48       * @throws IllegalArgumentException if some aspect of the specified element 
49       *         prevents it from being added
50       */
51      void add(boolean element);
52  
53      /** 
54       * Returns <code>true</code> iff I have more elements when traversed in
55       * the forward direction. (In other words, returns <code>true</code> iff
56       * a call to {@link #next} will return an element rather than throwing
57       * an exception.
58       * 
59       * @return <code>true</code> iff I have more elements when 
60       *         traversed in the forward direction
61       */
62      boolean hasNext();
63      
64      /** 
65       * Returns <code>true</code> iff I have more elements when traversed
66       * in the reverse direction. (In other words, returns <code>true</code>
67       * iff a call to {@link #previous} will return an element rather than
68       * throwing an exception.
69       * 
70       * @return <code>true</code> iff I have more elements when traversed
71       *         in the reverse direction
72       */
73      boolean hasPrevious();
74  
75      /** 
76       * Returns the next element in me when traversed in the
77       * forward direction.
78       * 
79       * @return the next element in me
80       * @throws java.util.NoSuchElementException if there is no next element
81       */          
82      boolean next();
83      
84      /** 
85       * Returns the index of the element that would be returned
86       * by a subsequent call to {@link #next}, or the number 
87       * of elements in my iteration if I have no next element.
88       * 
89       * @return the index of the next element in me
90       */          
91      int nextIndex();
92  
93      /** 
94       * Returns the next element in me when traversed in the
95       * reverse direction.
96       * 
97       * @return the previous element in me
98       * @throws java.util.NoSuchElementException if there is no previous element
99       */          
100     boolean previous();
101 
102     /** 
103      * Returns the index of the element that would be returned
104      * by a subsequent call to {@link #previous}, or 
105      * <code>-1</code> if I have no previous element.
106      * 
107      * @return the index of the previous element in me
108      */          
109     int previousIndex();
110 
111     /** 
112      * Removes from my underlying collection the last 
113      * element returned by {@link #next} or {@link #previous}
114      * (optional operation). 
115      * 
116      * @throws UnsupportedOperationException if this operation is not 
117      *         supported
118      * @throws IllegalStateException if neither {@link #next} nor
119      *         {@link #previous} has yet been called, or 
120      *         {@link #remove} or {@link #add} has already been called since 
121      *         the last call to {@link #next} or {@link #previous}.
122      */          
123     void remove();
124 
125     /** 
126      * Replaces in my underlying collection the last 
127      * element returned by {@link #next} or {@link #previous}
128      * with the specified value (optional operation). 
129      * 
130      * @param element the value to replace the last returned element with
131      * @throws UnsupportedOperationException if this operation is not 
132      *         supported
133      * @throws IllegalStateException if neither {@link #next} nor
134      *         {@link #previous} has yet been called, or 
135      *         {@link #remove} or {@link #add} has already been called since 
136      *         the last call to {@link #next} or {@link #previous}.
137      * @throws IllegalArgumentException if some aspect of the specified element 
138      *         prevents it from being added
139      */          
140     void set(boolean element);
141 }