Sha256: 2e5f54b91ed72160e0541904e8667df2cd7e928d6609b2b041b5544199493282

Contents?: true

Size: 985 Bytes

Versions: 2

Compression:

Stored size: 985 Bytes

Contents

require 'hashmake'
require 'spcore'

module SPNet
class SignalInPort < InPort

  include Hashmake::HashMakeable
  
  DEFAULT_LIMITS = (-Float::MAX..Float::MAX)
  
  ARG_SPECS = [
    Hashmake::ArgSpec.new(:reqd => false, :key => :limits, :type => Range, :default => DEFAULT_LIMITS)
  ]
  
  attr_reader :limits, :queue

  def initialize hashed_args = {}
    hash_make(SignalInPort::ARG_SPECS, hashed_args)
    @queue = []
    @skip_limiting = (@limits == DEFAULT_LIMITS)
    @limiter = SPCore::Limiters.make_range_limiter @limits

    hashed_args.merge!(:matching_port_class => SignalOutPort)
    super(hashed_args)
  end

  def enqueue_values values
    unless @skip_limiting
      for i in 0...values.count
        values[i] = @limiter.call(values[i])
      end
    end
    
    @queue.concat values
  end
  
  def dequeue_values count = @queue.count
    raise ArgumentError, "count is greater than @queue.count" if count > @queue.count
    @queue.slice!(0...count)
  end
  
end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
spnet-0.1.4 lib/spnet/ports/signal_in_port.rb
spnet-0.1.3 lib/spnet/ports/signal_in_port.rb