jolib.scala

来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 81 行

SCALA
81
字号
/*                     __                                               *\**     ________ ___   / /  ___     Scala API                            ****    / __/ __// _ | / /  / _ |    (c) 2003-2007, LAMP/EPFL             ****  __\ \/ /__/ __ |/ /__/ __ |    http://scala-lang.org/               **** /____/\___/_/ |_/____/_/ | |                                         ****                          |/                                          **\*                                                                      */// $Id: jolib.scala 11950 2007-06-08 12:08:26Z michelou $package scala.concurrent/** * Library for using join-calculus concurrent primitives in Scala. * * @author  Vincent Cremet * @version 1.0, 17/10/2003 */ object jolib {  type Pattern = List[Signal]  type Rule = PartialFunction[List[Any], Unit]  /////////////////// JOIN DEFINITION /////////////////////////  class Join {    private var ruls: List[(Pattern, Rule)] = null    def canMatch(p: Pattern) =      p forall { s => !s.queue.isEmpty }        def values(p: Pattern): List[Any] =      p map { s => s.queue.dequeue: Any }    def rules(rs: (Pattern, Rule)*) =      ruls = rs.asInstanceOf[List[(Pattern, Rule)]]    def tryMatch =      ruls find { case (p, _) => canMatch(p) } match {        case None => () => ()        case Some((p, r)) => {          val args = values(p)          () => concurrent.ops.spawn(r(args))        }      }  }  /////////////////// SIGNALS /////////////////////////    abstract class Signal(join: Join) {    type C    val queue = new collection.mutable.Queue[C]    def tryReduction(x: C) {      val continuation = join synchronized {        queue.enqueue(x)        join.tryMatch      }      continuation()    }  }  abstract class Asynchr(join: Join) extends Signal(join) {    def apply(x: C): Unit = tryReduction(x)  }  abstract class Synchr[A](join: Join) extends Signal(join) {    type C <: SyncVar[A]    def apply(x: C): A = {      tryReduction(x)      x.get    }  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?