Generate hashCode and equals for unsigned types

This commit is contained in:
Ilya Gorbunov
2018-07-18 14:38:45 +03:00
parent e2310343d4
commit 1792a77a47
6 changed files with 47 additions and 0 deletions
+11
View File
@@ -229,6 +229,17 @@ class UnsignedTypeGenerator(val type: UnsignedType, out: PrintWriter) : BuiltIns
UnsignedType.ULONG -> out.println("ulongToString(data)") UnsignedType.ULONG -> out.println("ulongToString(data)")
else -> error(type) else -> error(type)
} }
out.println()
out.print(" public override fun hashCode(): Int = ")
when (type) {
UnsignedType.UBYTE, UnsignedType.USHORT, UnsignedType.UINT -> out.println("toInt()")
UnsignedType.ULONG -> out.println("((this shr 32).toInt() xor this.toInt())")
}
out.println()
out.println(" public override fun equals(other: Any?): Boolean =")
out.println(" other is ${type.capitalized} && this.data == other.data")
out.println() out.println()
} }
@@ -138,6 +138,11 @@ public inline class UByte internal constructor(private val data: Byte) : Compara
public override fun toString(): String = toInt().toString() public override fun toString(): String = toInt().toString()
public override fun hashCode(): Int = toInt()
public override fun equals(other: Any?): Boolean =
other is UByte && this.data == other.data
} }
@SinceKotlin("1.3") @SinceKotlin("1.3")
@@ -142,6 +142,11 @@ public inline class UInt internal constructor(private val data: Int) : Comparabl
public override fun toString(): String = toLong().toString() public override fun toString(): String = toLong().toString()
public override fun hashCode(): Int = toInt()
public override fun equals(other: Any?): Boolean =
other is UInt && this.data == other.data
} }
@SinceKotlin("1.3") @SinceKotlin("1.3")
@@ -142,6 +142,11 @@ public inline class ULong internal constructor(private val data: Long) : Compara
public override fun toString(): String = ulongToString(data) public override fun toString(): String = ulongToString(data)
public override fun hashCode(): Int = ((this shr 32).toInt() xor this.toInt())
public override fun equals(other: Any?): Boolean =
other is ULong && this.data == other.data
} }
@SinceKotlin("1.3") @SinceKotlin("1.3")
@@ -138,6 +138,11 @@ public inline class UShort internal constructor(private val data: Short) : Compa
public override fun toString(): String = toInt().toString() public override fun toString(): String = toInt().toString()
public override fun hashCode(): Int = toInt()
public override fun equals(other: Any?): Boolean =
other is UShort && this.data == other.data
} }
@SinceKotlin("1.3") @SinceKotlin("1.3")
@@ -229,6 +229,8 @@ public final class kotlin/UByte : java/lang/Comparable {
public final fun div (I)I public final fun div (I)I
public final fun div (J)J public final fun div (J)J
public final fun div (S)I public final fun div (S)I
public fun equals (Ljava/lang/Object;)Z
public fun hashCode ()I
public final fun inc ()B public final fun inc ()B
public final fun inv ()B public final fun inv ()B
public final fun minus (B)I public final fun minus (B)I
@@ -277,6 +279,8 @@ public final class kotlin/UByte$Erased {
public static final fun div (BI)I public static final fun div (BI)I
public static final fun div (BJ)J public static final fun div (BJ)J
public static final fun div (BS)I public static final fun div (BS)I
public static fun equals (BLjava/lang/Object;)Z
public static fun hashCode (B)I
public static final fun inc (B)B public static final fun inc (B)B
public static final fun inv (B)B public static final fun inv (B)B
public static final fun minus (BB)I public static final fun minus (BB)I
@@ -373,6 +377,8 @@ public final class kotlin/UInt : java/lang/Comparable {
public final fun div (I)I public final fun div (I)I
public final fun div (J)J public final fun div (J)J
public final fun div (S)I public final fun div (S)I
public fun equals (Ljava/lang/Object;)Z
public fun hashCode ()I
public final fun inc ()I public final fun inc ()I
public final fun inv ()I public final fun inv ()I
public final fun minus (B)I public final fun minus (B)I
@@ -423,6 +429,8 @@ public final class kotlin/UInt$Erased {
public static final fun div (II)I public static final fun div (II)I
public static final fun div (IJ)J public static final fun div (IJ)J
public static final fun div (IS)I public static final fun div (IS)I
public static fun equals (ILjava/lang/Object;)Z
public static fun hashCode (I)I
public static final fun inc (I)I public static final fun inc (I)I
public static final fun inv (I)I public static final fun inv (I)I
public static final fun minus (IB)I public static final fun minus (IB)I
@@ -521,6 +529,8 @@ public final class kotlin/ULong : java/lang/Comparable {
public final fun div (I)J public final fun div (I)J
public final fun div (J)J public final fun div (J)J
public final fun div (S)J public final fun div (S)J
public fun equals (Ljava/lang/Object;)Z
public fun hashCode ()I
public final fun inc ()J public final fun inc ()J
public final fun inv ()J public final fun inv ()J
public final fun minus (B)J public final fun minus (B)J
@@ -571,6 +581,8 @@ public final class kotlin/ULong$Erased {
public static final fun div (JI)J public static final fun div (JI)J
public static final fun div (JJ)J public static final fun div (JJ)J
public static final fun div (JS)J public static final fun div (JS)J
public static fun equals (JLjava/lang/Object;)Z
public static fun hashCode (J)I
public static final fun inc (J)J public static final fun inc (J)J
public static final fun inv (J)J public static final fun inv (J)J
public static final fun minus (JB)J public static final fun minus (JB)J
@@ -669,6 +681,8 @@ public final class kotlin/UShort : java/lang/Comparable {
public final fun div (I)I public final fun div (I)I
public final fun div (J)J public final fun div (J)J
public final fun div (S)I public final fun div (S)I
public fun equals (Ljava/lang/Object;)Z
public fun hashCode ()I
public final fun inc ()S public final fun inc ()S
public final fun inv ()S public final fun inv ()S
public final fun minus (B)I public final fun minus (B)I
@@ -717,6 +731,8 @@ public final class kotlin/UShort$Erased {
public static final fun div (SI)I public static final fun div (SI)I
public static final fun div (SJ)J public static final fun div (SJ)J
public static final fun div (SS)I public static final fun div (SS)I
public static fun equals (SLjava/lang/Object;)Z
public static fun hashCode (S)I
public static final fun inc (S)S public static final fun inc (S)S
public static final fun inv (S)S public static final fun inv (S)S
public static final fun minus (SB)I public static final fun minus (SB)I