001/* 002 * $Id: SigPair.java 5687 2017-01-03 08:44:03Z kredel $ 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 < o), 0 if (this == o), -1 if (this > 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}