Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*
- import kotlin.reflect.KClass
- object Events {
- private val map = HashMap<Class<*>, Set<EventHandler<*>>>(2048)
- fun <T> EventHandler(handler: (T) -> Unit): EventHandler<T> = object : EventHandler<T> {
- override fun handle(event: T) = handler(event)
- }
- fun <T : Any> handler(eventType: KClass<T>, handler: (T) -> Unit) = handlerJ(eventType.java, handler)
- private fun <T : Any> handlerJ(eventType: Class<T>, handler: (T) -> Unit) =
- handlers(eventType).add(EventHandler(handler))
- fun post(event: Any) = handlers(event.javaClass).forEach { it.handle(event) }
- operator fun plus(event: Any) = post(event)
- private fun <T> handlers(eventType: Class<T>): HashSet<EventHandler<T>> {
- var set = map[eventType]
- if (set == null) {
- set = HashSet<EventHandler<*>>()
- map.put(eventType, set)
- }
- return set as HashSet<EventHandler<T>>
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment