001/*
002 * $Id: AbstractPair.java 3416 2010-12-19 15:45:06Z kredel $
003 */
004
005package edu.jas.gb;
006
007import java.io.Serializable;
008
009import edu.jas.structure.RingElem;
010
011import edu.jas.poly.ExpVector;
012import edu.jas.poly.GenPolynomial;
013
014
015/**
016 * Serializable abstract subclass to hold pairs of polynomials.
017 * @param <C> coefficient type
018 * @author Heinz Kredel.
019 */
020public abstract class AbstractPair<C extends RingElem<C> > 
021                      implements Serializable {
022
023    public final ExpVector e;
024    public final GenPolynomial<C> pi;
025    public final GenPolynomial<C> pj;
026    public final int i;
027    public final int j;
028
029
030    /**
031     * AbstractPair constructor.
032     * @param a polynomial i.
033     * @param b polynomial j.
034     * @param i first index.
035     * @param j second index.
036     */
037    public AbstractPair(GenPolynomial<C> a, GenPolynomial<C> b, 
038                        int i, int j) {
039        this(a.leadingExpVector().lcm(b.leadingExpVector()),a,b,i,j); 
040    }
041
042
043    /**
044     * AbstractPair constructor.
045     * @param lcm least common multiple of lt(a) and lt(b).
046     * @param a polynomial i.
047     * @param b polynomial j.
048     * @param i first index.
049     * @param j second index.
050     */
051    public AbstractPair(ExpVector lcm, GenPolynomial<C> a, GenPolynomial<C> b, 
052                        int i, int j) {
053        e = lcm;
054        pi = a; 
055        pj = b; 
056        this.i = i; 
057        this.j = j;
058    }
059
060
061    /**
062     * toString.
063     */
064    @Override
065    public String toString() {
066        return "pair(" + i + "," + j + "{" + pi.length() + "," + pj.length() + "},"
067                       + e + ")";
068    }
069
070}