⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simple-rpc.sml

📁 这是我们参加06年全国开源软件的竞赛作品
💻 SML
字号:
(* simple-rpc.sml * * COPYRIGHT (c) 1997 AT&T Labs Research. * * Generators for simple RPC protocols. *)structure SimpleRPC : SIMPLE_RPC =  struct    type 'a event = 'a CML.event    fun call reqMB arg = let	  val replV = SyncVar.iVar()	  in	    Mailbox.send(reqMB, (arg, replV));	    SyncVar.iGet replV	  end    fun mkRPC f = let	  val reqMB = Mailbox.mailbox()	  val entryEvt = CML.wrap (		Mailbox.recvEvt reqMB,		fn (arg, replV) => SyncVar.iPut(replV, f arg))	  in	    { call = call reqMB, entryEvt = entryEvt }	  end    fun mkRPC_In f = let	  val reqMB = Mailbox.mailbox()	  val reqEvt = Mailbox.recvEvt reqMB	  fun entryEvt state = CML.wrap (		reqEvt,		fn (arg, replV) => SyncVar.iPut(replV, f(arg, state)))	  in	    { call = call reqMB, entryEvt = entryEvt }	  end    fun mkRPC_Out f = let	  val reqMB = Mailbox.mailbox()	  val reqEvt = Mailbox.recvEvt reqMB	  val entryEvt = CML.wrap (		reqEvt,		fn (arg, replV) => let val (res, state') = f arg		  in		    SyncVar.iPut(replV, res); state'		  end)	  in	    { call = call reqMB, entryEvt = entryEvt }	  end    fun mkRPC_InOut f = let	  val reqMB = Mailbox.mailbox()	  val reqEvt = Mailbox.recvEvt reqMB	  fun entryEvt state = CML.wrap (		reqEvt,		fn (arg, replV) => let val (res, state') = f(arg, state)		  in		    SyncVar.iPut(replV, res); state'		  end)	  in	    { call = call reqMB, entryEvt = entryEvt }	  end  end

⌨️ 快捷键说明

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