src/Pure/General/event_bus.scala
author wenzelm
Mon, 29 Dec 2008 15:13:53 +0100
changeset 29191 de56edf88514
parent 29190 89217ccfd130
child 29200 787ba47201c7
permissions -rw-r--r--
added methods "+" and "-"; event: non-synchronized execution of handlers, based on synchronized snapshot;

/*  Title:      Pure/General/event_bus.scala
    Author:     Makarius

Generic event bus.
*/

package isabelle

import scala.collection.mutable.ListBuffer


class EventBus[Event] {
  type Handler = Event => Unit
  private val handlers = new ListBuffer[Handler]

  def += (h: Handler) = synchronized { handlers += h }
  def + (h: Handler) = { this += h; this }

  def -= (h: Handler) = synchronized { handlers -= h }
  def - (h: Handler) = { this -= h; this }

  def event(e: Event) = synchronized { handlers.toList } foreach (h => h(e))
}