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 }