Guest User

Untitled

a guest
Nov 9th, 2015
1,670
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 0.88 KB | None | 0 0
  1. import java.util.*
  2. import kotlin.reflect.KClass
  3.  
  4. object Events {
  5.  
  6.     private val map = HashMap<Class<*>, Set<EventHandler<*>>>(2048)
  7.  
  8.     fun <T> EventHandler(handler: (T) -> Unit): EventHandler<T> = object : EventHandler<T> {
  9.         override fun handle(event: T) = handler(event)
  10.     }
  11.  
  12.     fun <T : Any> handler(eventType: KClass<T>, handler: (T) -> Unit) = handlerJ(eventType.java, handler)
  13.  
  14.     private fun <T : Any> handlerJ(eventType: Class<T>, handler: (T) -> Unit) =
  15.             handlers(eventType).add(EventHandler(handler))
  16.  
  17.     fun post(event: Any) = handlers(event.javaClass).forEach { it.handle(event) }
  18.  
  19.     operator fun plus(event: Any) = post(event)
  20.  
  21.     private fun <T> handlers(eventType: Class<T>): HashSet<EventHandler<T>> {
  22.         var set = map[eventType]
  23.         if (set == null) {
  24.             set = HashSet<EventHandler<*>>()
  25.             map.put(eventType, set)
  26.         }
  27.         return set as HashSet<EventHandler<T>>
  28.     }
  29.  
  30. }
Advertisement
Add Comment
Please, Sign In to add comment