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 }