001    /*
002     * $Id: PolynomialComparator.java 3571 2011-03-18 22:02:51Z kredel $
003     */
004    
005    package edu.jas.poly;
006    
007    
008    import java.io.Serializable;
009    import java.util.Comparator;
010    
011    import edu.jas.structure.RingElem;
012    
013    
014    /**
015     * Comparator for polynomials.
016     * @param <C> coefficient type
017     * @author Heinz Kredel.
018     */
019    public class PolynomialComparator<C extends RingElem<C>> implements Serializable,
020                    Comparator<GenPolynomial<C>> {
021    
022    
023        public final TermOrder tord;
024    
025    
026        public final boolean reverse;
027    
028    
029        /**
030         * Constructor.
031         * @param t TermOrder.
032         * @param reverse flag if reverse ordering is requested.
033         */
034        public PolynomialComparator(TermOrder t, boolean reverse) {
035            tord = t;
036            this.reverse = reverse;
037        }
038    
039    
040        /**
041         * Compare polynomials.
042         * @param p1 first polynomial.
043         * @param p2 second polynomial.
044         * @return 0 if ( p1 == p2 ), -1 if ( p1 < p2 ) and +1 if ( p1 > p2 ).
045         */
046        public int compare(GenPolynomial<C> p1, GenPolynomial<C> p2) {
047            // check if p1.tord = p2.tord = tord ?
048            int s = p1.compareTo(p2);
049            //System.out.println("p1.compareTo(p2) = " + s);
050            if (reverse) {
051                return -s;
052            }
053            return s;
054        }
055    
056    
057        /**
058         * Equals test of comparator.
059         * @param o other object.
060         * @return true if this = o, else false.
061         */
062        @Override
063        public boolean equals(Object o) {
064            PolynomialComparator pc = null;
065            try {
066                pc = (PolynomialComparator) o;
067            } catch (ClassCastException ignored) {
068                return false;
069            }
070            if (pc == null) {
071                return false;
072            }
073            return tord.equals(pc.tord);
074        }
075    
076    
077        /**
078         * toString.
079         */
080        @Override
081        public String toString() {
082            return "PolynomialComparator(" + tord + ")";
083        }
084    
085    }