Skip to content

Commit e0a257b

Browse files
committed
Use Any?.hashCode extension from Kotlin 1.3
1 parent 611fc65 commit e0a257b

File tree

9 files changed

+21
-40
lines changed

9 files changed

+21
-40
lines changed

kotlinx-collections-immutable/src/main/kotlin/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap.kt

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,35 +53,30 @@ internal class PersistentHashMap<K, V>(internal val node: TrieNode<K, V>,
5353
}
5454

5555
override fun containsKey(key: K): Boolean {
56-
val keyHash = key?.hashCode() ?: NULL_HASH_CODE
57-
return node.containsKey(keyHash, key, 0)
56+
return node.containsKey(key.hashCode(), key, 0)
5857
}
5958

6059
override fun get(key: K): V? {
61-
val keyHash = key?.hashCode() ?: NULL_HASH_CODE
62-
return node.get(keyHash, key, 0)
60+
return node.get(key.hashCode(), key, 0)
6361
}
6462

6563
override fun put(key: K, value: @UnsafeVariance V): PersistentHashMap<K, V> {
66-
val keyHash = key?.hashCode() ?: NULL_HASH_CODE
6764
val modification = ModificationWrapper()
68-
val newNode = node.put(keyHash, key, value, 0, modification)
65+
val newNode = node.put(key.hashCode(), key, value, 0, modification)
6966
if (node === newNode) { return this }
7067
val sizeDelta = if (modification.value == PUT_KEY_VALUE) 1 else 0
7168
return PersistentHashMap(newNode, size + sizeDelta)
7269
}
7370

7471
override fun remove(key: K): PersistentHashMap<K, V> {
75-
val keyHash = key?.hashCode() ?: NULL_HASH_CODE
76-
val newNode = node.remove(keyHash, key, 0)
72+
val newNode = node.remove(key.hashCode(), key, 0)
7773
if (node === newNode) { return this }
7874
if (newNode == null) { return PersistentHashMap.emptyOf() }
7975
return PersistentHashMap(newNode, size - 1)
8076
}
8177

