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)")
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()
}
@@ -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 hashCode(): Int = toInt()
public override fun equals(other: Any?): Boolean =
other is UByte && this.data == other.data
}
@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 hashCode(): Int = toInt()
public override fun equals(other: Any?): Boolean =
other is UInt && this.data == other.data
}
@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 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")
@@ -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 hashCode(): Int = toInt()
public override fun equals(other: Any?): Boolean =
other is UShort && this.data == other.data
}
@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 (J)J
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 inv ()B
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 (BJ)J
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 inv (B)B
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 (J)J
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 inv ()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 (IJ)J
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 inv (I)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 (J)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 inv ()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 (JJ)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 inv (J)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 (J)J
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 inv ()S
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 (SJ)J
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 inv (S)S
public static final fun minus (SB)I