001/*
002 * $Id$
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>>
020                implements Serializable, 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 &lt; p2 ) and +1 if ( p1 &gt; 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}