001    /*
002     * $Id: AbstractPair.java 3416 2010-12-19 15:45:06Z kredel $
003     */
004    
005    package edu.jas.gb;
006    
007    import java.io.Serializable;
008    
009    import edu.jas.structure.RingElem;
010    
011    import edu.jas.poly.ExpVector;
012    import 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     */
020    public 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    }