Sha256: 67d2fbc191ebe3d9fb82322f55241100d5df1aa7eec858eca4daa6034a8c18b2

Contents?: true

Size: 1.48 KB

Versions: 2

Compression:

Stored size: 1.48 KB

Contents

module SPNet
class Block
  include Hashmake::HashMakeable
  
  attr_reader :name, :signal_in_ports, :signal_out_ports, :message_in_ports, :message_out_ports
  
  DO_NOTHING = ->(){}
  
  HASHED_ARG_SPECS = [
    Hashmake::ArgSpec.new(:reqd => false, :key => :name, :type => String, :default => "UNNAMED"),
    Hashmake::ArgSpec.new(:reqd => false, :key => :algorithm, :type => Proc, :default => DO_NOTHING),
    Hashmake::ArgSpec.new(:reqd => false, :key => :signal_in_ports, :type => SignalInPort, :array => true, :default => ->(){ Array.new } ),
    Hashmake::ArgSpec.new(:reqd => false, :key => :signal_out_ports, :type => SignalOutPort, :array => true, :default => ->(){ Array.new }),
    Hashmake::ArgSpec.new(:reqd => false, :key => :message_in_ports, :type => MessageInPort, :array => true, :default => ->(){ Array.new }),
    Hashmake::ArgSpec.new(:reqd => false, :key => :message_out_ports, :type => MessageOutPort, :array => true, :default => ->(){ Array.new })
  ]
  
  def initialize args = {}
    hash_make Block::HASHED_ARG_SPECS, args
  end
  
  def find_ports name, ignore_case = true
    matches = (@signal_in_ports + @signal_out_ports + @message_in_ports + @message_out_ports).select do |port|
      if ignore_case
        port.name.casecmp(name) == 0
      else
        port.name == name
      end
    end
    return matches
  end
  
  def find_first_port name, ignore_case = true
    return find_ports(name, ignore_case).first
  end
  
  def step count
    @algorithm.call count
  end
end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
spnet-0.1.2 lib/spnet/block.rb
spnet-0.1.1 lib/spnet/block.rb