001
002/*
003 * $Id$
004 */
005
006package edu.jas.poly;
007
008
009import java.util.Iterator;
010import java.util.Map;
011import java.util.SortedMap;
012
013import edu.jas.structure.RingElem;
014
015
016/**
017 * Iterator over monomials of a polynomial. Adaptor for
018 * val.entrySet().iterator().
019 * @author Heinz Kredel
020 */
021
022public class IndexListPolyIterator<C extends RingElem<C>> implements Iterator<IndexListMonomial<C>> {
023
024
025    /**
026     * Internal iterator over polynomial map.
027     */
028    protected final Iterator<Map.Entry<IndexList, C>> ms;
029
030
031    /**
032     * Constructor of polynomial iterator.
033     * @param m SortetMap of a polynomial.
034     */
035    public IndexListPolyIterator(SortedMap<IndexList, C> m) {
036        ms = m.entrySet().iterator();
037    }
038
039
040    /**
041     * Test for availability of a next monomial.
042     * @return true if the iteration has more monomials, else false.
043     */
044    public boolean hasNext() {
045        return ms.hasNext();
046    }
047
048
049    /**
050     * Get next monomial element.
051     * @return next monomial.
052     */
053    public IndexListMonomial<C> next() {
054        return new IndexListMonomial<C>(ms.next());
055    }
056
057
058    /**
059     * Remove the last monomial returned from underlying set if allowed.
060     */
061    public void remove() {
062        ms.remove();
063    }
064
065}