Created
February 23, 2025 05:32
-
-
Save hikaMaeng/702c1ff251854b7aa81521cd76fdd2fb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@file:Suppress("UNCHECKED_CAST", "NOTHING_TO_INLINE", "OVERRIDE_BY_INLINE") | |
package kore.savable | |
class ArrayMap(@PublishedApi internal val keyList:List<String>, @PublishedApi internal val valueList:List<Any?>):Map<String, Any?>{ | |
class KeySet(val keyList:List<String>):Set<String>{ | |
override inline val size:Int get() = keyList.size | |
override inline fun isEmpty():Boolean = keyList.isEmpty() | |
override inline fun contains(element:String):Boolean = keyList.indexOf(element) != -1 | |
override inline fun iterator():Iterator<String> = keyList.iterator() | |
override inline fun containsAll(elements:Collection<String>):Boolean = elements.all{contains(it)} | |
} | |
class EntrySet(val keyList:List<String>, val valueList:List<Any?>):Set<Map.Entry<String, Any?>>{ | |
class Entry(override val key:String, override val value:Any?):Map.Entry<String, Any?> | |
@PublishedApi internal var _entryList:List<Map.Entry<String, Any?>>? = null | |
@PublishedApi internal inline val entryList:List<Map.Entry<String, Any?>> get() = _entryList ?: ArrayList<Map.Entry<String, Any?>>(size).also{list-> | |
var i = 0 | |
while(i < size){ | |
list.add(Entry(keyList[i], valueList[i])) | |
i++ | |
} | |
_entryList = list | |
} | |
override inline val size:Int get() = keyList.size | |
override inline fun isEmpty():Boolean = keyList.isEmpty() | |
override inline fun contains(element:Map.Entry<String, Any?>):Boolean = entryList.indexOf(element) != -1 | |
override inline fun iterator():Iterator<Map.Entry<String, Any?>> = entryList.iterator() | |
override inline fun containsAll(elements:Collection<Map.Entry<String, Any?>>):Boolean = elements.all{contains(it)} | |
} | |
override inline val size:Int get() = keyList.size | |
override val keys:Set<String> = KeySet(keyList) | |
override val values:Collection<Any?> = valueList | |
@PublishedApi internal var _entrySet:EntrySet? = null | |
override inline val entries:Set<Map.Entry<String, Any?>> get() = _entrySet ?: EntrySet(keyList, valueList).also{_entrySet = it} | |
override fun isEmpty():Boolean = size == 0 | |
override fun containsKey(key:String):Boolean = keyList.indexOf(key) != -1 | |
override fun containsValue(value:Any?):Boolean = valueList.indexOf(value) != -1 | |
override fun get(key:String):Any?{ | |
val i = keyList.indexOf(key) | |
return if(i == -1) null else valueList[i] | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment