/* __ __ __ __ __ ___
* \ \ / / \ \ / / __/
* \ \/ / /\ \ \/ / /
* \____/__/ \__\____/__/.ɪᴏ
* ᶜᵒᵖʸʳᶦᵍʰᵗ ᵇʸ ᵛᵃᵛʳ ⁻ ˡᶦᶜᵉⁿˢᵉᵈ ᵘⁿᵈᵉʳ ᵗʰᵉ ᵃᵖᵃᶜʰᵉ ˡᶦᶜᵉⁿˢᵉ ᵛᵉʳˢᶦᵒⁿ ᵗʷᵒ ᵈᵒᵗ ᶻᵉʳᵒ
*/
package io.vavr.collection;
/**
* An Int wrapper that implements equality by comparing int values modulo 2.
* <br>
* Examples:
* <ul>
* <li>IntMod2(0) equals IntMod2(2) equals IntMod2(4) ...</li>
* <li>IntMod2(1) equals IntMod2(3) equals IntMod2(5) ...</li>
* <li>IntMod2(0) < IntMod2(1)</li>
* <li>IntMod2(_even_int_) < IntMod2(_odd_int_)</li>
* </ul>
*/
final class IntMod2 implements Comparable<IntMod2> {
private final int val;
IntMod2(int val) {
this.val = val;
}
@Override
public int compareTo(IntMod2 that) {
return this.hashCode() - that.hashCode();
}
@Override
public boolean equals(Object that) {
return that == this || (that instanceof IntMod2 && this.hashCode() == that.hashCode());
}
@Override
public int hashCode() {
return val % 2;
}
@Override
public String toString() {
return String.valueOf(val);
}
}