Sha256: ed487d96ef339a560df86bb9691429f93d9623cae9a3a5dbc06b3fb35ecb81f0

Contents?: true

Size: 1.24 KB

Versions: 1

Compression:

Stored size: 1.24 KB

Contents

require 'set'
require 'hashmake'

module SPNet
class SignalOutPort
  include Hashmake::HashMakeable
  
  ARG_SPECS = [
    Hashmake::HashedArg.new(:reqd => false, :key => :name, :type => String, :default => "UNNAMED"),
  ]
  
  attr_reader :name, :links
  
  def initialize args = {}
    hash_make SignalOutPort::ARG_SPECS, args
    @links = Set.new
  end
  
  def send_values values
    @links.each do |link|
      link.enqueue_values values
    end
  end
  
  def add_link link
    raise ArgumentError, "link #{link} is not a SignalInPort" unless link.is_a?(SignalInPort)
    raise ArgumentError, "link #{link} is already linked to a SignalOutPort" if link.link
    @links.add link
    link.set_link self
  end
  
  def remove_link link
    raise ArgumentError, "link #{link} is not a SignalInPort" unless link.is_a?(SignalInPort)
    raise ArgumentError, "@links does not include link #{link}" unless @links.include? link
    @links.delete link
    link.clear_link
  end
  
  def remove_bad_links
    marked_for_removal = []
    
    @links.each do |link|
      bad = (link.link == nil) or (link.link != self)
      if bad
        marked_for_removal.push link
      end
    end
    
    marked_for_removal.each do |link|
      @links.delete link
    end
  end
end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
spnet-0.1.0 lib/spnet/signal_out_port.rb