1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.mavibot.btree;
21
22
23 import java.io.IOException;
24
25 import org.apache.directory.mavibot.btree.exception.EndOfFileExceededException;
26
27
28
29
30
31
32
33 class ValueArrayCursor<V> implements ValueCursor<V>
34 {
35
36 private int currentPos;
37
38
39 private V[] valueArray;
40
41
42
43
44
45 public ValueArrayCursor( V[] valueArray )
46 {
47
48 currentPos = BEFORE_FIRST;
49 this.valueArray = valueArray;
50 }
51
52
53
54
55
56 @Override
57 public boolean hasNext()
58 {
59 return ( currentPos < valueArray.length - 1 ) && ( currentPos != AFTER_LAST );
60 }
61
62
63
64
65
66 public V next()
67 {
68 if ( valueArray == null )
69 {
70
71 return null;
72 }
73 else
74 {
75 currentPos++;
76
77 if ( currentPos == valueArray.length )
78 {
79 currentPos = AFTER_LAST;
80
81
82 return null;
83 }
84 else
85 {
86 return valueArray[currentPos];
87 }
88 }
89 }
90
91
92
93
94
95 @Override
96 public boolean hasPrev() throws EndOfFileExceededException, IOException
97 {
98 return currentPos > 0 || currentPos == AFTER_LAST;
99 }
100
101
102
103
104
105 @Override
106 public void close()
107 {
108 }
109
110
111
112
113
114 @Override
115 public void beforeFirst() throws IOException
116 {
117 currentPos = BEFORE_FIRST;
118 }
119
120
121
122
123
124 @Override
125 public void afterLast() throws IOException
126 {
127 currentPos = AFTER_LAST;
128 }
129
130
131
132
133
134 @Override
135 public V prev() throws EndOfFileExceededException, IOException
136 {
137 if ( valueArray == null )
138 {
139
140 return null;
141 }
142 else
143 {
144 if ( currentPos == AFTER_LAST )
145 {
146 currentPos = valueArray.length - 1;
147 }
148 else
149 {
150 currentPos--;
151 }
152
153 if ( currentPos == BEFORE_FIRST )
154 {
155
156 return null;
157 }
158 else
159 {
160 return valueArray[currentPos];
161 }
162 }
163 }
164
165
166
167
168
169 @Override
170 public int size()
171 {
172 return valueArray.length;
173 }
174 }