All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.ru.casperix.signals.collection.IterateSafeMap.kt Maven / Gradle / Ivy

package ru.casperix.signals.collection

class IterateSafeMap : AbstractMap() {
	private var map = LinkedHashMap(4, 0.25f)
	private var locked = false

	fun forEach(action:(Map.Entry)->Unit) {
		locked = true
		map.forEach (action)
		locked = false
	}

	fun forEachKey(action:(Key)->Unit) {
		locked = true
		map.keys.forEach (action)
		locked = false
	}

	fun forEachValue(action:(Value)->Unit) {
		locked = true
		map.values.forEach (action)
		locked = false
	}

	fun clear() {
		if (locked) {
			map = LinkedHashMap()
			locked = false
		} else {
			map.clear()
		}
	}

	fun put(key: Key, value: Value):Value? {
		if (locked) {
			map = LinkedHashMap(map)
			locked = false
		}
		return map.put(key, value)
	}

	fun remove(key: Key): Value? {
		if (locked) {
			map = LinkedHashMap(map)
			locked = false
		}
		return map.remove(key)
	}

	operator fun set(key: Key, value: Value) {
		put(key, value)
	}

	override val entries: Set>
		get() = map.entries

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy