KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > killingar > forum > internal > SubsetIterator


1 /* Copyright 2000-2005 Anders Hovmöller
2  *
3  * The person or persons who have associated their work with
4  * this document (the "Dedicator") hereby dedicate the entire
5  * copyright in the work of authorship identified below (the
6  * "Work") to the public domain.
7  *
8  * Dedicator makes this dedication for the benefit of the
9  * public at large and to the detriment of Dedicator's heirs
10  * and successors. Dedicator intends this dedication to be an
11  * overt act of relinquishment in perpetuity of all present
12  * and future rights under copyright law, whether vested or
13  * contingent, in the Work. Dedicator understands that such
14  * relinquishment of all rights includes the relinquishment of
15  * all rights to enforce (by lawsuit or otherwise) those
16  * copyrights in the Work.
17  *
18  * Dedicator recognizes that, once placed in the public
19  * domain, the Work may be freely reproduced, distributed,
20  * transmitted, used, modified, built upon, or otherwise
21  * exploited by anyone for any purpose, commercial or non-
22  * commercial, and in any way, including by methods that have
23  * not yet been invented or conceived.
24  */

25
26 package net.killingar.forum.internal;
27
28 import java.util.Iterator JavaDoc;
29
30 public class SubsetIterator implements Iterator JavaDoc
31 {
32     Object JavaDoc next;
33     Iterator JavaDoc i;
34     int start;
35     int end;
36     boolean started = false;
37     boolean ended = false;
38     int index = 0;
39     //int count = 0;
40

41     /**
42      * Start and end indexes are inclusive.
43      * new SubsetIterator(2, 5, myIterator) will give you an iterator of elements with index 2, 3, 4 and 5.
44      */

45     public SubsetIterator(int inStart, int inEnd, Iterator JavaDoc in)
46     {
47         i = in;
48         start = inStart;
49         end = inEnd+1;
50
51     if (in.hasNext())
52             nextImpl();
53     }
54
55     public boolean hasNext()
56     {
57         return next != null;
58     }
59
60     public Object JavaDoc next()
61     {
62         if (next == null)
63             throw new IllegalStateException JavaDoc();
64
65         //count++;
66

67         return nextImpl();
68     }
69
70     private Object JavaDoc nextImpl()
71     {
72     Object JavaDoc ret = next;
73
74         if (ended)
75             next = null;
76         else
77         {
78             if (!started)
79             {
80                 next = null;
81                 while (i.hasNext())
82                 {
83                     Object JavaDoc foo = i.next();
84                     if (index >= start)
85                     {
86                         next = foo;
87                         started = true;
88
89                         index++;
90
91                         break;
92                     }
93
94                     index++;
95                 }
96             }
97             else
98             {
99                 if (i.hasNext())
100                 {
101                     next = i.next();
102                     index++;
103
104                     if (index > end)
105                     {
106                         ended = true;
107                         next = null;
108                     }
109                 }
110                 else
111                     next = null;
112             }
113         }
114
115         return ret;
116     }
117
118     public void remove()
119     {
120         throw new UnsupportedOperationException JavaDoc();
121     }
122 }
123
Popular Tags