Skip to content

Commit c24c07e

Browse files
committed
Some cleanup
1 parent d9fb051 commit c24c07e

File tree

7 files changed

+29
-28
lines changed

7 files changed

+29
-28
lines changed

docs/src/examples/ross.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,16 @@ end
4646
4747
@resumable function start_sim(env::Environment, repair_facility::Resource, spares::Store{Process})
4848
procs = Process[]
49-
for i in 1:N push!(procs, @process machine(env, repair_facility, spares)) end
49+
for i in 1:N
50+
push!(procs, @process machine(env, repair_facility, spares))
51+
end
5052
@yield Timeout(env)
51-
for proc in procs interrupt(proc) end
52-
for i in 1:S @yield Put(spares, @process machine(env, repair_facility, spares)) end
53+
for proc in procs
54+
interrupt(proc)
55+
end
56+
for i in 1:S
57+
@yield Put(spares, @process machine(env, repair_facility, spares))
58+
end
5359
end
5460
5561
function sim_repair()

src/base.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
abstract type AbstractEvent end
22
abstract type Environment end
33

4-
@enum EVENT_STATE idle=0 scheduled=1 processed=2
4+
@enum EVENT_STATE idle=0 scheduled=1 triggered=2 processed=3
55

66
struct EventProcessed <: Exception
77
ev :: AbstractEvent
@@ -66,6 +66,7 @@ function schedule(ev::AbstractEvent, delay::Number=zero(Float64); priority::Int8
6666
bev.value = value
6767
env.heap[bev] = EventKey(now(env) + delay, priority, env.sid+=one(UInt))
6868
bev.state = scheduled
69+
ev
6970
end
7071

7172
struct StopSimulation <: Exception

src/events.jl

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@ struct Event <: AbstractEvent
66
end
77

88
function succeed(ev::Event; priority::Int8=zero(Int8), value::Any=nothing) :: Event
9-
sta = state(ev)
10-
(sta == scheduled || sta == processed) && throw(EventNotIdle(ev))
9+
state(ev) != idle && throw(EventNotIdle(ev))
1110
schedule(ev; priority=priority, value=value)
12-
ev
1311
end
1412

1513
function fail(ev::Event, exc::Exception; priority::Int8=zero(Int8)) :: Event
@@ -19,9 +17,7 @@ end
1917
struct Timeout <: AbstractEvent
2018
bev :: BaseEvent
2119
function Timeout(env::Environment, delay::Number=0; priority::Int8=zero(Int8), value::Any=nothing)
22-
ev = new(BaseEvent(env))
23-
schedule(ev, delay; priority=priority, value=value)
24-
ev
20+
schedule(new(BaseEvent(env)), delay; priority=priority, value=value)
2521
end
2622
end
2723

src/operators.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ function check(ev::AbstractEvent, op::Operator, event_state_values::Dict{Abstrac
4040
end
4141

4242
function eval_and(state_values::Vector{StateValue})
43-
all(map((sv)->sv.state == processed, state_values))
43+
all(map((sv)->sv.state >= triggered, state_values))
4444
end
4545

4646
function eval_or(state_values::Vector{StateValue})
47-
any(map((sv)->sv.state == processed, state_values))
47+
any(map((sv)->sv.state >= triggered, state_values))
4848
end
4949

5050
function (&)(ev1::AbstractEvent, ev2::AbstractEvent)

src/processes.jl

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
mutable struct Process <: DiscreteProcess
22
bev :: BaseEvent
3-
fsm :: ResumableFunctions.FiniteStateMachineIterator
3+
fsmi :: ResumableFunctions.FiniteStateMachineIterator
44
target :: AbstractEvent
55
resume :: Function
66
function Process(func::Function, env::Environment, args::Any...)
77
cor = new()
88
cor.bev = BaseEvent(env)
9-
cor.fsm = func(env, args...)
9+
cor.fsmi = func(env, args...)
1010
cor.target = Timeout(env)
1111
cor.resume = @callback execute(cor.target, cor)
1212
cor
@@ -15,18 +15,16 @@ end
1515

1616
macro process(expr)
1717
expr.head != :call && error("Expression is not a function call!")
18-
func = esc(expr.args[1])
19-
args = [esc(expr.args[n]) for n in 2:length(expr.args)]
20-
:(Process($(func), $(args...)))
18+
esc(:(Process($(expr.args...))))
2119
end
2220

2321
function execute(ev::AbstractEvent, proc::Process)
2422
try
2523
env = environment(ev)
2624
set_active_process(env, proc)
27-
target = proc.fsm(value(ev))
25+
target = proc.fsmi(value(ev))
2826
reset_active_process(env)
29-
if done(proc.fsm)
27+
if done(proc.fsmi)
3028
schedule(proc; value=target)
3129
else
3230
proc.target = state(target) == processed ? Timeout(env; value=value(target)) : target
@@ -38,7 +36,7 @@ function execute(ev::AbstractEvent, proc::Process)
3836
end
3937

4038
function interrupt(proc::Process, cause::Any=nothing)
41-
if !done(proc.fsm)
39+
if !done(proc.fsmi)
4240
remove_callback(proc.resume, proc.target)
4341
proc.target = Timeout(environment(proc); priority=typemax(Int8), value=InterruptException(proc, cause))
4442
proc.resume = @callback execute(proc.target, proc)

src/resources/stores.jl

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,25 @@ function Put(sto::Store{T}, item::T; priority::Int=0) where T
2828
sto.put_queue[put_ev] = StorePutKey{T}(priority, sto.seid+=one(UInt), item)
2929
@callback trigger_get(put_ev, sto)
3030
trigger_put(put_ev, sto)
31-
return put_ev
31+
put_ev
3232
end
3333

34-
function get_any_item(::T) where T
35-
return true
36-
end
34+
get_any_item(::T) where T = true
3735

3836
function Get(sto::Store{T}, filter::Function=get_any_item; priority::Int=0) where T
3937
get_ev = Get(sto.env)
4038
sto.get_queue[get_ev] = StoreGetKey(priority, sto.seid+=one(UInt), filter)
4139
@callback trigger_put(get_ev, sto)
4240
trigger_get(get_ev, sto)
43-
return get_ev
41+
get_ev
4442
end
4543

4644
function do_put(sto::Store{T}, put_ev::Put, key::StorePutKey{T}) where {T}
4745
if length(sto.items) < sto.capacity
4846
push!(sto.items, key.item)
4947
schedule(put_ev)
5048
end
51-
return false
49+
false
5250
end
5351

5452
function do_get(sto::Store{T}, get_ev::Get, key::StoreGetKey) where {T}
@@ -59,5 +57,5 @@ function do_get(sto::Store{T}, get_ev::Get, key::StoreGetKey) where {T}
5957
break
6058
end
6159
end
62-
return true
60+
true
6361
end

src/simulations.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,12 @@ function step(sim::Simulation)
3434
(bev, key) = DataStructures.peek(sim.heap)
3535
DataStructures.dequeue!(sim.heap)
3636
sim.time = key.time
37-
bev.state = processed
37+
bev.state = triggered
3838
for callback in bev.callbacks
3939
callback()
4040
end
41+
bev.state = processed
42+
nothing
4143
end
4244

4345
function now(sim::Simulation)

0 commit comments

Comments
 (0)