Skip to content
Snippets Groups Projects
Commit 62eeda72 authored by Unknown's avatar Unknown
Browse files

demos work both w/ and w/o event arguments

Event arguments now must be labeled.
parent 4b2783d6
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env ruby
require 'rubygems' if RUBY_VERSION =~ /^1\.8/
require_relative '../lib/simplekit'
# Demonstration model of Operational Availability (Ao).
......
#!/usr/bin/env ruby
require 'rubygems' if RUBY_VERSION =~ /^1\.8/
require_relative '../lib/simplekit'
# Demonstration model of an M/M/k queueing system. There are k servers
......
#!/usr/bin/env ruby
require 'rubygems' if RUBY_VERSION =~ /^1\.8/
require 'simplekit'
require_relative '../lib/simplekit'
class MyModel
include SimpleKit
......
#!/usr/bin/env ruby
require 'rubygems' if RUBY_VERSION =~ /^1\.8/
require_relative '../lib/simplekit'
class MyModel
......@@ -8,12 +7,12 @@ class MyModel
def init
@x = 1
schedule(:increment, rand(2), 1, 97)
schedule(:increment, rand(2), n: 1, c: 97)
end
def increment(n, c)
def increment(n:, c:)
@x += n
schedule(:increment, 2.0 * rand(2), @x, c + 1)
schedule(:increment, 2.0 * rand(2), n: @x, c: c + 1)
printf "%f, %f, %c\n", model_time, @x, c
schedule(:halt, 0.0) if model_time > 10
end
......
......@@ -53,9 +53,9 @@ module SimpleKit
# the event executes.
# - +args+ -> an optional list of arguments to pass to the event
# at invocation time.
def schedule(event, delay, *args)
def schedule(event, delay, **args)
raise 'Model scheduled event with negative delay.' if delay < 0
@event_list.push EventNotice.new(event, @model_time + delay, args)
@event_list.push EventNotice.new(event, @model_time, delay, args)
end
# Start execution of a model. The simulation +model_time+ is initialized
......@@ -68,7 +68,11 @@ module SimpleKit
@user_model.init
while (current_event = @event_list.pop)
@model_time = current_event.time
@user_model.send(current_event.event, *current_event.args)
if current_event.args.empty?
@user_model.send(current_event.event)
else
@user_model.send(current_event.event, current_event.args)
end
end
end
......@@ -79,9 +83,18 @@ module SimpleKit
end
end
# This is a private helper Struct for the EventScheduler class.
# This is a private helper class for the EventScheduler class.
# Users should never try to access this directly.
EventNotice = Struct.new(:event, :time, *:args) do
private class EventNotice
attr_reader :event, :time, :time_stamp, :args
def initialize(event, time, delay, **args)
@event = event
@time_stamp = time
@time = time + delay
@args = args
end
include Comparable
def <=>(other)
time <=> other.time
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment