Added proper equals and hashCode methods to range classes.

This commit is contained in:
Evgeny Gerashchenko
2012-07-31 21:00:53 +04:00
parent 1a1661c15f
commit 5cd7df95a1
7 changed files with 146 additions and 0 deletions
+20
View File
@@ -39,6 +39,26 @@ public final class ByteRange implements Range<Byte>, ByteIterable {
return item <= start && item > start + count;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ByteRange range = (ByteRange) o;
return count == range.count && start == range.start;
}
@Override
public int hashCode() {
int result = (int) start;
result = 31 * result + count;
return result;
}
public boolean getIsReversed() {
return count < 0;
}
+20
View File
@@ -39,6 +39,26 @@ public final class CharRange implements Range<Character>, CharIterable {
return item <= start && item > start + count;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
CharRange range = (CharRange) o;
return count == range.count && start == range.start;
}
@Override
public int hashCode() {
int result = (int) start;
result = 31 * result + count;
return result;
}
public boolean getIsReversed() {
return count < 0;
}
+25
View File
@@ -37,6 +37,31 @@ public final class DoubleRange implements Range<Double> {
return item <= start && item > start + size;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
DoubleRange range = (DoubleRange) o;
return Double.compare(range.size, size) == 0 && Double.compare(range.start, start) == 0;
}
@Override
public int hashCode() {
int result;
long temp;
temp = start != +0.0d ? Double.doubleToLongBits(start) : 0L;
result = (int) (temp ^ (temp >>> 32));
temp = size != +0.0d ? Double.doubleToLongBits(size) : 0L;
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
}
public DoubleIterator step(double step) {
if (step < 0)
return new MyIterator(getEnd(), -size, -step);
+21
View File
@@ -37,6 +37,27 @@ public final class FloatRange implements Range<Float> {
return item <= start && item > start + size;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
FloatRange range = (FloatRange) o;
return Float.compare(range.size, size) == 0 && Float.compare(range.start, start) == 0;
}
@Override
public int hashCode() {
int result = (start != +0.0f ? Float.floatToIntBits(start) : 0);
result = 31 * result + (size != +0.0f ? Float.floatToIntBits(size) : 0);
return result;
}
public FloatIterator step(float step) {
if (step < 0)
return new MyIterator(getEnd(), -size, -step);
+20
View File
@@ -48,6 +48,26 @@ public final class IntRange implements Range<Integer>, IntIterable {
return item <= start && item > start + count;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
IntRange range = (IntRange) o;
return count == range.count && start == range.start;
}
@Override
public int hashCode() {
int result = start;
result = 31 * result + count;
return result;
}
public IntIterator step(int step) {
if (step < 0)
return new MyIterator(getEnd(), -count, -step);
+20
View File
@@ -46,6 +46,26 @@ public final class LongRange implements Range<Long>, LongIterable {
return item <= start && item > start + count;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
LongRange range = (LongRange) o;
return count == range.count && start == range.start;
}
@Override
public int hashCode() {
int result = (int) (start ^ (start >>> 32));
result = 31 * result + (int) (count ^ (count >>> 32));
return result;
}
public boolean getIsReversed() {
return count < 0;
}
+20
View File
@@ -46,6 +46,26 @@ public final class ShortRange implements Range<Short>, ShortIterable {
return item <= start && item > start + count;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ShortRange range = (ShortRange) o;
return count == range.count && start == range.start;
}
@Override
public int hashCode() {
int result = (int) start;
result = 31 * result + count;
return result;
}
public boolean getIsReversed() {
return count < 0;
}