| 1 package gnu.lists; 4 5 import java.util.NoSuchElementException ; 6 7 22 23 public class SeqPosition 24 implements 25 26 java.util.ListIterator , 27 28 java.util.Enumeration  29 { 30 35 public AbstractSequence sequence; 36 37 41 public int ipos; 42 43 public SeqPosition() 44 { 45 } 46 47 public SeqPosition(AbstractSequence seq) 48 { 49 this.sequence = seq; 50 } 51 52 public SeqPosition(AbstractSequence seq, int offset, boolean isAfter) 53 { 54 this.sequence = seq; 55 ipos = seq.createPos(offset, isAfter); 56 } 57 58 public SeqPosition(AbstractSequence seq, int ipos) 59 { 60 this.sequence = seq; 61 this.ipos = ipos; 62 } 63 64 67 public static SeqPosition make(AbstractSequence seq, int ipos) 68 { 69 return new SeqPosition(seq, seq.copyPos(ipos)); 70 } 71 72 public SeqPosition copy () 73 { 74 return new SeqPosition(sequence, sequence.copyPos(getPos())); 75 } 76 77 public final void gotoStart(AbstractSequence seq) 78 { 79 setPos(seq, seq.startPos()); 80 } 81 82 public final void gotoEnd(AbstractSequence seq) 83 { 84 setPos(seq, seq.endPos()); 85 } 86 87 92 public boolean gotoChildrenStart() 93 { 94 int child = sequence.firstChildPos(getPos()); 95 if (child == 0) 96 return false; 97 ipos = child; 98 return true; 99 } 100 101 103 public final boolean hasMoreElements() 104 { 105 return hasNext(); 106 } 107 108 109 public boolean hasNext() 110 { 111 return sequence.hasNext(getPos()); 112 } 113 114 115 public int getNextKind() 116 { 117 return sequence.getNextKind(getPos()); 118 } 119 120 121 public String getNextTypeName() 122 { 123 return sequence.getNextTypeName(getPos()); 124 } 125 126 127 public Object getNextTypeObject() 128 { 129 return sequence.getNextTypeObject(getPos()); 130 } 131 132 133 public boolean hasPrevious() 134 { 135 return sequence.hasPrevious(getPos()); 136 } 137 138 139 public Object next() 140 { 141 Object result = getNext(); 142 if (result == Sequence.eofValue || ! gotoNext()) 143 throw new NoSuchElementException (); 144 return result; 145 } 146 147 150 public boolean gotoNext() 151 { 152 int next = sequence.nextPos(ipos); 153 if (next != 0) 154 { 155 ipos = next; 156 return true; 157 } 158 else 159 { 160 ipos = -1; 161 return false; 162 } 163 } 164 165 168 public boolean gotoPrevious() 169 { 170 int prev = sequence.previousPos(ipos); 171 if (prev != -1) 172 { 173 ipos = prev; 174 return true; 175 } 176 else 177 { 178 ipos = 0; 179 return false; 180 } 181 } 182 183 184 public Object previous() 185 { 186 Object result = getPrevious(); 187 if (result == Sequence.eofValue || ! gotoPrevious()) 188 throw new NoSuchElementException (); 189 return result; 190 } 191 192 193 public final Object nextElement() 194 { 195 return next(); 196 } 197 198 203 public Object getNext() 204 { 205 return sequence.getPosNext(getPos()); 206 } 207 208 213 public Object getPrevious() 214 { 215 return sequence.getPosPrevious(getPos()); 216 } 217 218 219 public int nextIndex() 220 { 221 return sequence.nextIndex(getPos()); 222 } 223 224 public final int fromEndIndex() 225 { 226 return sequence.fromEndIndex(getPos()); 227 } 228 229 public int getContainingSequenceSize() 230 { 231 return sequence.getContainingSequenceSize(getPos()); 232 } 233 234 235 public final int previousIndex() 236 { 237 return sequence.nextIndex(getPos()) - 1; 238 } 239 240 246 public boolean isAfter() 247 { 248 return sequence.isAfterPos(getPos()); 249 } 250 251 public final void set(Object value) 252 { 253 if (isAfter()) 254 setPrevious(value); 255 else 256 setNext(value); 257 } 258 259 public void setNext (Object value) 260 { 261 sequence.setPosNext(getPos(), value); 262 } 263 264 public void setPrevious (Object value) 265 { 266 sequence.setPosPrevious(getPos(), value); 267 } 268 269 public void remove() 270 { 271 sequence.removePos(getPos(), isAfter() ? -1 : 1); 272 } 273 274 public void add(Object o) 275 { 276 setPos(sequence.addPos(getPos(), o)); 277 } 278 279 286 public int getPos () 287 { 288 return ipos; 289 } 290 291 public void setPos (AbstractSequence seq, int ipos) 292 { 293 if (sequence != null) 294 sequence.releasePos(getPos()); 295 this.ipos = ipos; 296 this.sequence = seq; 297 } 298 299 public void setPos (int ipos) 300 { 301 if (sequence != null) 302 sequence.releasePos(getPos()); 303 this.ipos = ipos; 304 } 305 306 public void set (AbstractSequence seq, int index, boolean isAfter) 307 { 308 if (sequence != null) 309 sequence.releasePos(ipos); 310 sequence = seq; 311 ipos = seq.createPos(index, isAfter); 312 } 313 314 public void set (SeqPosition pos) 315 { 316 if (sequence != null) 317 sequence.releasePos(ipos); 318 sequence = pos.sequence; 319 pos.ipos = sequence.copyPos(pos.ipos); 320 } 321 322 public void release() 323 { 324 if (sequence != null) 325 { 326 sequence.releasePos(getPos()); 327 sequence = null; 328 } 329 } 330 331 public void finalize() 332 { 333 release(); 334 } 335 336 public String toString() 337 { 338 if (sequence == null) 339 return toInfo(); 340 Object item = sequence.getPosNext(ipos); 341 if (item == null) 342 return toInfo(); 343 return item.toString(); 344 } 345 346 public String toInfo() 347 { 348 StringBuffer sbuf = new StringBuffer (60); 349 sbuf.append('{'); 350 if (sequence == null) 351 sbuf.append("null sequence"); 352 else 353 { 354 sbuf.append(sequence.getClass().getName()); 355 sbuf.append('@'); 356 sbuf.append(System.identityHashCode(sequence)); 357 } 358 sbuf.append(" ipos: "); 359 sbuf.append(ipos); 360 367 sbuf.append('}'); 368 return sbuf.toString(); 369 } 370 } 371 | Popular Tags |