1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package jTrolog.terms;
23
24 import jTrolog.parser.Parser;
25
26 import java.util.Iterator;
27
28
29
30
31 @SuppressWarnings({ "rawtypes" })
32 class ListIterator implements Iterator {
33
34 Term hereIAmBaby;
35
36 public ListIterator(Struct origin) {
37 hereIAmBaby = origin;
38 }
39
40 public boolean hasNext() {
41 return hereIAmBaby != null;
42 }
43
44 public Object next() {
45 if (hereIAmBaby == null)
46 throw new IndexOutOfBoundsException("iterating out of list");
47 if (hereIAmBaby.equals(Term.emptyList)) {
48 hereIAmBaby = null;
49 return Term.emptyList;
50 }
51 if (hereIAmBaby instanceof Struct && ((Struct) hereIAmBaby).predicateIndicator == Parser.listSignature) {
52 Term timeToDeliver = ((Struct) hereIAmBaby).getArg(0);
53 hereIAmBaby = ((Struct) hereIAmBaby).getArg(1);
54 return timeToDeliver;
55 }
56 Term ImYours = hereIAmBaby;
57 hereIAmBaby = null;
58 return ImYours;
59 }
60
61 public void remove() {
62 throw new UnsupportedOperationException("don't delete on List iteration");
63 }
64 }