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(place_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 75 76 77 78 79 80 |
# 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_target_id(target_id) ⇒ Array<Arc>
Find all arcs by the target ID.
88 89 90 91 92 93 94 95 96 |
# 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_all_places_by_name(name) ⇒ Array<Place>
Find places by the name.
274 275 276 277 278 279 280 281 282 |
# 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_source_id(transition_id) ⇒ Array<Transition>
Find all places by the source transition ID.
307 308 309 310 311 312 313 314 315 316 317 318 |
# 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_target_id(transition_id) ⇒ Array<Transition>
Find all places by the target transition ID.
343 344 345 346 347 348 349 350 351 352 353 354 |
# 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_name(name) ⇒ Array<Transition>
Find all transitions by the name.
159 160 161 162 163 164 165 166 167 |
# 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_source_id(place_id) ⇒ Array<Transition>
Find all transitions by the source place ID.
192 193 194 195 196 197 198 199 200 201 202 203 |
# 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_target_id(target_id) ⇒ Array<Transition>
Find all transitions by the target place ID.
228 229 230 231 232 233 234 235 236 237 238 239 |
# 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_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.
247 248 249 |
# File 'lib/pione/pnml/pnml-model.rb', line 247 def find_place(id) places.find {|place| place.id == id} end |
#find_place_by_name(name) ⇒ Place
Find a place by the name.
257 258 259 260 261 262 263 264 265 266 |
# 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_place_by_source_id(transition_id) ⇒ Array<Transition>
Find a place by the source transition ID.
290 291 292 293 294 295 296 297 298 299 |
# 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_place_by_target_id(transition_id) ⇒ Array<Transition>
Find a place by the target transition ID.
326 327 328 329 330 331 332 333 334 335 |
# 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_transition(id) ⇒ Transition
Find a transition by ID.
132 133 134 |
# File 'lib/pione/pnml/pnml-model.rb', line 132 def find_transition(id) transitions.find {|transition| transition.id == id} end |
#find_transition_by_name(name) ⇒ Transition
Find a transition by the name.
142 143 144 145 146 147 148 149 150 151 |
# 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_transition_by_source_id(place_id) ⇒ Array<Transition>
Find a transition by the source place ID.
175 176 177 178 179 180 181 182 183 184 |
# 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_transition_by_target_id(place_id) ⇒ Array<Transition>
Find a transition by the target place ID.
211 212 213 214 215 216 217 218 219 220 |
# 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_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.
116 117 118 119 120 121 122 123 124 |
# 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 |
#tp_arcs ⇒ Array<PNML::Arc>
Return all arcs which have the direction from transtion to place.
102 103 104 105 106 107 108 109 110 |
# 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 |
#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 |