gatk-3.8/archive/java/src/org/broadinstitute/sting/poolseq/Quad.java

121 lines
3.7 KiB
Java

/*
* Copyright (c) 2010 The Broad Institute
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package org.broadinstitute.sting.playground.gatk.walkers.poolseq;
import org.broadinstitute.sting.utils.collections.Pair;
/**
* Created by IntelliJ IDEA.
* User: chartl
* Date: Sep 11, 2009
* Time: 5:12:29 PM
* To change this template use File | Settings | File Templates.
*/
public class Quad<W,X,Y,Z> {
public W first;
public X second;
public Y third;
public Z fourth;
public Quad() {
first = null;
second = null;
third = null;
fourth = null;
}
public Quad(W w, X x, Y y, Z z) {
first = w;
second = x;
third = y;
fourth = z;
}
public Quad(Pair<W,X> a, Pair<Y,Z> b) {
first = a.getFirst();
second = a.getSecond();
third = b.getFirst();
fourth = b.getSecond();
}
public boolean equals(Object o) {
if(o == null) {
return false;
} else if (! (o instanceof Quad) ) {
return false;
}
Quad other = (Quad) o;
return ( equalToNotNull(this.first,other.first) && equalToNotNull(this.second,other.second)
&& equalToNotNull(this.third,other.third) && equalToNotNull(this.fourth,other.fourth));
}
public int hashCode() {
return getHash(first) ^ getHash(second) ^ getHash(third) ^ getHash(fourth);
}
public String toString() {
return String.format("(%s, %s, %s, %s)", first.toString(), second.toString(),
third.toString(), fourth.toString());
}
public W getFirst() { return first; }
public X getSecond() { return second; }
public Y getThird() { return third; }
public Z getFourth() { return fourth; }
public Pair<W,X> getFirstPair() { return new Pair<W,X>(first,second); }
public Pair<Y,Z> getSecondPair() { return new Pair<Y,Z>(third,fourth); }
public void setFirst(Object o) { first = (W) o; }
public void setSecond(Object o) { second = (X) o; }
public void setThird(Object o) { third = (Y) o; }
public void setFourth(Object o) { fourth = (Z) o; }
private int getHash(Object o) {
int hash = 0;
if(o != null) {
hash = o.hashCode();
}
return hash;
}
private boolean equalToNotNull(Object a, Object b) {
boolean areEqual = false;
if ( a != null && b != null ) {
areEqual = a.equals(b);
} else if (a == null && b == null ) {
areEqual = true;
// todo -- make sure we don't want to check for instanceOf here...
// todo -- maybe this statement should be eliminated
}
return areEqual;
}
}