[JS IR] Fix review comments.

This commit is contained in:
Alexander Korepanov
2023-07-10 13:12:34 +02:00
committed by Space Team
parent 09501224e8
commit 90498593f3
5 changed files with 31 additions and 50 deletions
@@ -68,7 +68,6 @@ internal abstract class HashMapEntrySetBase<K, V, E : Map.Entry<K, V>> internal
override val size: Int get() = backing.size
override fun isEmpty(): Boolean = backing.size == 0
override fun contains(element: E): Boolean = backing.containsEntry(element)
protected abstract fun getEntry(element: Map.Entry<K, V>): E?
override fun clear() = backing.clear()
override fun add(element: E): Boolean = throw UnsupportedOperationException()
override fun addAll(elements: Collection<E>): Boolean = throw UnsupportedOperationException()
@@ -85,8 +84,5 @@ internal abstract class HashMapEntrySetBase<K, V, E : Map.Entry<K, V>> internal
internal class HashMapEntrySet<K, V> internal constructor(
backing: InternalMap<K, V>,
) : HashMapEntrySetBase<K, V, MutableMap.MutableEntry<K, V>>(backing) {
override fun getEntry(element: Map.Entry<K, V>): MutableMap.MutableEntry<K, V>? = backing.getEntry(element)
override fun iterator(): MutableIterator<MutableMap.MutableEntry<K, V>> = backing.entriesIterator()
}
@@ -425,15 +425,6 @@ internal class InternalHashMap<K, V> private constructor(
return containsEntry(entry as Map.Entry<K, V>)
}
override fun getEntry(entry: Map.Entry<K, V>): MutableMap.MutableEntry<K, V>? {
val index = findKey(entry.key)
return if (index < 0 || valuesArray!![index] != entry.value) {
null
} else {
EntryRef(this, index)
}
}
private fun contentEquals(other: Map<*, *>): Boolean = _size == other.size && containsAllEntries(other.entries)
private fun putEntry(entry: Map.Entry<K, V>): Boolean {
@@ -15,7 +15,6 @@ internal interface InternalMap<K, V> {
fun putAll(from: Map<out K, V>)
operator fun get(key: K): V?
fun getEntry(entry: Map.Entry<K, V>): MutableMap.MutableEntry<K, V>?
operator fun contains(key: K): Boolean
fun containsValue(value: V): Boolean
@@ -60,6 +60,12 @@ internal class InternalStringLinkedMap<K, V> : InternalStringMap<K, V>() {
return prevValue
}
private fun IntArray.updateIndexAt(indexReference: Int, newIndex: Int) {
if (indexReference >= 0) {
this[indexReference] = newIndex
}
}
override fun removeKeyIndex(key: K, removingIndex: Int) {
super.removeKeyIndex(key, removingIndex)
@@ -67,8 +73,8 @@ internal class InternalStringLinkedMap<K, V> : InternalStringMap<K, V>() {
val nextIndex = nextIndexes[removingIndex]
val prevIndex = prevIndexes[removingIndex]
nextIndexes[prevIndex] = nextIndex
prevIndexes[nextIndex] = prevIndex
nextIndexes.updateIndexAt(prevIndex, nextIndex)
prevIndexes.updateIndexAt(nextIndex, prevIndex)
if (headIndex == removingIndex) {
headIndex = nextIndex
@@ -82,8 +88,8 @@ internal class InternalStringLinkedMap<K, V> : InternalStringMap<K, V>() {
if (removingIndex != lastIndex) {
nextIndexes[removingIndex] = nextIndexes[lastIndex]
prevIndexes[removingIndex] = prevIndexes[lastIndex]
nextIndexes[prevIndexes[removingIndex]] = removingIndex
prevIndexes[nextIndexes[removingIndex]] = removingIndex
nextIndexes.updateIndexAt(prevIndexes[removingIndex], removingIndex)
prevIndexes.updateIndexAt(nextIndexes[removingIndex], removingIndex)
if (headIndex == lastIndex) {
headIndex = removingIndex
}
@@ -96,28 +96,19 @@ internal open class InternalStringMap<K, V> : InternalMap<K, V> {
override val size: Int
get() = keys.length
private fun findKeyIndex(key: K): Int? {
if (key !is String) return null
val index = backingMap[key]
return if (index !== undefined) index.unsafeCast<Int>() else null
}
override operator fun contains(key: K): Boolean {
if (key !is String) return false
return backingMap[key] !== undefined
return findKeyIndex(key) != null
}
override operator fun get(key: K): V? {
if (key !is String) return null
val index = backingMap[key]
return if (index !== undefined) values.getElement(index.unsafeCast<Int>()) else null
}
override fun getEntry(entry: Map.Entry<K, V>): MutableEntry<K, V>? {
val key = entry.key as? String ?: return null
val index = backingMap[key]
if (index === undefined) {
return null
}
val value = values.getElement(index.unsafeCast<Int>())
if (value == entry.value) {
return EntryRef(entry.key, value, this)
}
return null
val index = findKeyIndex(key) ?: return null
return values.getElement(index)
}
override fun containsValue(value: V): Boolean {
@@ -125,7 +116,8 @@ internal open class InternalStringMap<K, V> : InternalMap<K, V> {
}
override fun containsEntry(entry: Map.Entry<K, V>): Boolean {
return getEntry(entry) != null
val index = findKeyIndex(entry.key) ?: return false
return values.getElement(index) == entry.value
}
override fun containsOtherEntry(entry: Map.Entry<*, *>): Boolean {
@@ -134,8 +126,12 @@ internal open class InternalStringMap<K, V> : InternalMap<K, V> {
}
override fun removeEntry(entry: Map.Entry<K, V>): Boolean {
val key = getEntry(entry)?.key ?: return false
return remove(key) != null
val index = findKeyIndex(entry.key) ?: return false
if (values.getElement(index) == entry.value) {
removeKeyIndex(keys.getElement(index), index)
return true
}
return false
}
override fun removeValue(value: V): Boolean {
@@ -171,17 +167,10 @@ internal open class InternalStringMap<K, V> : InternalMap<K, V> {
}
override fun remove(key: K): V? {
if (key !is String) return null
val index = backingMap[key]
if (index === undefined) {
return null
}
val i = index.unsafeCast<Int>()
val removedValue = values.getElement(i)
removeKeyIndex(key, i)
return removedValue
val index = findKeyIndex(key) ?: return null
val removingValue = values.getElement(index)
removeKeyIndex(key, index)
return removingValue
}
internal open fun removeKeyIndex(key: K, removingIndex: Int) {