Class: Pione::PNML::Net
- Inherits:
-
StructX
- Object
- StructX
- Pione::PNML::Net
- Defined in:
- lib/pione/pnml/pnml-model.rb
Overview
Net
represents a net in PNML. PIONE handles PT-nets only, so this is
consisted by places, transitions, and arcs.
Instance Method Summary collapse
-
#find_all_arcs_by_source_id(source_id) ⇒ Array<Arc>
Find all arcs by the source ID.
-
#find_all_arcs_by_target_id(target_id) ⇒ Array<Arc>
Find all arcs by the target ID.
-
#find_all_places_by_name(name) ⇒ Array<Place>
Find places by the name.
-
#find_all_places_by_source_id(transition_id) ⇒ Array<Transition>
Find all places by the source transition ID.
-
#find_all_places_by_target_id(transition_id) ⇒ Array<Transition>
Find all places by the target transition ID.
-
#find_all_transitions_by_name(name) ⇒ Array<Transition>
Find all transitions by the name.
-
#find_all_transitions_by_source_id(place_id) ⇒ Array<Transition>
Find all transitions by the source place ID.
-
#find_all_transitions_by_target_id(target_id) ⇒ Array<Transition>
Find all transitions by the target place ID.
-
#find_arc(source_id, target_id) ⇒ PNML::Arc
Find the arc that connects from the source ID to the target ID.
-
#find_place(id) ⇒ Place
Find a place by ID.
-
#find_place_by_name(name) ⇒ Place
Find a place by the name.
-
#find_place_by_source_id(transition_id) ⇒ Array<Transition>
Find a place by the source transition ID.
-
#find_place_by_target_id(transition_id) ⇒ Array<Transition>
Find a place by the target transition ID.
-
#find_transition(id) ⇒ Transition
Find a transition by ID.
-
#find_transition_by_name(name) ⇒ Transition
Find a transition by the name.
-
#find_transition_by_source_id(place_id) ⇒ Array<Transition>
Find a transition by the source place ID.
-
#find_transition_by_target_id(target_id) ⇒ Array<Transition>
Find a transition by the target place ID.
-
#generate_id ⇒ Object
Generate a new PNML's ID.
-
#pt_arcs ⇒ Array<PNML::Arc>
Return all arcs which have the direction from place to transition.
-
#tp_arcs ⇒ Array<PNML::Arc>
Return all arcs which have the direction from transtion to place.
-
#valid? ⇒ Boolean
Return true if the net is valid.
Instance Method Details
#find_all_arcs_by_source_id(source_id) ⇒ Array<Arc>
Find all arcs by the source ID.
72 73 74 |
# File 'lib/pione/pnml/pnml-model.rb', line 72 def find_all_arcs_by_source_id(source_id) arcs.select {|arc| arc.source_id == source_id} end |
#find_all_arcs_by_target_id(target_id) ⇒ Array<Arc>
Find all arcs by the target ID.
82 83 84 |
# File 'lib/pione/pnml/pnml-model.rb', line 82 def find_all_arcs_by_target_id(target_id) arcs.select {|arc| arc.target_id == target_id} end |
#find_all_places_by_name(name) ⇒ Array<Place>
Find places by the name.
240 241 242 |
# File 'lib/pione/pnml/pnml-model.rb', line 240 def find_all_places_by_name(name) places.select {|place| place.name == name} end |
#find_all_places_by_source_id(transition_id) ⇒ Array<Transition>
Find all places by the source transition ID.
270 271 272 273 274 275 276 |
# File 'lib/pione/pnml/pnml-model.rb', line 270 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 return _places.compact.uniq end |
#find_all_places_by_target_id(transition_id) ⇒ Array<Transition>
Find all places by the target transition ID.
304 305 306 307 308 309 310 |
# File 'lib/pione/pnml/pnml-model.rb', line 304 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 return _places.compact.uniq end |
#find_all_transitions_by_name(name) ⇒ Array<Transition>
Find all transitions by the name.
135 136 137 |
# File 'lib/pione/pnml/pnml-model.rb', line 135 def find_all_transitions_by_name(name) transitions.select {|transition| transition.name == name} end |
#find_all_transitions_by_source_id(place_id) ⇒ Array<Transition>
Find all transitions by the source place ID.
165 166 167 168 169 170 171 |
# File 'lib/pione/pnml/pnml-model.rb', line 165 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 return _transitions.compact.uniq end |
#find_all_transitions_by_target_id(target_id) ⇒ Array<Transition>
Find all transitions by the target place ID.
199 200 201 202 203 204 205 |
# File 'lib/pione/pnml/pnml-model.rb', line 199 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 return _transitions.compact.uniq end |
#find_arc(source_id, target_id) ⇒ PNML::Arc
Find the arc that connects from the source ID to the target ID. If no
arcs found, return nil
.
55 56 57 58 59 60 61 62 63 64 |
# 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_place(id) ⇒ Place
Find a place by ID.
213 214 215 |
# File 'lib/pione/pnml/pnml-model.rb', line 213 def find_place(id) places.find {|place| place.id == id} end |
#find_place_by_name(name) ⇒ Place
Find a place by the name.
223 224 225 226 227 228 229 230 231 232 |
# File 'lib/pione/pnml/pnml-model.rb', line 223 def find_place_by_name(name) _places = places.select {|place| place.name == name} # the result shouldn't be ambiguous if _places.size > 1 raise AmbiguousNetQueryResult.new(__method__, name, _places) end return _places.first end |
#find_place_by_source_id(transition_id) ⇒ Array<Transition>
Find a place by the source transition ID.
250 251 252 253 254 255 256 257 258 259 260 261 262 |
# File 'lib/pione/pnml/pnml-model.rb', line 250 def find_place_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 # the result shouldn't be ambiguous if _places.size > 1 raise AmbiguousNetQueryResult.new(__method__, name, _places) end return _places.first end |
#find_place_by_target_id(transition_id) ⇒ Array<Transition>
Find a place by the target transition ID.
284 285 286 287 288 289 290 291 292 293 294 295 296 |
# File 'lib/pione/pnml/pnml-model.rb', line 284 def find_place_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 # the result shouldn't be ambiguous if _places.size > 1 raise AmbiguousNetQueryResult.new(__method__, name, _places) end return _places.first end |
#find_transition(id) ⇒ Transition
Find a transition by ID.
108 109 110 |
# File 'lib/pione/pnml/pnml-model.rb', line 108 def find_transition(id) transitions.find {|transition| transition.id == id} end |
#find_transition_by_name(name) ⇒ Transition
Find a transition by the name.
118 119 120 121 122 123 124 125 126 127 |
# File 'lib/pione/pnml/pnml-model.rb', line 118 def find_transition_by_name(name) _transitions = transitions.select {|transition| transition.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_transition_by_source_id(place_id) ⇒ Array<Transition>
Find a transition by the source place ID.
145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/pione/pnml/pnml-model.rb', line 145 def find_transition_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 # the result shouldn't be ambiguous if _transitions.size > 1 raise AmbiguousNetQueryResult.new(__method__, place_id, _transitions) end return _transitions.first end |
#find_transition_by_target_id(target_id) ⇒ Array<Transition>
Find a transition by the target place ID.
179 180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/pione/pnml/pnml-model.rb', line 179 def find_transition_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 # the result shouldn't be ambiguous if _transitions.size > 1 raise AmbiguousNetQueryResult.new(__method__, place_id, _transitions) end return _transitions.first end |
#generate_id ⇒ Object
Generate a new PNML's ID.
16 17 18 |
# File 'lib/pione/pnml/pnml-model.rb', line 16 def generate_id Util::UUID.generate end |
#pt_arcs ⇒ Array<PNML::Arc>
Return all arcs which have the direction from place to transition.
98 99 100 |
# File 'lib/pione/pnml/pnml-model.rb', line 98 def pt_arcs arcs.select {|arc| arc.from_place_to_transition?} end |
#tp_arcs ⇒ Array<PNML::Arc>
Return all arcs which have the direction from transtion to place.
90 91 92 |
# File 'lib/pione/pnml/pnml-model.rb', line 90 def tp_arcs arcs.select {|arc| arc.from_transition_to_place?} end |
#valid? ⇒ Boolean
Return true if the net is valid. The criterion of validness is that all arcs connect places and transitions.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# 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 |