From 5cd7df95a11e6a6fb5ebbd8567bc5f6171e588f1 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 31 Jul 2012 21:00:53 +0400 Subject: [PATCH] Added proper equals and hashCode methods to range classes. --- runtime/src/jet/ByteRange.java | 20 ++++++++++++++++++++ runtime/src/jet/CharRange.java | 20 ++++++++++++++++++++ runtime/src/jet/DoubleRange.java | 25 +++++++++++++++++++++++++ runtime/src/jet/FloatRange.java | 21 +++++++++++++++++++++ runtime/src/jet/IntRange.java | 20 ++++++++++++++++++++ runtime/src/jet/LongRange.java | 20 ++++++++++++++++++++ runtime/src/jet/ShortRange.java | 20 ++++++++++++++++++++ 7 files changed, 146 insertions(+) diff --git a/runtime/src/jet/ByteRange.java b/runtime/src/jet/ByteRange.java index fcf407ff6ac..716cb17890a 100644 --- a/runtime/src/jet/ByteRange.java +++ b/runtime/src/jet/ByteRange.java @@ -39,6 +39,26 @@ public final class ByteRange implements Range, 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; } diff --git a/runtime/src/jet/CharRange.java b/runtime/src/jet/CharRange.java index 9d2ef53b4f9..c6bc191e179 100644 --- a/runtime/src/jet/CharRange.java +++ b/runtime/src/jet/CharRange.java @@ -39,6 +39,26 @@ public final class CharRange implements Range, 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; } diff --git a/runtime/src/jet/DoubleRange.java b/runtime/src/jet/DoubleRange.java index f13cf3aa9a9..ddb8513186a 100644 --- a/runtime/src/jet/DoubleRange.java +++ b/runtime/src/jet/DoubleRange.java @@ -37,6 +37,31 @@ public final class DoubleRange implements Range { 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); diff --git a/runtime/src/jet/FloatRange.java b/runtime/src/jet/FloatRange.java index 6b8322a23d0..78011412db6 100644 --- a/runtime/src/jet/FloatRange.java +++ b/runtime/src/jet/FloatRange.java @@ -37,6 +37,27 @@ public final class FloatRange implements Range { 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); diff --git a/runtime/src/jet/IntRange.java b/runtime/src/jet/IntRange.java index c2ab8f632e4..16ed6d57e2c 100644 --- a/runtime/src/jet/IntRange.java +++ b/runtime/src/jet/IntRange.java @@ -48,6 +48,26 @@ public final class IntRange implements Range, 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); diff --git a/runtime/src/jet/LongRange.java b/runtime/src/jet/LongRange.java index 6eb46f32f3e..4b544faa7f3 100644 --- a/runtime/src/jet/LongRange.java +++ b/runtime/src/jet/LongRange.java @@ -46,6 +46,26 @@ public final class LongRange implements Range, 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; } diff --git a/runtime/src/jet/ShortRange.java b/runtime/src/jet/ShortRange.java index d0171d858fc..ff5423d0b91 100644 --- a/runtime/src/jet/ShortRange.java +++ b/runtime/src/jet/ShortRange.java @@ -46,6 +46,26 @@ public final class ShortRange implements Range, 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; }