001    /*
002     * $Id: Pair.java 3315 2010-09-05 18:26:34Z kredel $
003     */
004    
005    package edu.jas.ps;
006    
007    
008    import java.io.Serializable;
009    
010    import edu.jas.structure.RingElem;
011    
012    
013    /**
014     * Serializable subclass to hold pairs of power series.
015     * @param <C> coefficient type
016     * @author Heinz Kredel.
017     */
018    public class Pair<C extends RingElem<C>> implements Serializable, Comparable<Pair> {
019    
020    
021        public final MultiVarPowerSeries<C> pi;
022    
023    
024        public final MultiVarPowerSeries<C> pj;
025    
026    
027        public final int i;
028    
029    
030        public final int j;
031    
032    
033        protected int n;
034    
035    
036        protected boolean toZero = false;
037    
038    
039        protected boolean useCriterion4 = false;
040    
041    
042        protected boolean useCriterion3 = false;
043    
044    
045        /**
046         * Pair constructor.
047         * @param a power series i.
048         * @param b power series j.
049         * @param i first index.
050         * @param j second index.
051         */
052        public Pair(MultiVarPowerSeries<C> a, MultiVarPowerSeries<C> b, int i, int j) {
053            pi = a;
054            pj = b;
055            this.i = i;
056            this.j = j;
057            this.n = 0;
058            toZero = false; // ok
059        }
060    
061    
062        /**
063         * toString.
064         */
065        @Override
066        public String toString() {
067            return "pair[" + n + "](" + i + j + ", r0=" + toZero + ", c4=" + useCriterion4 + ", c3="
068                    + useCriterion3 + ")";
069        }
070    
071    
072        /**
073         * Set removed pair number.
074         * @param n number of this pair generated in OrderedPairlist.
075         */
076        public void pairNumber(int n) {
077            this.n = n;
078        }
079    
080    
081        /**
082         * Get removed pair number.
083         * @return n number of this pair generated in OrderedPairlist.
084         */
085        public int getPairNumber() {
086            return n;
087        }
088    
089    
090        /**
091         * Set zero reduction. The S-power-series of this Pair was reduced to zero.
092         */
093        public void setZero() {
094            toZero = true;
095        }
096    
097    
098        /**
099         * Is reduced to zero.
100         * @return true if the S-power-series of this Pair was reduced to zero, else
101         *         false.
102         */
103        public boolean isZero() {
104            return toZero;
105        }
106    
107    
108        /**
109         * equals.
110         * @param ob an Object.
111         * @return true if this is equal to o, else false.
112         */
113        @Override
114        public boolean equals(Object ob) {
115            if (!(ob instanceof Pair)) {
116                return false;
117                // throw new ClassCastException("Pair "+n+" o "+o);
118            }
119            return 0 == compareTo((Pair) ob);
120        }
121    
122    
123        /**
124         * compareTo used in TreeMap // not used at moment. Comparison is based on
125         * the number of the pairs.
126         * @param p a Pair.
127         * @return 1 if (this &lt; o), 0 if (this == o), -1 if (this &gt; o).
128         */
129        public int compareTo(Pair p) {
130            int x = p.getPairNumber();
131            if (n > x) {
132                return 1;
133            }
134            if (n < x) {
135                return -1;
136            }
137            return 0;
138        }
139    
140    
141        /**
142         * Set useCriterion4.
143         * @param c boolean value to set.
144         */
145        public void setUseCriterion4(boolean c) {
146            this.useCriterion4 = c;
147        }
148    
149    
150        /**
151         * Get useCriterion4.
152         * @return boolean value.
153         */
154        public boolean getUseCriterion4() {
155            return this.useCriterion4;
156        }
157    
158    
159        /**
160         * Set useCriterion3.
161         * @param c boolean value to set.
162         */
163        public void setUseCriterion3(boolean c) {
164            this.useCriterion3 = c;
165        }
166    
167    
168        /**
169         * Get useCriterion3.
170         * @return boolean value.
171         */
172        public boolean getUseCriterion3() {
173            return this.useCriterion3;
174        }
175    
176    }