Sha256: 65cf17662bc9befc7ca8a4baa40548a6e950e6ae4be8af113b9a0e820cf016e8

Contents?: true

Size: 1.15 KB

Versions: 2

Compression:

Stored size: 1.15 KB

Contents

# encoding: utf-8

class YPetri::Simulation
  # An array of simulation owned places and/or transitions.
  # 
  class Nodes < Array
    ★ Dependency

    class << self
      # New collection constructor
      #
      def load collection
        new.tap { |inst| inst.load collection }
      end
    end

    delegate :simulation, to: "self.class"

    # Loads nodes to this collection.
    #
    def load nodes
      nodes.each{ |node| push node }
    end

    # Creates a subset of this collection (of the same class).
    # 
    def subset nodes=nil, &block
      if block_given? then
        fail ArgumentError, "If block given, arguments not allowed!" unless
          nodes.nil?
        self.class.load select( &block )
      else
        fail ArgumentError, "A collection or a block expected!" if nodes.nil?
        nn = Nodes( nodes )
        nn.all? { |node| include? node } or
          fail TypeError, "All subset elements must be in the collection."
        self.class.load( nn )
      end
    end

    # Returns an array of the node sources (nodes in the underlying net).
    # 
    def sources
      map &:source
    end
    alias to_sources sources
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
y_petri-2.3.3 lib/y_petri/simulation/nodes.rb
y_petri-2.3.2 lib/y_petri/simulation/nodes.rb