Skip to content

Commit 8059d1a

Browse files
committed
Some updates in resources
1 parent f38e4c3 commit 8059d1a

5 files changed

Lines changed: 20 additions & 71 deletions

File tree

src/SimJulia.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ module SimJulia
99
using Base.Dates
1010
using TaylorSeries
1111

12-
import Base.run, Base.now, Base.isless, Base.show, Base.interrupt, Base.yield
12+
import Base.run, Base.now, Base.isless, Base.show, Base.interrupt, Base.yield, Base.length
1313
import Base.(&), Base.(|)
1414
import TaylorSeries.evaluate
1515

src/resources/base.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,31 +23,31 @@ function isless(a::ResourceKey, b::ResourceKey)
2323
end
2424

2525
function trigger_put(put_ev::ResourceEvent, res::AbstractResource)
26-
queue = DataStructures.PriorityQueue(res.Put_queue)
26+
queue = DataStructures.PriorityQueue(res.put_queue)
2727
while length(queue) > 0
2828
(put_ev, key) = DataStructures.peek(queue)
2929
proceed = do_put(res, put_ev, key)
30-
state(put_ev) == scheduled && DataStructures.dequeue!(res.Put_queue, put_ev)
30+
state(put_ev) == scheduled && DataStructures.dequeue!(res.put_queue, put_ev)
3131
proceed ? DataStructures.dequeue!(queue) : break
3232
end
3333
end
3434

3535
function trigger_get(get_ev::ResourceEvent, res::AbstractResource)
36-
queue = DataStructures.PriorityQueue(res.Get_queue)
36+
queue = DataStructures.PriorityQueue(res.get_queue)
3737
while length(queue) > 0
3838
(get_ev, key) = DataStructures.peek(queue)
3939
proceed = do_get(res, get_ev, key)
40-
state(get_ev) == scheduled && DataStructures.dequeue!(res.Get_queue, get_ev)
40+
state(get_ev) == scheduled && DataStructures.dequeue!(res.get_queue, get_ev)
4141
proceed ? DataStructures.dequeue!(queue) : break
4242
end
4343
end
4444

4545
function cancel(res::AbstractResource, put_ev::Put)
46-
DataStructures.dequeue!(res.Put_queue, put_ev)
46+
DataStructures.dequeue!(res.put_queue, put_ev)
4747
end
4848

4949
function cancel(res::AbstractResource, get_ev::Get)
50-
DataStructures.dequeue!(res.Get_queue, get_ev)
50+
DataStructures.dequeue!(res.get_queue, get_ev)
5151
end
5252

5353
function capacity(res::AbstractResource)

src/resources/containers.jl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ mutable struct Container{N<:Number} <: AbstractResource
99
capacity :: N
1010
level :: N
1111
seid :: UInt
12-
Put_queue :: DataStructures.PriorityQueue{Put, ContainerKey{N}}
13-
Get_queue :: DataStructures.PriorityQueue{Get, ContainerKey{N}}
12+
put_queue :: DataStructures.PriorityQueue{Put, ContainerKey{N}}
13+
get_queue :: DataStructures.PriorityQueue{Get, ContainerKey{N}}
1414
function Container{N}(env::Environment, capacity::N, level::N) where {N<:Number}
1515
new(env, capacity, level, zero(UInt), DataStructures.PriorityQueue(Put, ContainerKey{N}), DataStructures.PriorityQueue(Get, ContainerKey{N}))
1616
end
@@ -28,7 +28,7 @@ end
2828

2929
function Put{N<:Number}(con::Container{N}, amount::N; priority::Int=0) :: Put
3030
put_ev = Put(con.env)
31-
con.Put_queue[put_ev] = ContainerKey(priority, con.seid+=one(UInt), amount)
31+
con.put_queue[put_ev] = ContainerKey(priority, con.seid+=one(UInt), amount)
3232
@callback trigger_get(put_ev, con)
3333
trigger_put(put_ev, con)
3434
put_ev
@@ -65,7 +65,7 @@ end
6565

