001 /* 002 * $Id: PairList.java 3372 2010-11-28 16:42:48Z kredel $ 003 */ 004 005 package edu.jas.gb; 006 007 import java.util.List; 008 009 import edu.jas.structure.RingElem; 010 import edu.jas.poly.ExpVector; 011 import edu.jas.poly.TermOrder; 012 import edu.jas.poly.GenPolynomial; 013 import edu.jas.poly.GenPolynomialRing; 014 015 016 /** 017 * Pair list management interface. 018 * @author Heinz Kredel 019 */ 020 021 public interface PairList<C extends RingElem<C> > { 022 023 024 /** 025 * Create a new PairList. 026 * @param r polynomial ring. 027 */ 028 public PairList<C> create(GenPolynomialRing<C> r); 029 030 031 /** 032 * Create a new PairList. 033 * @param m number of module variables. 034 * @param r polynomial ring. 035 */ 036 public PairList<C> create(int m, GenPolynomialRing<C> r); 037 038 039 /** 040 * toString. 041 */ 042 @Override 043 public String toString(); 044 045 046 /** 047 * Put one Polynomial to the pairlist and reduction matrix. 048 * @param p polynomial. 049 * @return the index of the added polynomial. 050 */ 051 public int put(GenPolynomial<C> p); 052 053 054 /** 055 * Put to ONE-Polynomial to the pairlist. 056 * @return the index of the last polynomial. 057 */ 058 public int putOne(); 059 060 061 /** 062 * Remove the next required pair from the pairlist and reduction matrix. 063 * Appy the criterions 3 and 4 to see if the S-polynomial is required. 064 * @return the next pair if one exists, otherwise null. 065 */ 066 public Pair<C> removeNext(); 067 068 069 /** 070 * Test if there is possibly a pair in the list. 071 * @return true if a next pair could exist, otherwise false. 072 */ 073 public boolean hasNext(); 074 075 076 /** 077 * Get the list of polynomials. 078 * @return the polynomial list. 079 */ 080 public List<GenPolynomial<C>> getList(); 081 082 083 /** 084 * Get the number of polynomials put to the pairlist. 085 * @return the number of calls to put. 086 */ 087 public int putCount(); 088 089 090 /** 091 * Get the number of required pairs removed from the pairlist. 092 * @return the number of non null pairs delivered. 093 */ 094 public int remCount(); 095 096 097 /** 098 * GB criterium 3. 099 * @return true if the S-polynomial(i,j) is required. 100 */ 101 public boolean criterion3(int i, int j, ExpVector eij); 102 103 } 104