Class: Petrinet::Net::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/petrinet/net.rb

Defined Under Namespace

Classes: Transition

Instance Method Summary collapse

Constructor Details

#initializeBuilder

Returns a new instance of Builder.



106
107
108
109
110
# File 'lib/petrinet/net.rb', line 106

def initialize
  @place_names = Set.new
  @transition_by_name = Hash.new
  @state_vector = []
end

Instance Method Details

#netObject



120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/petrinet/net.rb', line 120

def net
  place_index_by_place_name = Hash.new
  @place_names.sort.each_with_index do |place_name, index|
    place_index_by_place_name[place_name] = index
  end

  transition_vectors_by_transition_name_pairs = @transition_by_name.map do |transition_name, transition|
    [transition_name, transition.to_vectors(@place_names.size, place_index_by_place_name)]
  end
  transition_vectors_by_transition_name = Hash[transition_vectors_by_transition_name_pairs]

  Net.new(@state_vector.freeze, place_index_by_place_name.freeze, transition_vectors_by_transition_name.freeze)
end

#transition(transition_name, arcs) ⇒ Object



112
113
114
115
116
117
118
# File 'lib/petrinet/net.rb', line 112

def transition(transition_name, arcs)
  take_place_names = [arcs[:take]].flatten
  give_place_names = [arcs[:give]].flatten
  @place_names.merge(take_place_names)
  @place_names.merge(give_place_names)
  @transition_by_name[transition_name] = Transition.new(take_place_names, give_place_names)
end