src/Pure/General/event_bus.scala
author blanchet
Tue, 17 Feb 2009 14:01:54 +0100
changeset 29956 62f931b257b7
parent 29200 787ba47201c7
child 32539 668052c4220e
permissions -rw-r--r--
Reintroduce set_interpreter for Collect and op :. I removed them by accident when removing old code that dealt with the "set" type. Incidentally, there is still some broken "set" code in Refute that should be fixed (see TODO in refute.ML).

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

Generic event bus with multiple handlers and optional exception
logging.
*/

package isabelle

import scala.collection.mutable.ListBuffer


class EventBus[Event]
{
  /* event handlers */

  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 }


  /* event invocation */

  var logger: Throwable => Unit = throw _

  def event(x: Event) = {
    val log = logger
    for (h <- synchronized { handlers.toList }) {
      try { h(x) }
      catch { case e: Throwable => log(e) }
    }
  }
}