Guest User

Untitled

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