Sha256: a03c25dac946099b0c965725a485d0f37f0f809ea52721ccaafa4c18f38bb4b3

Contents?: true

Size: 1.17 KB

Versions: 6

Compression:

Stored size: 1.17 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

6 entries across 6 versions & 1 rubygems

Version Path
y_petri-2.3.10 lib/y_petri/simulation/nodes.rb
y_petri-2.3.9 lib/y_petri/simulation/nodes.rb
y_petri-2.3.8 lib/y_petri/simulation/nodes.rb
y_petri-2.3.6 lib/y_petri/simulation/nodes.rb
y_petri-2.3.5 lib/y_petri/simulation/nodes.rb
y_petri-2.3.4 lib/y_petri/simulation/nodes.rb