Sha256: db2e2dbb0b29f6ae1fbc3406f8834e49eef16d30d716c305e3e328b1428a317a

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

# encoding: utf-8
class YPetri::Net::State
  class Feature
    # Firing of a Petri net tS transition.
    # 
    class Firing < Feature
      attr_reader :transition

      class << self
        def parametrize *args
          Class.instance_method( :parametrize ).bind( self ).( *args ).tap do |ç|
            ç.instance_variable_set( :@instances,
                                     Hash.new do |hsh, id|
                                       case id
                                       when Firing then
                                         hsh[ id.transition ]
                                       when ç.net.Transition then
                                         hsh[ id ] = ç.__new__( id )
                                       else
                                         hsh[ ç.net.transition( id ) ]
                                       end
                                     end )
          end
        end

        attr_reader :instances

        alias __new__ new

        def new id
          instances[ id ]
        end

        def of id
          new id
        end
      end

      def initialize transition
        @transition = net.transition( transition )
      end

      def extract_from arg, **nn
        case arg
        when YPetri::Simulation then
          arg.send( :tS_transitions, [ transition ] ).firing.first
        else
          fail TypeError, "Argument type not supported!"
        end
      end

      def label
        "f:#{transition.name}"
      end
    end # class Firing
  end # class Feature
end # YPetri::Net::State

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
y_petri-2.1.3 lib/y_petri/net/state/feature/firing.rb