package edu.stanford.nlp.util;
/**
* A class for Long objects that you can change.
*
* @author Dan Klein
*/
public final class MutableLong extends Number implements Comparable<MutableLong> {
private long i;
// Mutable
public void set(long i) {
this.i = i;
}
@Override
public int hashCode() {
return (int)(i ^ (i >>> 32));
}
/**
* Compares this object to the specified object. The result is
* {@code true} if and only if the argument is not
* {@code null} and is an {@code MutableLong} object that
* contains the same {@code long} value as this object.
* Note that a MutableLong isn't and can't be equal to an Long.
*
* @param obj the object to compare with.
* @return {@code true} if the objects are the same;
* {@code false} otherwise.
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else if (obj instanceof MutableLong) {
return i == ((MutableLong) obj).i;
}
return false;
}
@Override
public String toString() {
return Long.toString(i);
}
// Comparable interface
/**
* Compares two <code>MutableLong</code> objects numerically.
*
* @param anotherMutableLong the <code>MutableLong</code> to be
* compared.
* @return The value <code>0</code> if this <code>MutableLong</code> is
* equal to the argument <code>MutableLong</code>; a value less than
* <code>0</code> if this <code>MutableLong</code> is numerically less
* than the argument <code>MutableLong</code>; and a value greater
* than <code>0</code> if this <code>MutableLong</code> is numerically
* greater than the argument <code>MutableLong</code> (signed
* comparison).
*/
@Override
public int compareTo(MutableLong anotherMutableLong) {
long thisVal = this.i;
long anotherVal = anotherMutableLong.i;
return (thisVal < anotherVal ? -1 : (thisVal == anotherVal ? 0 : 1));
}
// Number interface
@Override
public int intValue() {
return (int) i;
}
@Override
public long longValue() {
return i;
}
@Override
public short shortValue() {
return (short) i;
}
@Override
public byte byteValue() {
return (byte) i;
}
@Override
public float floatValue() {
return i;
}
@Override
public double doubleValue() {
return i;
}
/** Add the argument to the value of this long. A convenience method.
*
* @param val Value to be added to this long
*/
public void incValue(long val) {
i += val;
}
public MutableLong() {
this(0);
}
public MutableLong(long i) {
this.i = i;
}
private static final long serialVersionUID = 624465615824626762L;
}