Class: Dynflow::Executors::Parallel::WorkQueue

Inherits:
Object
  • Object
show all
Includes:
Algebrick::TypeCheck
Defined in:
lib/dynflow/executors/parallel/work_queue.rb

Instance Method Summary collapse

Constructor Details

#initialize(key_type = Object, work_type = Object) ⇒ WorkQueue

Returns a new instance of WorkQueue.



7
8
9
10
11
# 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

Instance Method Details

#clearObject



32
33
34
35
36
# File 'lib/dynflow/executors/parallel/work_queue.rb', line 32

def clear
  ret = @stash.dup
  @stash.clear
  ret
end

#empty?(key) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/dynflow/executors/parallel/work_queue.rb', line 28

def empty?(key)
  !present?(key)
end

#first(key) ⇒ Object



43
44
45
46
# File 'lib/dynflow/executors/parallel/work_queue.rb', line 43

def first(key)
  return nil if empty?(key)
  @stash[key].first
end

#present?(key) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/dynflow/executors/parallel/work_queue.rb', line 24

def present?(key)
  @stash.key?(key)
end

#push(key, work) ⇒ Object



13
14
15
16
17
# 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) ⇒ Object



19
20
21
22
# 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) ⇒ Object



38
39
40
41
# File 'lib/dynflow/executors/parallel/work_queue.rb', line 38

def size(key)
  return 0 if empty?(key)
  @stash[key].size
end