001/*
002 * $Id$
003 */
004
005package edu.jas.gb;
006
007
008import java.util.List;
009
010import edu.jas.poly.ExpVector;
011import edu.jas.poly.GenPolynomial;
012import edu.jas.structure.RingElem;
013
014
015/**
016 * Serializable subclass to hold pairs of polynomials.
017 * @param <C> coefficient type
018 * @author Heinz Kredel
019 */
020public class SigPair<C extends RingElem<C>> //extends AbstractSigPair<C>
021                implements Comparable<SigPair<C>> {
022
023
024    public final GenPolynomial<C> sigma;
025
026
027    public final SigPoly<C> pi;
028
029
030    public final SigPoly<C> pj;
031
032
033    public final List<SigPoly<C>> Gs;
034
035
036    /**
037     * SigPair constructor.
038     * @param sig signature of pair.
039     * @param a polynomial i.
040     * @param b polynomial j.
041     */
042    public SigPair(ExpVector sig, SigPoly<C> a, SigPoly<C> b, List<SigPoly<C>> Gs) {
043        this(a.poly.ring.valueOf(sig), a, b, Gs);
044    }
045
046
047    /**
048     * SigPair constructor.
049     * @param sig signature of pair.
050     * @param a polynomial i.
051     * @param b polynomial j.
052     */
053    public SigPair(GenPolynomial<C> sig, SigPoly<C> a, SigPoly<C> b, List<SigPoly<C>> Gs) {
054        this.sigma = sig;
055        pi = a;
056        pj = b;
057        this.Gs = Gs;
058    }
059
060
061    /**
062     * getter for sigma
063     */
064    GenPolynomial<C> getSigma() {
065        return sigma;
066    }
067
068
069    /**
070     * getter for sigma.degree
071     */
072    long getSigmaDegree() {
073        return sigma.degree();
074    }
075
076
077    /**
078     * toString.
079     */
080    @Override
081    public String toString() {
082        return "pair(" + sigma + " @ " + pi + ", " + pj + ")";
083    }
084
085
086    /**
087     * equals.
088     * @param ob an Object.
089     * @return true if this is equal to o, else false.
090     */
091    @Override
092    @SuppressWarnings("unchecked")
093    public boolean equals(Object ob) {
094        if (!(ob instanceof SigPair)) {
095            return false;
096            // throw new ClassCastException("SigPair "+n+" o "+o);
097        }
098        return 0 == compareTo((SigPair) ob);
099    }
100
101
102    /**
103     * compareTo used in TreeMap // not used at moment. Comparison is based on
104     * the number of the pairs.
105     * @param p a SigPair.
106     * @return 1 if (this &lt; o), 0 if (this == o), -1 if (this &gt; o).
107     */
108    public int compareTo(SigPair<C> p) {
109        return sigma.compareTo(p.sigma);
110    }
111
112
113    /**
114     * Hash code for this SigPair.
115     * @see java.lang.Object#hashCode()
116     */
117    @Override
118    public int hashCode() {
119        return (pi.hashCode() << 16) + pj.hashCode();
120    }
121
122}