001    package edu.rice.cs.cunit.util;
002    
003    /**
004     * Generic pair container.
005     * @author Mathias Ricken
006     */
007    public class Pair<FIRST, SECOND> {
008        /**
009         * First value of the pair.
010         */
011        FIRST _first;
012    
013        /**
014         * Second value of the pair.
015         */
016        SECOND _second;
017    
018        /**
019         * Create a new pair of the specified values.
020         * @param first first value
021         * @param second second value
022         */
023        public Pair(FIRST first, SECOND second) {
024            _first = first;
025            _second = second;
026        }
027    
028        /**
029         * Accessor for the first value.
030         * @return first value
031         */
032        public FIRST first() {
033            return _first;
034        }
035    
036        /**
037         * Mutator for the first value.
038         * @param first new first value
039         */
040        public void setFirst(FIRST first) {
041            _first = first;
042        }
043    
044        /**
045         * Accessor for the second value.
046         * @return second value
047         */
048        public SECOND second() {
049            return _second;
050        }
051    
052        /**
053         * Mutator for the second value.
054         * @param second new second value
055         */
056        public void setSecond(SECOND second) {
057            _second = second;
058        }
059    
060        /**
061         * Return true if the two values of this value are equal to the two values of the other value.
062         * @param o other value
063         * @return true if equal
064         */
065        public boolean equals(Object o) {
066            if (this == o) {
067                return true;
068            }
069            if (o == null || getClass() != o.getClass()) {
070                return false;
071            }
072    
073            Pair pair = (Pair)o;
074    
075            if (_first != null ? !_first.equals(pair._first) : pair._first != null) {
076                return false;
077            }
078            if (_second != null ? !_second.equals(pair._second) : pair._second != null) {
079                return false;
080            }
081    
082            return true;
083        }
084    
085        /**
086         * Return a hashcode for this pair.
087         * @return hashcode
088         */
089        public int hashCode() {
090            int result;
091            result = (_first != null ? _first.hashCode() : 0);
092            result = 31 * result + (_second != null ? _second.hashCode() : 0);
093            return result;
094        }
095    }