6666
function Get{N<:Number}(con::Container{N}, amount::N; priority::Int=0) :: Get
6767
get_ev = Get(con.env)
68-
con.Get_queue[get_ev] = ContainerKey(priority, con.seid+=one(UInt), amount)
68+
con.get_queue[get_ev] = ContainerKey(priority, con.seid+=one(UInt), amount)
6969
@callback trigger_put(get_ev, con)
7070
trigger_get(get_ev, con)
7171
get_ev
@@ -88,3 +88,7 @@ function do_get{N<:Number}(con::Container{N}, get_ev::Get, key::ContainerKey{N})
8888
con.level -= key.amount
8989
true
9090
end
91+
92+
function length(res::Resource)
93+
length(res.put_queue)
94+
end

src/resources/stores.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ mutable struct Store{T} <: AbstractResource
1515
capacity :: UInt
1616
items :: Set{T}
1717
seid :: UInt
18-
Put_queue :: DataStructures.PriorityQueue{Put, StorePutKey{T}}
19-
Get_queue :: DataStructures.PriorityQueue{Get, StoreGetKey}
18+
put_queue :: DataStructures.PriorityQueue{Put, StorePutKey{T}}
19+
get_queue :: DataStructures.PriorityQueue{Get, StoreGetKey}
2020
function Store{T}(env::Environment, capacity::UInt) where {T}
2121
new(env, capacity, Set{T}(), zero(UInt), DataStructures.PriorityQueue(Put, StorePutKey{T}), DataStructures.PriorityQueue(Get, StoreGetKey))
2222
end
@@ -28,7 +28,7 @@ end
2828

2929
function Put{T}(sto::Store{T}, item::T; priority::Int=0) :: Put
3030
put_ev = Put(sto.env)
31-
sto.Put_queue[put_ev] = StorePutKey(priority, sto.seid+=one(UInt), item)
31+
sto.put_queue[put_ev] = StorePutKey(priority, sto.seid+=one(UInt), item)
3232
@callback trigger_get(put_ev, sto)
3333
trigger_put(put_ev, sto)
3434
return put_ev
@@ -40,7 +40,7 @@ end
4040

4141
function Get{T}(sto::Store{T}, filter::Function=get_any_item; priority::Int=0) :: Get
4242
get_ev = Get(sto.env)
43-
sto.Get_queue[get_ev] = StoreGetKey(priority, sto.seid+=one(UInt), filter)
43+
sto.get_queue[get_ev] = StoreGetKey(priority, sto.seid+=one(UInt), filter)
4444
@callback trigger_put(get_ev, sto)
4545
trigger_get(get_ev, sto)
4646
return get_ev

test/containers.jl

Lines changed: 1 addition & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -66,59 +66,4 @@ con = Container(sim, 10.0; level=5.0)
6666
@coroutine my_producer(sim, con)
6767
run(sim)
6868

69-
@resumable function resource_user(sim::Simulation, res::Resource, i::Int)
70-
@request res req begin
71-
println("Requested $i")
72-
val = @yield return req | Timeout(sim, rand())
73-
if val[req].state == SimJulia.triggered
74-
println("Received $i")
75-
@yield return Timeout(sim, rand())
76-
else
77-
println("Timeout $i")
78-
end
79-
end
80-
println("Released automatically $i")
81-
end
82-
83-
@resumable function create_users(sim::Simulation)
84-
res = Resource(sim)
85-
i = 1
86-
while true
87-
@coroutine resource_user(sim, res, i)
88-
@yield return Timeout(sim, rand())
89-
i == 10 && break
90-
i += 1
91-
end
92-
capacity(res)
93-
end
94-
95-
sim = Simulation()
96-
@coroutine create_users(sim)
97-
run(sim)
98-
99-
function resource_user_process(sim::Simulation, res::Resource, i::Int)
100-
request(res) do req
101-
println("Requested $i")
102-
val = yield(req | Timeout(sim, rand()))
103-
if val[req].state == SimJulia.triggered
104-
println("Received $i")
105-
yield(Timeout(sim, rand()))
106-
else
107-
println("Timeout $i")
108-
end
109-
end
110-
println("Released automatically $i")
111-
end
112-
113-
function create_users_process(sim::Simulation)
114-
res = Resource(sim)
115-
for i = 1:10
116-
@process resource_user_process(sim, res, i)
117-
yield(Timeout(sim, rand()))
118-
end
119-
capacity(res)
120-
end
121-
122-
sim = Simulation()
123-
@process create_users_process(sim)
124-
run(sim)
69+

0 commit comments

Comments
 (0)