001    /*
002     * $Id: ExpVectorPair.java 1888 2008-07-12 13:37:34Z kredel $
003     */
004    
005    package edu.jas.poly;
006    
007    import java.io.Serializable;
008    
009    
010    /**
011     * ExpVectorPair 
012     * implements pairs of exponent vectors for S-polynomials.
013     * Objects of this class are immutable.
014     * @author Heinz Kredel
015     */
016    
017    
018    public class ExpVectorPair implements Serializable {
019    
020        private final ExpVector e1;
021        private final ExpVector e2;
022    
023    
024        /**
025         * Constructors for ExpVectorPair.
026         * @param e first part.
027         * @param f second part.
028         */
029        public ExpVectorPair(ExpVector e, ExpVector f) {
030            e1 = e;
031            e2 = f;
032        }
033    
034    
035        /**
036         * @return first part.
037         */
038        public ExpVector getFirst() {
039            return e1;
040        } 
041    
042    
043        /**
044         * @return second part.
045         */
046        public ExpVector getSecond() {
047            return e2;
048        } 
049    
050    
051        /**
052         * toString.
053         */
054        @Override
055         public String toString() {
056            StringBuffer s = new StringBuffer("ExpVectorPair[");
057            s.append(e1.toString());
058            s.append(",");
059            s.append(e2.toString());
060            s.append("]");
061            return s.toString();
062        }
063    
064    
065        /**
066         * equals.
067         * @param B other.
068         * @return true, if this == b, else false.
069         */
070        @Override
071         public boolean equals(Object B) { 
072           if ( ! (B instanceof ExpVectorPair) ) return false;
073           return equals( (ExpVectorPair)B );
074        }
075    
076    
077        /**
078         * equals.
079         * @param b other.
080         * @return true, if this == b, else false.
081         */
082        public boolean equals(ExpVectorPair b) { 
083           boolean t = e1.equals( b.getFirst() ); 
084           t = t && e2.equals( b.getSecond() ); 
085           return t;
086        }
087    
088    
089        /** hash code.
090         * @see java.lang.Object#hashCode()
091         */
092        @Override
093        public int hashCode() {
094           return (e1.hashCode() << 16) + e2.hashCode();
095        }
096    
097            
098        /**
099         * isMultiple.
100         * @param p other.
101         * @return true, if this is a multiple of b, else false.
102         */
103        public boolean isMultiple(ExpVectorPair p) {
104           boolean w =  e1.multipleOf( p.getFirst() );
105           if ( !w ) {
106               return w;
107           }
108           w =  e2.multipleOf( p.getSecond() );
109           if ( !w ) {
110               return w;
111           }
112           return true;
113        }
114    
115    }