Class SpringSet
In: lib/spring_set.rb
Parent: Object

$LastChangedBy: ertai $ $Id: /w/fey/ruby_ex/trunk/lib/spring_set.rb 7944 2005-09-06T23:27:27.929371Z ertai $

Methods

Public Class methods

[Source]

# File lib/spring_set.rb, line 13
  def initialize(*springs)
    @springs = {}
    springs.flatten.each do |s|
      @springs[s.object_id] = {
        :spring => s,
        :num_collecter => s.num_collecter,
        :size => s.size
      }
      s.add_observer(self)
    end
  end

Public Instance methods

[Source]

# File lib/spring_set.rb, line 66
  def each
    @springs.values.each { |v| yield(v[:spring]) }
  end

[Source]

# File lib/spring_set.rb, line 38
  def get_most_busy
    calc_stat(:num_collecter) { |a, b| a > b }
  end

[Source]

# File lib/spring_set.rb, line 46
  def get_most_empty
    calc_stat(:size) { |a, b| a < b }
  end

[Source]

# File lib/spring_set.rb, line 34
  def get_most_free
    calc_stat(:num_collecter) { |a, b| a < b }
  end

[Source]

# File lib/spring_set.rb, line 42
  def get_most_full
    calc_stat(:size) { |a, b| a > b }
  end
length()

Alias for size

[Source]

# File lib/spring_set.rb, line 56
  def num_collecter(spring_id)
    @springs[spring_id][:num_collecter]
  end

[Source]

# File lib/spring_set.rb, line 50
  def size
    @springs.size
  end
spring_length(spring_id)

Alias for spring_size

[Source]

# File lib/spring_set.rb, line 60
  def spring_size(spring_id)
    @springs[spring_id][:size]
  end

[Source]

# File lib/spring_set.rb, line 25
  def update(spring_id, msg, collecter_id)
    case msg
    when Spring::SIGN_UP
      @springs[spring_id][:num_collecter] += 1
    when Spring::GET
      @springs[spring_id][:size] -= 1 if @springs[spring_id][:size] > 0
    end
  end

Protected Instance methods

[Source]

# File lib/spring_set.rb, line 71
  def calc_stat(field, &cmp)
    spring = nil
    @springs.values.each do |s|
      if spring.nil? or cmp[s[field], spring[field]]
        spring = s
      end
    end
    return spring[:spring]
  end

[Validate]