001/*
002 * $Id$
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    protected int s;
029
030
031    /**
032     * AbstractPair constructor.
033     * @param a polynomial i.
034     * @param b polynomial j.
035     * @param i first index.
036     * @param j second index.
037     */
038    public AbstractPair(GenPolynomial<C> a, GenPolynomial<C> b, 
039                        int i, int j) {
040        this(a.leadingExpVector().lcm(b.leadingExpVector()),a,b,i,j); 
041    }
042
043
044    /**
045     * AbstractPair constructor.
046     * @param a polynomial i.
047     * @param b polynomial j.
048     * @param i first index.
049     * @param j second index.
050     * @param s maximal index.
051     */
052    public AbstractPair(GenPolynomial<C> a, GenPolynomial<C> b, 
053                        int i, int j, int s) {
054        this(a.leadingExpVector().lcm(b.leadingExpVector()),a,b,i,j,s); 
055    }
056
057
058    /**
059     * AbstractPair constructor.
060     * @param lcm least common multiple of lt(a) and lt(b).
061     * @param a polynomial i.
062     * @param b polynomial j.
063     * @param i first index.
064     * @param j second index.
065     */
066    public AbstractPair(ExpVector lcm, GenPolynomial<C> a, GenPolynomial<C> b, 
067                        int i, int j) {
068        this(lcm,a,b,i,j,0); 
069    }
070
071
072    /**
073     * AbstractPair constructor.
074     * @param lcm least common multiple of lt(a) and lt(b).
075     * @param a polynomial i.
076     * @param b polynomial j.
077     * @param i first index.
078     * @param j second index.
079     * @param s maximal index.
080     */
081    public AbstractPair(ExpVector lcm, GenPolynomial<C> a, GenPolynomial<C> b, 
082                        int i, int j, int s) {
083        e = lcm;
084        pi = a; 
085        pj = b; 
086        this.i = i; 
087        this.j = j;
088        s = Math.max(i,s);
089        s = Math.max(j,s);
090        this.s = s;
091    }
092
093
094    /**
095     * Set maximal index.
096     * @param s maximal index for pair polynomials.
097     */
098    public void maxIndex(int s) {
099        s = Math.max(this.i,s);
100        s = Math.max(this.j,s);
101        this.s = s;
102    }
103
104
105    /**
106     * toString.
107     */
108    @Override
109    public String toString() {
110        return "pair(" + i + "," + j + "," + s + ",{" + pi.length() + "," + pj.length() + "},"
111                       + e + ")";
112    }
113
114}