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

commonMain.ru.casperix.signals.concrete.SlotCollection.kt Maven / Gradle / Ivy

package ru.casperix.signals.concrete

import ru.casperix.signals.collection.IterateSafeMap
import ru.casperix.signals.api.CustomSlotCollection

/**
 * 	Реализация коллекции слотов для сигналов
 */
class SlotCollection : CustomSlotCollection {
	protected val slots = IterateSafeMap()

	private var ID = 0L
	private var onCancel = ::cancel

	override fun forEach(action: (Listener) -> Unit) {
		slots.forEachValue(action)
	}

	override fun removeAllListeners() {
		slots.clear()
	}

	override fun getListener(slot: Slot): Listener? {
		return slots[slot.id]
	}

	override fun cancel(slot: Slot): Boolean {
		return slot.holder === this && slots.remove(slot.id) != null
	}

	override fun then(listener: Listener): Slot {
		val slot = Slot(++ID, this, onCancel)
		slots[slot.id] = listener
		return slot
	}

	override val size: Int
		get() = slots.size
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy