class Pione::PNML::Net
‘Net` represents a net in PNML
. PIONE handles PT-nets only, so this is consisted by places, transitions, and arcs.
Public Instance Methods
Find all arcs by the source ID.
@param source_id [String]
source ID
@return [Array<Arc>]
result arcs
# File lib/pione/pnml/pnml-model.rb, line 72 def find_all_arcs_by_source_id(source_id) _arcs = arcs.select {|arc| arc.source_id == source_id} if block_given? _arcs.each {|arc| yield arc} else return _arcs end end
Find all arcs by the target ID.
@param target_id [String]
target ID
@return [Array<Arc>]
result arcs
# File lib/pione/pnml/pnml-model.rb, line 88 def find_all_arcs_by_target_id(target_id) _arcs = arcs.select {|arc| arc.target_id == target_id} if block_given? _arcs.each {|arc| yield arc} else return _arcs end end
Find places by the name.
@param name [String]
place name
@return [Array<Place>]
places
# File lib/pione/pnml/pnml-model.rb, line 274 def find_all_places_by_name(name) _places = places.select {|place| place.name == name} if block_given? _places.each {|place| yield place} else return _places end end
Find all places by the source transition ID.
@param transition_id [String]
transition ID
@return [Array<Transition>]
result places
# File lib/pione/pnml/pnml-model.rb, line 307 def find_all_places_by_source_id(transition_id) _arcs = arcs.select {|arc| arc.source_id == transition_id} _places = _arcs.map do |arc| places.find {|place| place.id == arc.target_id} end.compact.uniq if block_given? _places.each {|place| yield place} else return _places end end
Find all places by the target transition ID.
@param transition_id [String]
transition ID
@return [Array<Transition>]
result places
# File lib/pione/pnml/pnml-model.rb, line 343 def find_all_places_by_target_id(transition_id) _arcs = arcs.select {|arc| arc.target_id == transition_id} _places = _arcs.map do |arc| places.find {|place| place.id == arc.source_id} end.compact.uniq if block_given? _places.each {|place| yield place} else return _places end end
Find all transitions by the name.
@param name [String]
transition's name
@return [Array<Transition>]
transitions
# File lib/pione/pnml/pnml-model.rb, line 159 def find_all_transitions_by_name(name) _transitions = transitions.select {|transition| transition.name == name} if block_given? _transitions.each {|transition| yield transition} else return _transitions end end
Find all transitions by the source place ID.
@param place_id [String]
place ID
@return [Array<Transition>]
result transitions
# File lib/pione/pnml/pnml-model.rb, line 192 def find_all_transitions_by_source_id(place_id) _arcs = arcs.select {|arc| arc.source_id == place_id} _transitions = _arcs.map do |arc| transitions.find {|transition| transition.id == arc.target_id} end.compact.uniq if block_given? _transitions.each {|transition| yield transition} else return _transitions end end
Find all transitions by the target place ID.
@param place_id [String]
place ID
@return [Array<Transition>]
result transitions
# File lib/pione/pnml/pnml-model.rb, line 228 def find_all_transitions_by_target_id(target_id) _arcs = arcs.select {|arc| arc.target_id == target_id} _transitions = _arcs.map do |arc| transitions.find {|transition| transition.id == arc.source_id} end.compact.uniq if block_given? _transitions.each {|transition| yield transition} else return _transitions end end
Find the arc that connects from the source ID to the target ID. If no arcs found, return ‘nil`.
@param source_id [String]
source ID
@param target_id [String]
target ID
@return [PNML::Arc]
the arc, or `nil`
# File lib/pione/pnml/pnml-model.rb, line 55 def find_arc(source_id, target_id) _arcs = arcs.select {|arc| arc.source_id == source_id and arc.target_id == target_id} # the result shouldn't be ambiguous if _arcs.size > 1 raise AmbiguousNetQueryResult.new(__method__, place_id, _transitions) end return _arcs.first end
Find a place by ID.
@param id [String]
the place ID
@return [Place]
place
# File lib/pione/pnml/pnml-model.rb, line 247 def find_place(id) places.find {|place| place.id == id} end
Find a place by the name.
@param name [String]
the place name
@return [Place]
a place, or nil
# File lib/pione/pnml/pnml-model.rb, line 257 def find_place_by_name(name) _places = find_all_places_by_name(name) # the result shouldn't be ambiguous if _places.size > 1 raise AmbiguousNetQueryResult.new(__method__, name, _places) end return _places.first end
Find a place by the source transition ID.
@param transition_id [String]
transition ID
@return [Array<Transition>]
a result place
# File lib/pione/pnml/pnml-model.rb, line 290 def find_place_by_source_id(transition_id) _places = find_all_places_by_source_id(transition_id) # the result shouldn't be ambiguous if _places.size > 1 raise AmbiguousNetQueryResult.new(__method__, name, _places) end return _places.first end
Find a place by the target transition ID.
@param transition_id [String]
transition ID
@return [Array<Transition>]
result places
# File lib/pione/pnml/pnml-model.rb, line 326 def find_place_by_target_id(transition_id) _places = find_all_places_by_target_id(transition_id) # the result shouldn't be ambiguous if _places.size > 1 raise AmbiguousNetQueryResult.new(__method__, name, _places) end return _places.first end
Find a transition by ID.
@param id [String]
transition ID
@return [Transition]
transition
# File lib/pione/pnml/pnml-model.rb, line 132 def find_transition(id) transitions.find {|transition| transition.id == id} end
Find a transition by the name.
@param name [String]
the transition name
@return [Transition]
a transition, or nil
# File lib/pione/pnml/pnml-model.rb, line 142 def find_transition_by_name(name) _transitions = find_all_transitions_by_name(name) # the result shouldn't be ambiguous if _transitions.size > 1 raise AmbiguousNetQueryResult.new(__method__, place_id, _transitions) end return _transitions.first end
Find a transition by the source place ID.
@param place_id [String]
place ID
@return [Array<Transition>]
result transitions
# File lib/pione/pnml/pnml-model.rb, line 175 def find_transition_by_source_id(place_id) _transitions = find_all_transitions_by_source_id(place_id) # the result shouldn't be ambiguous if _transitions.size > 1 raise AmbiguousNetQueryResult.new(__method__, place_id, _transitions) end return _transitions.first end
Find a transition by the target place ID.
@param place_id [String]
place ID
@return [Array<Transition>]
result transitions
# File lib/pione/pnml/pnml-model.rb, line 211 def find_transition_by_target_id(place_id) _transitions = find_all_transitions_by_target_id(place_id) # the result shouldn't be ambiguous if _transitions.size > 1 raise AmbiguousNetQueryResult.new(__method__, place_id, _transitions) end return _transitions.first end
Generate a new PNML’s ID.
# File lib/pione/pnml/pnml-model.rb, line 16 def generate_id Util::UUID.generate end
Return all arcs which have the direction from place to transition.
@return [Array<PNML::Arc>]
arcs
# File lib/pione/pnml/pnml-model.rb, line 116 def pt_arcs _arcs = arcs.select {|arc| arc.from_place_to_transition?} if block_given? _arcs.each {|arc| yield arc} else return _arcs end end
Return all arcs which have the direction from transtion to place.
@return [Array<PNML::Arc>]
arcs
# File lib/pione/pnml/pnml-model.rb, line 102 def tp_arcs _arcs = arcs.select {|arc| arc.from_transition_to_place?} if block_given? _arcs.each {|arc| yield arc} else return _arcs end end
Return true if the net is valid. The criterion of validness is that all arcs connect places and transitions.
@return [Boolean]
true if the net is valid
# File lib/pione/pnml/pnml-model.rb, line 25 def valid? arcs.each do |arc| source_transition = find_transition(arc.source_id) source_place = find_place(arc.source_id) target_transition = find_transition(arc.target_id) target_place = find_place(arc.target_id) # arc from transition to place cond1 = not(source_transition.nil?) && not(target_place.nil?) # arc from place to transition cond2 = not(source_place.nil?) && not(target_transition.nil?) unless cond1 or cond2 return false end end return true end