001/* 002 * $Id: PolynomialComparator.java 5687 2017-01-03 08:44:03Z kredel $ 003 */ 004 005package edu.jas.poly; 006 007 008import java.io.Serializable; 009import java.util.Comparator; 010 011import edu.jas.structure.RingElem; 012 013 014/** 015 * Comparator for polynomials. 016 * @param <C> coefficient type 017 * @author Heinz Kredel 018 */ 019public 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 * Hash code for this PolynomialComparator. 079 * @see java.lang.Object#hashCode() 080 */ 081 @Override 082 public int hashCode() { 083 return tord.hashCode(); 084 } 085 086 087 /** 088 * toString. 089 */ 090 @Override 091 public String toString() { 092 return "PolynomialComparator(" + tord + ")"; 093 } 094 095}