Sha256: c4523a3161e412f2f4b0b2db9777959adbb6b4b6c6d00e6a7610a0b538bf5344

Contents?: true

Size: 1.19 KB

Versions: 3

Compression:

Stored size: 1.19 KB

Contents

module Pione
  module PNML
    # `InvalidArcElimination` is a net rewriting rule. This rule removes invalid
    # arcs from nets.
    module InvalidArcElimination
      # Find subjects(an invalid arc) by following criteria.
      #
      # - There is a arc.
      # - It should connect source place and target transition, or source
      #   transition and target place.
      def self.find_subjects(net)
        net.arcs.each do |arc|
          source_transition = net.find_transition(arc.source_id)
          source_place = net.find_place(arc.source_id)
          target_transition = net.find_transition(arc.target_id)
          target_place = net.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 [arc]
          end
        end

        return nil
      end

      # Rewrite the net by eliminating isolated node.
      def self.rewrite(net, subjects)
        arc = subjects.first

        # eliminate
        net.arcs.delete(arc)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
pione-0.4.2 lib/pione/pnml/invalid-arc-elimination.rb
pione-0.4.1 lib/pione/pnml/invalid-arc-elimination.rb
pione-0.4.0 lib/pione/pnml/invalid-arc-elimination.rb