8278
override fun remove(key: K, value: @UnsafeVariance V): PersistentHashMap<K, V> {
83-
val keyHash = key?.hashCode() ?: NULL_HASH_CODE
84-
val newNode = node.remove(keyHash, key, value, 0)
79+
val newNode = node.remove(key.hashCode(), key, value, 0)
8580
if (node === newNode) { return this }
8681
if (newNode == null) { return PersistentHashMap.emptyOf() }
8782
return PersistentHashMap(newNode, size - 1)

kotlinx-collections-immutable/src/main/kotlin/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder.kt

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,33 +52,28 @@ internal class PersistentHashMapBuilder<K, V>(private var map: PersistentHashMap
5252
}
5353

5454
override fun containsKey(key: K): Boolean {
55-
val keyHash = key?.hashCode() ?: NULL_HASH_CODE
56-
return node.containsKey(keyHash, key, 0)
55+
return node.containsKey(key.hashCode(), key, 0)
5756
}
5857

5958
override fun get(key: K): V? {
60-
val keyHash = key?.hashCode() ?: NULL_HASH_CODE
61-
return node.get(keyHash, key, 0)
59+
return node.get(key.hashCode(), key, 0)
6260
}
6361

6462
override fun put(key: K, value: @UnsafeVariance V): V? {
6563
operationResult = null
66-
val keyHash = key?.hashCode() ?: NULL_HASH_CODE
67-
node = node.mutablePut(keyHash, key, value, 0, this)
64+
node = node.mutablePut(key.hashCode(), key, value, 0, this)
6865
return operationResult
6966
}
7067

7168
override fun remove(key: K): V? {
7269
operationResult = null
73-
val keyHash = key?.hashCode() ?: NULL_HASH_CODE
74-
node = node.mutableRemove(keyHash, key, 0, this) ?: TrieNode.EMPTY as TrieNode<K, V>
70+
node = node.mutableRemove(key.hashCode(), key, 0, this) ?: TrieNode.EMPTY as TrieNode<K, V>
7571
return operationResult
7672
}
7773

7874
fun remove(key: K, value: V): Boolean {
7975
val oldSize = size
80-
val keyHash = key?.hashCode() ?: NULL_HASH_CODE
81-
node = node.mutableRemove(keyHash, key, value, 0, this) ?: TrieNode.EMPTY as TrieNode<K, V>
76+
node = node.mutableRemove(key.hashCode(), key, value, 0, this) ?: TrieNode.EMPTY as TrieNode<K, V>
8277
return oldSize != size
8378
}
8479

kotlinx-collections-immutable/src/main/kotlin/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilderContentIterators.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ internal abstract class PersistentHashMapBuilderBaseIterator<K, V, T>(private va
6060
val currentKey = currentKey()
6161

6262
builder.remove(lastKey)
63-
resetPath(currentKey?.hashCode() ?: NULL_HASH_CODE, builder.node, currentKey, 0)
63+
resetPath(currentKey.hashCode(), builder.node, currentKey, 0)
6464
} else {
6565
builder.remove(lastKey)
6666
}

kotlinx-collections-immutable/src/main/kotlin/kotlinx/collections/immutable/implementations/immutableMap/TrieNode.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ internal const val LOG_MAX_BRANCHING_FACTOR = 5
66
internal const val MAX_BRANCHING_FACTOR_MINUS_ONE = MAX_BRANCHING_FACTOR - 1
77
internal const val ENTRY_SIZE = 2
88
internal const val MAX_SHIFT = 30
9-
internal const val NULL_HASH_CODE = 0
109

1110

1211
internal class TrieNode<K, V>(var dataMap: Int,
@@ -116,7 +115,7 @@ internal class TrieNode<K, V>(var dataMap: Int,
116115
private fun bufferMoveDataToNode(keyIndex: Int, position: Int, newKeyHash: Int,
117116
newKey: K, newValue: V, shift: Int, mutatorMarker: Marker?): Array<Any?> {
118117
val storedKey = keyAtIndex(keyIndex)
119-
val storedKeyHash = storedKey?.hashCode() ?: NULL_HASH_CODE
118+
val storedKeyHash = storedKey.hashCode()
120119
val storedValue = valueAtKeyIndex(keyIndex)
121120
val newNode = makeNode(storedKeyHash, storedKey, storedValue,
122121
newKeyHash, newKey, newValue, shift + LOG_MAX_BRANCHING_FACTOR, mutatorMarker)

kotlinx-collections-immutable/src/main/kotlin/kotlinx/collections/immutable/implementations/immutableSet/PersistentHashSet.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,11 @@ import kotlinx.collections.immutable.mutate
2222
internal class PersistentHashSet<E>(internal val node: TrieNode<E>,
2323
override val size: Int): AbstractSet<E>(), PersistentSet<E> {
2424
override fun contains(element: E): Boolean {
25-
val hashCode = element?.hashCode() ?: NULL_HASH_CODE
26-
return node.contains(hashCode, element, 0)
25+
return node.contains(element.hashCode(), element, 0)
2726
}
2827

2928
override fun add(element: E): PersistentSet<E> {
30-
val hashCode = element?.hashCode() ?: NULL_HASH_CODE
31-
val newNode = node.add(hashCode, element, 0)
29+
val newNode = node.add(element.hashCode(), element, 0)
3230
if (node === newNode) { return this }
3331
return PersistentHashSet(newNode, size + 1)
3432
}
@@ -38,8 +36,7 @@ internal class PersistentHashSet<E>(internal val node: TrieNode<E>,
3836
}
3937

4038
override fun remove(element: E): PersistentSet<E> {
41-
val hashCode = element?.hashCode() ?: NULL_HASH_CODE
42-
val newNode = node.remove(hashCode, element, 0)
39+
val newNode = node.remove(element.hashCode(), element, 0)
4340
if (node === newNode) { return this }
4441
if (newNode == null) { return PersistentHashSet.emptyOf() }
4542
return PersistentHashSet(newNode, size - 1)

kotlinx-collections-immutable/src/main/kotlin/kotlinx/collections/immutable/implementations/immutableSet/PersistentHashSetBuilder.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,18 @@ internal class PersistentHashSetBuilder<E>(private var set: PersistentHashSet<E>
3636
}
3737

3838
override fun contains(element: E): Boolean {
39-
val hashCode = element?.hashCode() ?: NULL_HASH_CODE
40-
return node.contains(hashCode, element, 0)
39+
return node.contains(element.hashCode(), element, 0)
4140
}
4241

4342
override fun add(element: E): Boolean {
4443
val size = this.size
45-
val hashCode = element?.hashCode() ?: NULL_HASH_CODE
46-
node = node.mutableAdd(hashCode, element, 0, this)
44+
node = node.mutableAdd(element.hashCode(), element, 0, this)
4745
return size != this.size
4846
}
4947

5048
override fun remove(element: E): Boolean {
5149
val size = this.size
52-
val hashCode = element?.hashCode() ?: NULL_HASH_CODE
53-
node = node.mutableRemove(hashCode, element, 0, this) ?: TrieNode.EMPTY as TrieNode<E>
50+
node = node.mutableRemove(element.hashCode(), element, 0, this) ?: TrieNode.EMPTY as TrieNode<E>
5451
return size != this.size
5552
}
5653

kotlinx-collections-immutable/src/main/kotlin/kotlinx/collections/immutable/implementations/immutableSet/PersistentHashSetMutableIterator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ internal class PersistentHashSetMutableIterator<E>(private val builder: Persiste
3636
val currentElement = currentElement()
3737

3838
assert(builder.remove(lastReturned))
39-
resetPath(currentElement?.hashCode() ?: NULL_HASH_CODE, builder.node, currentElement, 0)
39+
resetPath(currentElement.hashCode(), builder.node, currentElement, 0)
4040
} else {
4141
assert(builder.remove(lastReturned))
4242
}

kotlinx-collections-immutable/src/main/kotlin/kotlinx/collections/immutable/implementations/immutableSet/TrieNode.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ internal const val LOG_MAX_BRANCHING_FACTOR = 5
2222
internal const val MAX_BRANCHING_FACTOR_MINUS_ONE = MAX_BRANCHING_FACTOR - 1
2323
internal const val ENTRY_SIZE = 2
2424
internal const val MAX_SHIFT = 30
25-
internal const val NULL_HASH_CODE = 0
2625

2726

2827
internal class TrieNode<E>(var bitmap: Int,
@@ -99,8 +98,7 @@ internal class TrieNode<E>(var bitmap: Int,
9998
private fun makeNodeAtIndex(elementIndex: Int, newElementHash: Int, newElement: E,
10099
shift: Int, mutatorMarker: Marker?): TrieNode<E> {
101100
val storedElement = elementAtIndex(elementIndex)
102-
val storedElementHash = storedElement?.hashCode() ?: NULL_HASH_CODE
103-
return makeNode(storedElementHash, storedElement,
101+
return makeNode(storedElement.hashCode(), storedElement,
104102
newElementHash, newElement, shift + LOG_MAX_BRANCHING_FACTOR, mutatorMarker)
105103
}
106104

kotlinx-collections-immutable/src/main/kotlin/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ internal class PersistentOrderedSet<E>(internal val firstElement: E?,
9292
}
9393

9494
internal companion object {
95-
private val EMPTY = PersistentOrderedSet(null, null, PersistentHashMap.emptyOf())
95+
private val EMPTY = PersistentOrderedSet<Nothing>(null, null, PersistentHashMap.emptyOf<Nothing, Links<Nothing>>())
9696
internal fun <E> emptyOf(): PersistentSet<E> = EMPTY
9797
}
9898
}

0 commit comments

Comments
 (0)