class Dynflow::Executors::Parallel::WorkQueue

Public Class Methods

new(key_type = Object, work_type = Object) click to toggle source
# File lib/dynflow/executors/parallel/work_queue.rb, line 7
def initialize(key_type = Object, work_type = Object)
  @key_type  = key_type
  @work_type = work_type
  @stash     = Hash.new { |hash, key| hash[key] = [] }
end

Public Instance Methods

clear() click to toggle source
# File lib/dynflow/executors/parallel/work_queue.rb, line 32
def clear
  ret = @stash.dup
  @stash.clear
  ret
end
empty?(key) click to toggle source
# File lib/dynflow/executors/parallel/work_queue.rb, line 28
def empty?(key)
  !present?(key)
end
first(key) click to toggle source
# File lib/dynflow/executors/parallel/work_queue.rb, line 43
def first(key)
  return nil if empty?(key)
  @stash[key].first
end
present?(key) click to toggle source
# File lib/dynflow/executors/parallel/work_queue.rb, line 24
def present?(key)
  @stash.key?(key)
end
push(key, work) click to toggle source
# File lib/dynflow/executors/parallel/work_queue.rb, line 13
def push(key, work)
  Type! key, @key_type
  Type! work, @work_type
  @stash[key].push work
end
shift(key) click to toggle source
# File lib/dynflow/executors/parallel/work_queue.rb, line 19
def shift(key)
  return nil unless present? key
  @stash[key].shift.tap { |work| @stash.delete(key) if @stash[key].empty? }
end
size(key) click to toggle source
# File lib/dynflow/executors/parallel/work_queue.rb, line 38
def size(key)
  return 0 if empty?(key)
  @stash[key].size
end