2929function Put {N<:Number} (con:: Container{N} , amount:: N ; priority:: Int = 0 ) :: Put
3030 put_ev = Put (con. env)
3131 con. Put_queue[put_ev] = ContainerKey (priority, con. seid+= one (UInt), amount)
32- append_callback (trigger_get, put_ev, con)
32+ @callback trigger_get ( put_ev, con)
3333 trigger_put (put_ev, con)
34- return put_ev
34+ put_ev
3535end
3636
3737const Request = Put
3838
39- Request (res:: Resource ; priority:: Int = 0 ) = Put (res, 1 , priority= priority)
39+ Request (res:: Resource ; priority:: Int = 0 ) = Put (res, 1 ; priority= priority)
4040
4141macro request (res, req, expr)
4242 esc (quote
@@ -51,12 +51,12 @@ macro request(res, req, expr)
5151end
5252
5353function request (func:: Function , res:: Resource ; priority:: Int = 0 )
54- req = Request (res, priority= priority)
54+ req = Request (res; priority= priority)
5555 try
5656 func (req)
5757 finally
5858 if state (req) == triggered
59- yield (Release (res, priority= priority))
59+ yield (Release (res; priority= priority))
6060 else
6161 cancel (res, req)
6262 end
6666function Get {N<:Number} (con:: Container{N} , amount:: N ; priority:: Int = 0 ) :: Get
6767 get_ev = Get (con. env)
6868 con. Get_queue[get_ev] = ContainerKey (priority, con. seid+= one (UInt), amount)
69- append_callback (trigger_put, get_ev, con)
69+ @callback trigger_put ( get_ev, con)
7070 trigger_get (get_ev, con)
71- return get_ev
71+ get_ev
7272end
7373
7474const Release = Get
7575
76- Release (res:: Resource ; priority:: Int = 0 ) = Get (res, 1 , priority= priority)
76+ Release (res:: Resource ; priority:: Int = 0 ) = Get (res, 1 ; priority= priority)
7777
7878function do_put {N<:Number} (con:: Container{N} , put_ev:: Put , key:: ContainerKey{N} ) :: Bool
79- if con. level + key. amount <= con. capacity
80- schedule (put_ev. bev)
81- con. level += key. amount
82- return true
83- end
84- return false
79+ con. level + key. amount > con. capacity && return false
80+ schedule (put_ev)
81+ con. level += key. amount
82+ true
8583end
8684
8785function do_get {N<:Number} (con:: Container{N} , get_ev:: Get , key:: ContainerKey{N} ) :: Bool
88- if con. level - key. amount >= zero (N)
89- schedule (get_ev. bev)
90- con. level -= key. amount
91- return true
92- end
93- return false
86+ con. level - key. amount < zero (N) && return false
87+ schedule (get_ev)
88+ con. level -= key. amount
89+ true
9490end
0 commit comments