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