module RPetri::Net::Builder
Public Class Methods
new()
click to toggle source
# File lib/rpetri/net/builder.rb, line 4 def initialize initialize_hashes end
Public Instance Methods
add_arc(*args)
click to toggle source
# File lib/rpetri/net/builder.rb, line 32 def add_arc(*args) arc = nil if args[1] options = args[2] || {} klass = options.delete(:class) source = get_item_from_param(args[0], 'source') target = get_item_from_param(args[1], 'target') arc = (klass || Arc).new(source, target, options) elsif args[0].is_a?(Arc) arc = args[0] end add_arcs([arc]) if arc end
add_arcs(arcs)
click to toggle source
# File lib/rpetri/net/builder.rb, line 46 def add_arcs(arcs) arcs.each do |arc| @arc_sources_hash[arc.source.uuid] << arc @arc_targets_hash[arc.target.uuid] << arc end end
add_place(place_param = nil, options = {}, &block)
click to toggle source
# File lib/rpetri/net/builder.rb, line 8 def add_place(place_param = nil, options = {}, &block) tokens = options.delete(:tokens) || 0 place = get_item(Place, place_param, options, &block) add_places([place], tokens) if place end
add_places(places, tokens = 0)
click to toggle source
# File lib/rpetri/net/builder.rb, line 14 def add_places(places, tokens = 0) places.each do |place| @places_hash[place.uuid] = place end add_tokens_to(places, tokens) if tokens > 0 end
add_tokens_to(places, tokens = 1)
click to toggle source
# File lib/rpetri/net/builder.rb, line 53 def add_tokens_to(places, tokens = 1) places = [places] if places.is_a?(Place) places.each do |place| @initial_tokens_hash[place.uuid] += tokens end end
add_transition(transition_param = nil, options = {}, &block)
click to toggle source
# File lib/rpetri/net/builder.rb, line 21 def add_transition(transition_param = nil, options = {}, &block) transition = get_item(Transition, transition_param, options, &block) add_transitions([transition]) if transition end
add_transitions(transitions)
click to toggle source
# File lib/rpetri/net/builder.rb, line 26 def add_transitions(transitions) transitions.each do |transition| @transitions_hash[transition.uuid] = transition end end
Protected Instance Methods
create_item(item, base_class, options, &block)
click to toggle source
# File lib/rpetri/net/builder.rb, line 81 def create_item(item, base_class, options, &block) klass = options.delete(:class) || base_class klass.new(item, options, &block) end
get_item(base_class, item, options, &block)
click to toggle source
# File lib/rpetri/net/builder.rb, line 70 def get_item(base_class, item, options, &block) case item when base_class item when String create_item(item, base_class, options, &block) when NilClass create_item(item, base_class, options, &block) end end
get_item_from_param(param, name)
click to toggle source
# File lib/rpetri/net/builder.rb, line 94 def get_item_from_param(param, name) if param.is_a? String item = get_place_by_name(param) || get_transition_by_name(param) raise RPetri::ValidationError, "There is no #{name} with this name" unless item return item end param end
get_place_by_name(name)
click to toggle source
# File lib/rpetri/net/builder.rb, line 86 def get_place_by_name(name) @places_hash.values.find { |p| p.name == name } end
get_transition_by_name(name)
click to toggle source
# File lib/rpetri/net/builder.rb, line 90 def get_transition_by_name(name) @transitions_hash.values.find { |t| t.name == name } end
initialize_hashes()
click to toggle source
# File lib/rpetri/net/builder.rb, line 62 def initialize_hashes @places_hash = {} @transitions_hash = {} @arc_sources_hash = Hash.new { |h, k| h[k] = [] } @arc_targets_hash = Hash.new { |h, k| h[k] = [] } @initial_tokens_hash = Hash.new(0) end