001/* 002 * $Id: AbstractPair.java 5687 2017-01-03 08:44:03Z 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 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}