001    /**
002     * 
003     */
004    package org.meta_environment.eclipse.tokens;
005    
006    import java.util.Iterator;
007    
008    import aterm.ATermList;
009    import errorapi.Factory;
010    import errorapi.types.Area;
011    import errorapi.types.AreaAreas;
012    import errorapi.types.Slice;
013    
014    public class TokenIterator implements Iterator<Token> {
015            private ATermList slices;
016            private AreaAreas areas;
017            private String category;
018            private Factory eFactory;
019    
020            public TokenIterator(Factory factory, ATermList slices) {
021                    this.eFactory = factory;
022                    this.slices = slices;
023                    areas = eFactory.makeAreaAreas();
024            }
025            
026            public boolean hasNext() {
027                    return !slices.isEmpty() || !areas.isEmpty();
028            }
029    
030            public Token next() {
031                    if (areas.isEmpty() && !slices.isEmpty()) {
032                      Slice slice = eFactory.SliceFromTerm(slices.getFirst());
033                      slices = slices.getNext();
034                      areas = slice.getAreas();
035                      category = slice.getId();
036                    }
037                    
038                    if (!areas.isEmpty()) {
039                            Area area = areas.getHead();
040                            areas = areas.getTail();
041                            return new Token(category, area);
042                    }
043                    
044                    return null;
045            }
046    
047            public void remove() {
048                    throw new UnsupportedOperationException();
049            }
050    }